📄 lencoder.h
字号:
// 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -