1*f6dc9357SAndroid Build Coastguard Worker // ImplodeDecoder.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMPRESS_IMPLODE_DECODER_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMPRESS_IMPLODE_DECODER_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../ICoder.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../Common/InBuffer.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker #include "BitlDecoder.h" 13*f6dc9357SAndroid Build Coastguard Worker #include "LzOutWindow.h" 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker namespace NCompress { 16*f6dc9357SAndroid Build Coastguard Worker namespace NImplode { 17*f6dc9357SAndroid Build Coastguard Worker namespace NDecoder { 18*f6dc9357SAndroid Build Coastguard Worker 19*f6dc9357SAndroid Build Coastguard Worker typedef NBitl::CDecoder<CInBuffer> CInBit; 20*f6dc9357SAndroid Build Coastguard Worker 21*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumHuffmanBits = 16; 22*f6dc9357SAndroid Build Coastguard Worker const unsigned kMaxHuffTableSize = 1 << 8; 23*f6dc9357SAndroid Build Coastguard Worker 24*f6dc9357SAndroid Build Coastguard Worker class CHuffmanDecoder 25*f6dc9357SAndroid Build Coastguard Worker { 26*f6dc9357SAndroid Build Coastguard Worker UInt32 _limits[kNumHuffmanBits + 1]; 27*f6dc9357SAndroid Build Coastguard Worker UInt32 _poses[kNumHuffmanBits + 1]; 28*f6dc9357SAndroid Build Coastguard Worker Byte _symbols[kMaxHuffTableSize]; 29*f6dc9357SAndroid Build Coastguard Worker public: 30*f6dc9357SAndroid Build Coastguard Worker bool Build(const Byte *lens, unsigned numSymbols) throw(); 31*f6dc9357SAndroid Build Coastguard Worker unsigned Decode(CInBit *inStream) const throw(); 32*f6dc9357SAndroid Build Coastguard Worker }; 33*f6dc9357SAndroid Build Coastguard Worker 34*f6dc9357SAndroid Build Coastguard Worker 35*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_4( 36*f6dc9357SAndroid Build Coastguard Worker CCoder 37*f6dc9357SAndroid Build Coastguard Worker , ICompressCoder 38*f6dc9357SAndroid Build Coastguard Worker , ICompressSetDecoderProperties2 39*f6dc9357SAndroid Build Coastguard Worker , ICompressSetFinishMode 40*f6dc9357SAndroid Build Coastguard Worker , ICompressGetInStreamProcessedSize 41*f6dc9357SAndroid Build Coastguard Worker ) 42*f6dc9357SAndroid Build Coastguard Worker Byte _flags; 43*f6dc9357SAndroid Build Coastguard Worker bool _fullStreamMode; 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker CLzOutWindow _outWindowStream; 46*f6dc9357SAndroid Build Coastguard Worker CInBit _inBitStream; 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker CHuffmanDecoder _litDecoder; 49*f6dc9357SAndroid Build Coastguard Worker CHuffmanDecoder _lenDecoder; 50*f6dc9357SAndroid Build Coastguard Worker CHuffmanDecoder _distDecoder; 51*f6dc9357SAndroid Build Coastguard Worker 52*f6dc9357SAndroid Build Coastguard Worker bool BuildHuff(CHuffmanDecoder &table, unsigned numSymbols); 53*f6dc9357SAndroid Build Coastguard Worker HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream, 54*f6dc9357SAndroid Build Coastguard Worker const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); 55*f6dc9357SAndroid Build Coastguard Worker public: 56*f6dc9357SAndroid Build Coastguard Worker CCoder(); 57*f6dc9357SAndroid Build Coastguard Worker }; 58*f6dc9357SAndroid Build Coastguard Worker 59*f6dc9357SAndroid Build Coastguard Worker }}} 60*f6dc9357SAndroid Build Coastguard Worker 61*f6dc9357SAndroid Build Coastguard Worker #endif 62