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,111 @@
|
||||
// Rar2Decoder.h
|
||||
// According to unRAR license, this code may not be used to develop
|
||||
// a program that creates RAR archives
|
||||
|
||||
#ifndef ZIP7_INC_COMPRESS_RAR2_DECODER_H
|
||||
#define ZIP7_INC_COMPRESS_RAR2_DECODER_H
|
||||
|
||||
#include "../../Common/MyCom.h"
|
||||
|
||||
#include "../ICoder.h"
|
||||
|
||||
#include "../Common/InBuffer.h"
|
||||
|
||||
#include "BitmDecoder.h"
|
||||
#include "HuffmanDecoder.h"
|
||||
#include "LzOutWindow.h"
|
||||
|
||||
namespace NCompress {
|
||||
namespace NRar2 {
|
||||
|
||||
const unsigned kNumReps = 4;
|
||||
const unsigned kDistTableSize = 48;
|
||||
const unsigned kNumLen2Symbols = 8;
|
||||
const unsigned kLenTableSize = 28;
|
||||
const unsigned kMainTableSize = 256 + 2 + kNumReps + kNumLen2Symbols + kLenTableSize;
|
||||
const unsigned kHeapTablesSizesSum = kMainTableSize + kDistTableSize + kLenTableSize;
|
||||
const unsigned k_MM_TableSize = 256 + 1;
|
||||
const unsigned k_MM_NumChanelsMax = 4;
|
||||
const unsigned k_MM_TablesSizesSum = k_MM_TableSize * k_MM_NumChanelsMax;
|
||||
const unsigned kMaxTableSize = k_MM_TablesSizesSum;
|
||||
|
||||
namespace NMultimedia {
|
||||
|
||||
struct CFilter
|
||||
{
|
||||
int K1,K2,K3,K4,K5;
|
||||
int D1,D2,D3,D4;
|
||||
int LastDelta;
|
||||
UInt32 Dif[11];
|
||||
UInt32 ByteCount;
|
||||
int LastChar;
|
||||
|
||||
void Init() { memset(this, 0, sizeof(*this)); }
|
||||
Byte Decode(int &channelDelta, Byte delta);
|
||||
};
|
||||
|
||||
struct CFilter2
|
||||
{
|
||||
CFilter m_Filters[k_MM_NumChanelsMax];
|
||||
int m_ChannelDelta;
|
||||
unsigned CurrentChannel;
|
||||
|
||||
void Init() { memset(this, 0, sizeof(*this)); }
|
||||
Byte Decode(Byte delta)
|
||||
{
|
||||
return m_Filters[CurrentChannel].Decode(m_ChannelDelta, delta);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
typedef NBitm::CDecoder<CInBuffer> CBitDecoder;
|
||||
|
||||
const unsigned kNumHufBits = 15;
|
||||
|
||||
Z7_CLASS_IMP_NOQIB_2(
|
||||
CDecoder
|
||||
, ICompressCoder
|
||||
, ICompressSetDecoderProperties2
|
||||
)
|
||||
bool _isSolid;
|
||||
bool _solidAllowed;
|
||||
bool m_TablesOK;
|
||||
bool m_AudioMode;
|
||||
|
||||
CLzOutWindow m_OutWindowStream;
|
||||
CBitDecoder m_InBitStream;
|
||||
|
||||
UInt32 m_RepDistPtr;
|
||||
UInt32 m_RepDists[kNumReps];
|
||||
UInt32 m_LastLength;
|
||||
unsigned m_NumChannels;
|
||||
|
||||
NHuffman::CDecoder<kNumHufBits, kMainTableSize, 9> m_MainDecoder;
|
||||
NHuffman::CDecoder256<kNumHufBits, kDistTableSize, 7> m_DistDecoder;
|
||||
NHuffman::CDecoder256<kNumHufBits, kLenTableSize, 7> m_LenDecoder;
|
||||
NHuffman::CDecoder<kNumHufBits, k_MM_TableSize, 9> m_MMDecoders[k_MM_NumChanelsMax];
|
||||
|
||||
UInt64 m_PackSize;
|
||||
|
||||
NMultimedia::CFilter2 m_MmFilter;
|
||||
Byte m_LastLevels[kMaxTableSize];
|
||||
|
||||
void InitStructures();
|
||||
UInt32 ReadBits(unsigned numBits);
|
||||
bool ReadTables();
|
||||
bool ReadLastTables();
|
||||
|
||||
bool DecodeMm(UInt32 pos);
|
||||
bool DecodeLz(Int32 pos);
|
||||
|
||||
HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
|
||||
const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
|
||||
|
||||
public:
|
||||
CDecoder();
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user