mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
91 lines
2.1 KiB
C++
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
|