chore: initial commit (extracted from Launchers monorepo)
Plugin: ns7zip v2.0.0 Architectures: x86-ansi, x86-unicode, amd64-unicode License: LGPL-2.1-or-later
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
// QuantumDecoder.h
|
||||
|
||||
#ifndef ZIP7_INC_COMPRESS_QUANTUM_DECODER_H
|
||||
#define ZIP7_INC_COMPRESS_QUANTUM_DECODER_H
|
||||
|
||||
#include "../../Common/MyTypes.h"
|
||||
|
||||
namespace NCompress {
|
||||
namespace NQuantum {
|
||||
|
||||
const unsigned kNumLitSelectorBits = 2;
|
||||
const unsigned kNumLitSelectors = 1 << kNumLitSelectorBits;
|
||||
const unsigned kNumLitSymbols = 1 << (8 - kNumLitSelectorBits);
|
||||
const unsigned kNumMatchSelectors = 3;
|
||||
const unsigned kNumSelectors = kNumLitSelectors + kNumMatchSelectors;
|
||||
const unsigned kNumSymbolsMax = kNumLitSymbols; // 64
|
||||
|
||||
class CRangeDecoder;
|
||||
|
||||
class CModelDecoder
|
||||
{
|
||||
unsigned NumItems;
|
||||
unsigned ReorderCount;
|
||||
Byte Vals[kNumSymbolsMax];
|
||||
UInt16 Freqs[kNumSymbolsMax + 1];
|
||||
public:
|
||||
Byte _pad[64 - 10]; // for structure size alignment
|
||||
|
||||
void Init(unsigned numItems, unsigned startVal);
|
||||
unsigned Decode(CRangeDecoder *rc);
|
||||
};
|
||||
|
||||
|
||||
class CDecoder
|
||||
{
|
||||
UInt32 _winSize;
|
||||
UInt32 _winPos;
|
||||
UInt32 _winSize_allocated;
|
||||
bool _overWin;
|
||||
Byte *_win;
|
||||
unsigned _numDictBits;
|
||||
|
||||
CModelDecoder m_Selector;
|
||||
CModelDecoder m_Literals[kNumLitSelectors];
|
||||
CModelDecoder m_PosSlot[kNumMatchSelectors];
|
||||
CModelDecoder m_LenSlot;
|
||||
|
||||
void Init();
|
||||
HRESULT CodeSpec(const Byte *inData, size_t inSize, UInt32 outSize);
|
||||
public:
|
||||
HRESULT Code(const Byte *inData, size_t inSize, UInt32 outSize, bool keepHistory);
|
||||
HRESULT SetParams(unsigned numDictBits);
|
||||
|
||||
CDecoder(): _win(NULL), _numDictBits(0) {}
|
||||
const Byte * GetDataPtr() const { return _win + _winPos; }
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user