xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/QuantumDecoder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // QuantumDecoder.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMPRESS_QUANTUM_DECODER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMPRESS_QUANTUM_DECODER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyTypes.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker namespace NCompress {
9*f6dc9357SAndroid Build Coastguard Worker namespace NQuantum {
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumLitSelectorBits = 2;
12*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumLitSelectors = 1 << kNumLitSelectorBits;
13*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumLitSymbols = 1 << (8 - kNumLitSelectorBits);
14*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumMatchSelectors = 3;
15*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumSelectors = kNumLitSelectors + kNumMatchSelectors;
16*f6dc9357SAndroid Build Coastguard Worker const unsigned kNumSymbolsMax = kNumLitSymbols; // 64
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker class CRangeDecoder;
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker class CModelDecoder
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker   unsigned NumItems;
23*f6dc9357SAndroid Build Coastguard Worker   unsigned ReorderCount;
24*f6dc9357SAndroid Build Coastguard Worker   Byte Vals[kNumSymbolsMax];
25*f6dc9357SAndroid Build Coastguard Worker   UInt16 Freqs[kNumSymbolsMax + 1];
26*f6dc9357SAndroid Build Coastguard Worker public:
27*f6dc9357SAndroid Build Coastguard Worker   Byte _pad[64 - 10]; // for structure size alignment
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker   void Init(unsigned numItems, unsigned startVal);
30*f6dc9357SAndroid Build Coastguard Worker   unsigned Decode(CRangeDecoder *rc);
31*f6dc9357SAndroid Build Coastguard Worker };
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker class CDecoder
35*f6dc9357SAndroid Build Coastguard Worker {
36*f6dc9357SAndroid Build Coastguard Worker   UInt32 _winSize;
37*f6dc9357SAndroid Build Coastguard Worker   UInt32 _winPos;
38*f6dc9357SAndroid Build Coastguard Worker   UInt32 _winSize_allocated;
39*f6dc9357SAndroid Build Coastguard Worker   bool _overWin;
40*f6dc9357SAndroid Build Coastguard Worker   Byte *_win;
41*f6dc9357SAndroid Build Coastguard Worker   unsigned _numDictBits;
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker   CModelDecoder m_Selector;
44*f6dc9357SAndroid Build Coastguard Worker   CModelDecoder m_Literals[kNumLitSelectors];
45*f6dc9357SAndroid Build Coastguard Worker   CModelDecoder m_PosSlot[kNumMatchSelectors];
46*f6dc9357SAndroid Build Coastguard Worker   CModelDecoder m_LenSlot;
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker   void Init();
49*f6dc9357SAndroid Build Coastguard Worker   HRESULT CodeSpec(const Byte *inData, size_t inSize, UInt32 outSize);
50*f6dc9357SAndroid Build Coastguard Worker public:
51*f6dc9357SAndroid Build Coastguard Worker   HRESULT Code(const Byte *inData, size_t inSize, UInt32 outSize, bool keepHistory);
52*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetParams(unsigned numDictBits);
53*f6dc9357SAndroid Build Coastguard Worker 
CDecoder()54*f6dc9357SAndroid Build Coastguard Worker   CDecoder(): _win(NULL), _numDictBits(0) {}
GetDataPtr()55*f6dc9357SAndroid Build Coastguard Worker   const Byte * GetDataPtr() const { return _win + _winPos; }
56*f6dc9357SAndroid Build Coastguard Worker };
57*f6dc9357SAndroid Build Coastguard Worker 
58*f6dc9357SAndroid Build Coastguard Worker }}
59*f6dc9357SAndroid Build Coastguard Worker 
60*f6dc9357SAndroid Build Coastguard Worker #endif
61