1*f6dc9357SAndroid Build Coastguard Worker // ZDecoder.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMPRESS_Z_DECODER_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMPRESS_Z_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 namespace NCompress { 11*f6dc9357SAndroid Build Coastguard Worker namespace NZ { 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker // Z decoder decodes Z data stream, including 3 bytes of header. 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker class CDecoder 16*f6dc9357SAndroid Build Coastguard Worker { 17*f6dc9357SAndroid Build Coastguard Worker UInt16 *_parents; 18*f6dc9357SAndroid Build Coastguard Worker Byte *_suffixes; 19*f6dc9357SAndroid Build Coastguard Worker Byte *_stack; 20*f6dc9357SAndroid Build Coastguard Worker unsigned _numMaxBits; 21*f6dc9357SAndroid Build Coastguard Worker 22*f6dc9357SAndroid Build Coastguard Worker public: CDecoder()23*f6dc9357SAndroid Build Coastguard Worker CDecoder(): _parents(NULL), _suffixes(NULL), _stack(NULL), /* _prop(0), */ _numMaxBits(0) {} 24*f6dc9357SAndroid Build Coastguard Worker ~CDecoder(); 25*f6dc9357SAndroid Build Coastguard Worker void Free(); 26*f6dc9357SAndroid Build Coastguard Worker // UInt64 PackSize; 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker HRESULT Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, 29*f6dc9357SAndroid Build Coastguard Worker ICompressProgressInfo *progress); 30*f6dc9357SAndroid Build Coastguard Worker }; 31*f6dc9357SAndroid Build Coastguard Worker 32*f6dc9357SAndroid Build Coastguard Worker /* 33*f6dc9357SAndroid Build Coastguard Worker There is no end_of_payload_marker in Z stream. 34*f6dc9357SAndroid Build Coastguard Worker Z decoder stops decoding, if it reaches end of input stream. 35*f6dc9357SAndroid Build Coastguard Worker 36*f6dc9357SAndroid Build Coastguard Worker CheckStream function: 37*f6dc9357SAndroid Build Coastguard Worker (size) must be at least 3 bytes (size of Z header). 38*f6dc9357SAndroid Build Coastguard Worker if (size) is larger than size of real Z stream in (data), CheckStream can return false. 39*f6dc9357SAndroid Build Coastguard Worker */ 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard Worker const unsigned kRecommendedCheckSize = 64; 42*f6dc9357SAndroid Build Coastguard Worker 43*f6dc9357SAndroid Build Coastguard Worker bool CheckStream(const Byte *data, size_t size); 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker }} 46*f6dc9357SAndroid Build Coastguard Worker 47*f6dc9357SAndroid Build Coastguard Worker #endif 48