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