| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | /*++Copyright (c) Alex Ionescu.  All rights reserved.Module Name:    lzmadec.hAbstract:    This header file contains C-style definitions, constants, and enumerations    that map back to the LZMA Standard, specifically the probability model that    is used for encoding probabilities.Author:    Alex Ionescu (@aionescu) 15-Apr-2020 - Initial versionEnvironment:    Windows & Linux, user mode and kernel mode.--*/#pragma once//// Literals can be 0-255 and are encoded in 3 different types of slots based on// the previous literal decoded and the "match byte" used.//#define LZMA_LITERALS                       256#define LZMA_LC_TYPES                       3#define LZMA_LC_MODEL_SIZE                  (LZMA_LC_TYPES * LZMA_LITERALS)//// These are the hardcoded LZMA properties we support for position and coders//#define LZMA_LC                             3#define LZMA_PB                             2#define LZMA_LP                             0#define LZMA_LITERAL_CODERS                 (1 << LZMA_LC)#define LZMA_POSITION_COUNT                 (1 << LZMA_PB)//// Lengths are described in three different ways using "low", "mid", and "high"// bit trees. The first two trees encode 3 bits, the last encodes 8. We never// encode a length less than 2 bytes, since that's wasteful.//#define LZMA_MAX_LOW_LENGTH                 (1 << 3)#define LZMA_MAX_MID_LENGTH                 (1 << 3)#define LZMA_MAX_HIGH_LENGTH                (1 << 8)#define LZMA_MIN_LENGTH                     2//// Distances can be encoded in different ways, based on the distance slot.// Lengths of 2, 3, 4 bytes are directly encoded with their own slot. Lengths// over 5 share a slot, which is then further subdivded into 3 different ways// of encoding them, which are described in the source.//#define LZMA_DISTANCE_SLOTS                 64#define LZMA_FIRST_CONTEXT_DISTANCE_SLOT    4#define LZMA_FIRST_FIXED_DISTANCE_SLOT      14#define LZMA_DISTANCE_ALIGN_BITS            4#define LZMA_DISTANCE_ALIGN_SLOTS           (1 << LZMA_DISTANCE_ALIGN_BITS)//// Total number of probabilities that we need to store//#define LZMA_BIT_MODEL_SLOTS                (1174 +                     \                                             (LZMA_LITERAL_CODERS *     \                                              LZMA_LC_MODEL_SIZE))//// The LZMA probability bit model is typically based on the last LZMA sequences// that were decoded. There are 11 such possibilities that are tracked.//typedef enum _LZMA_SEQUENCE_STATE{    //    // State where we last saw three literals    //    LzmaLitLitLitState,    //    // States where we last saw two literals preceeded by a non-literal    //    LzmaMatchLitLitState,    LzmaRepLitLitState,    LzmaLitShortrepLitLitState,    //    // States where we last saw one literal preceeded by a non-literal    //    LzmaMatchLitState,    LzmaRepLitState,    LzmaLitShortrepLitState,    //    // Separator between states where we last saw at least one literal    //    LzmaMaxLitState,    //    // States where we last saw a non-literal preceeded by a literal    //    LzmaLitMatchState = 7,    LzmaLitRepState,    LzmaLitShortrepState,    //    // States where we last saw two non-literals    //    LzmaNonlitMatchState,    LzmaNonlitRepState,    //    // Separator for number of total states    //    LzmaMaxState} LZMA_SEQUENCE_STATE, * PLZMA_SEQUENCE_STATE;
 |