view src/win32/7zip/7z/CPP/7zip/Compress/ImplodeDecoder.h @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
line wrap: on
line source
1 // ImplodeDecoder.h
3 #ifndef __COMPRESS_IMPLODE_DECODER_H
4 #define __COMPRESS_IMPLODE_DECODER_H
6 #include "../../Common/MyCom.h"
8 #include "../ICoder.h"
10 #include "ImplodeHuffmanDecoder.h"
11 #include "LzOutWindow.h"
13 namespace NCompress {
14 namespace NImplode {
15 namespace NDecoder {
17 class CCoder:
18 public ICompressCoder,
19 public ICompressSetDecoderProperties2,
20 public CMyUnknownImp
21 {
22 CLzOutWindow m_OutWindowStream;
23 NBitl::CDecoder<CInBuffer> m_InBitStream;
25 NImplode::NHuffman::CDecoder m_LiteralDecoder;
26 NImplode::NHuffman::CDecoder m_LengthDecoder;
27 NImplode::NHuffman::CDecoder m_DistanceDecoder;
29 bool m_BigDictionaryOn;
30 bool m_LiteralsOn;
32 int m_NumDistanceLowDirectBits;
33 UInt32 m_MinMatchLength;
35 bool ReadLevelItems(NImplode::NHuffman::CDecoder &table, Byte *levels, int numLevelItems);
36 bool ReadTables();
37 void DeCodeLevelTable(Byte *newLevels, int numLevels);
38 public:
39 CCoder();
41 MY_UNKNOWN_IMP1(ICompressSetDecoderProperties2)
43 void ReleaseStreams();
44 HRESULT Flush() { return m_OutWindowStream.Flush(); }
46 HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
47 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
49 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
50 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
52 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
53 };
55 }}}
57 #endif