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