54 lines
1.3 KiB
C
54 lines
1.3 KiB
C
|
#ifndef _LZMA_ENCODER_H
|
||
|
#define _LZMA_ENCODER_H
|
||
|
|
||
|
#include "lzma.h"
|
||
|
#include "RangeCoderBitTree.h"
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
CState State;
|
||
|
bool Prev1IsChar;
|
||
|
bool Prev2;
|
||
|
unsigned PosPrev2;
|
||
|
unsigned BackPrev2;
|
||
|
unsigned Price;
|
||
|
unsigned PosPrev;
|
||
|
unsigned BackPrev;
|
||
|
unsigned Backs[kNumRepDistances];
|
||
|
} COptimal;
|
||
|
#define COptimal_MakeAsChar(a) (a)->BackPrev=(unsigned)-1,(a)->Prev1IsChar=false
|
||
|
#define COptimal_MakeAsShortRep(a) (a)->BackPrev=0,(a)->Prev1IsChar=false
|
||
|
#define COptimal_IsShortRep(a) ((a)->BackPrev==0)
|
||
|
|
||
|
#define kIfinityPrice 0xFFFFFFF
|
||
|
#define kNumOpts (1<<12)
|
||
|
|
||
|
typedef CMyBitEncoder CLiteralEncoder2[0x300];
|
||
|
typedef struct
|
||
|
{
|
||
|
CLiteralEncoder2* _coders;
|
||
|
int _numPrevBits;
|
||
|
int _numPosBits;
|
||
|
unsigned _posMask;
|
||
|
} CLiteralEncoder;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
CMyBitEncoder _choice;
|
||
|
CMyBitEncoder _choice2;
|
||
|
NRangeCoder_CBitTreeEncoder _lowCoder[kNumPosStatesEncodingMax];
|
||
|
NRangeCoder_CBitTreeEncoder _midCoder[kNumPosStatesEncodingMax];
|
||
|
NRangeCoder_CBitTreeEncoder _highCoder;
|
||
|
} NLength_CEncoder;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
NLength_CEncoder base;
|
||
|
unsigned _prices[kNumSymbolsTotal][kNumPosStatesEncodingMax];
|
||
|
unsigned _tableSize;
|
||
|
unsigned _counters[kNumPosStatesEncodingMax];
|
||
|
} NLength_CPriceTableEncoder;
|
||
|
#define CPriceTableEncoder_Init(a,b) NLength_CEncoder_Init(&a.base,b)
|
||
|
|
||
|
#endif
|