lencoder.h

来自「经过项目量产验证的代码.开发环境是sparc+vxworks. 这个LZMA是专」· C头文件 代码 · 共 70 行

H
70
字号
// LenCoder.h#ifndef __LENCODER_H#define __LENCODER_H#include "BitTreeCoder.h"const int kLenNumPosStatesBitsMax = 4;const int kLenNumPosStatesMax = (1 << kLenNumPosStatesBitsMax);const int kLenNumPosStatesBitsEncodingMax = 4;const int kLenNumPosStatesEncodingMax = (1 << kLenNumPosStatesBitsEncodingMax);const int kLenNumLowBits = 3;const int kLenNumLowSymbols = 1 << kLenNumLowBits;const int kLenNumMidBits = 3;const int kLenNumMidSymbols = 1 << kLenNumMidBits;const int kLenNumHighBits = 8;const int kLenNumSymbolsTotal = kLenNumLowSymbols + kLenNumMidSymbols + (1 << kLenNumHighBits);const int kLenNumSpecSymbols = kLenNumLowSymbols + kLenNumMidSymbols;class CLenDecoder{  CBitDecoder m_Choice;  CBitTreeDecoder3  m_LowCoder[kLenNumPosStatesMax];  CBitDecoder m_Choice2;  CBitTreeDecoder3  m_MidCoder[kLenNumPosStatesMax];  CBitTreeDecoder8 m_HighCoder;   int m_NumPosStates;public:  void Create(int numPosStates)    { m_NumPosStates = numPosStates; }  void Init()  {    m_Choice.Init();    for (int posState = 0; posState < m_NumPosStates; posState++)    {      m_LowCoder[posState].Init();      m_MidCoder[posState].Init();    }    m_Choice2.Init();    m_HighCoder.Init();  }  int Decode(CRangeDecoder *aRangeDecoder, int posState)  {    if(m_Choice.Decode(aRangeDecoder) == 0)      return m_LowCoder[posState].Decode(aRangeDecoder);    else    {      int symbol = kLenNumLowSymbols;      if(m_Choice2.Decode(aRangeDecoder) == 0)        symbol += m_MidCoder[posState].Decode(aRangeDecoder);      else      {        symbol += kLenNumMidSymbols;        symbol += m_HighCoder.Decode(aRangeDecoder);      }      return symbol;    }  }};#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?