r5sdk/r5dev/thirdparty/lzham/lzhamdecomp/lzham_lzdecompbase.h

91 lines
2.1 KiB
C++

// File: lzham_lzdecompbase.h
// See Copyright Notice and license at the end of include/lzham.h
#pragma once
//#define LZHAM_LZDEBUG
#define LZHAM_IS_MATCH_MODEL_INDEX(prev_char, cur_state) ((prev_char) >> (8 - CLZDecompBase::cNumIsMatchContextBits)) + ((cur_state) << CLZDecompBase::cNumIsMatchContextBits)
#define LZHAM_USE_ALL_ARITHMETIC_CODING 0
#define LZHAM_RND_CONG(jcong) (69069U * jcong + 1234567U)
namespace lzham
{
struct CLZDecompBase
{
enum
{
cMinMatchLen = 2U,
cMaxMatchLen = 257U,
cMaxHugeMatchLen = 65536,
cMinDictSizeLog2 = 15,
cMaxDictSizeLog2 = 29,
cMatchHistSize = 4,
cMaxLen2MatchDist = 2047
};
enum
{
cLZXNumSecondaryLengths = 249,
cNumHugeMatchCodes = 1,
cMaxHugeMatchCodeBits = 16,
cLZXNumSpecialLengths = 2,
cLZXLowestUsableMatchSlot = 1,
cLZXMaxPositionSlots = 128
};
enum
{
cLZXSpecialCodeEndOfBlockCode = 0,
cLZXSpecialCodePartialStateReset = 1
};
enum
{
cLZHAMDebugSyncMarkerValue = 666,
cLZHAMDebugSyncMarkerBits = 12
};
enum
{
cBlockHeaderBits = 2,
cBlockCheckBits = 4,
cBlockFlushTypeBits = 2,
cSyncBlock = 0,
cCompBlock = 1,
cRawBlock = 2,
cEOFBlock = 3
};
enum
{
cNumStates = 12,
cNumLitStates = 7,
cNumLitPredBits = 6, // must be even
cNumDeltaLitPredBits = 6, // must be even
cNumIsMatchContextBits = 6
};
uint m_dict_size_log2;
uint m_dict_size;
uint m_num_lzx_slots;
uint m_lzx_position_base[cLZXMaxPositionSlots];
uint m_lzx_position_extra_mask[cLZXMaxPositionSlots];
uint8 m_lzx_position_extra_bits[cLZXMaxPositionSlots];
void init_position_slots(uint dict_size_log2);
};
} // namespace lzham