xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/ZDecoder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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