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 + -
显示快捷键?