⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 literalcoder.h

📁 经过项目量产验证的代码.开发环境是sparc+vxworks. 这个LZMA是专门为sparc做的优化压缩,性能是最好的.
💻 H
字号:
// LiteralCoder.h#ifndef __LITERALCODER_H#define __LITERALCODER_H#include "AriBitCoder.h"#include "RCDefs.h"class CLiteralDecoder2{  CBitDecoder m_Decoders[3][1 << 8];public:  void Init()  {    for (int i = 0; i < 3; i++)      for (int j = 1; j < (1 << 8); j++)        m_Decoders[i][j].Init();  }  BYTE DecodeNormal(CRangeDecoder *rangeDecoder)  {    int symbol = 1;    RC_INIT_VAR    do    {      // symbol = (symbol << 1) | m_Decoders[0][symbol].Decode(rangeDecoder);      RC_GETBIT(m_Decoders[0][symbol].m_Probability, symbol)    }    while (symbol < 0x100);    RC_FLUSH_VAR    return symbol;  }  BYTE DecodeWithMatchByte(CRangeDecoder *rangeDecoder, BYTE matchByte)  {    int symbol = 1;    RC_INIT_VAR    do    {      int matchBit = (matchByte >> 7) & 1;      matchByte <<= 1;      // int bit = m_Decoders[1 + matchBit][symbol].Decode(rangeDecoder);      // symbol = (symbol << 1) | bit;      int bit;      RC_GETBIT2(m_Decoders[1 + matchBit][symbol].m_Probability, symbol,           bit = 0, bit = 1)      if (matchBit != bit)      {        while (symbol < 0x100)        {          // symbol = (symbol << 1) | m_Decoders[0][symbol].Decode(rangeDecoder);          RC_GETBIT(m_Decoders[0][symbol].m_Probability, symbol)        }        break;      }    }    while (symbol < 0x100);    RC_FLUSH_VAR    return symbol;  }};class CLiteralDecoder{  CLiteralDecoder2 *m_Coders;  int  m_NumPrevBits;  int  m_NumPosBits;  int m_PosMask;public:  CLiteralDecoder(): m_Coders(0) {}  BYTE *Create(BYTE *memory, int numPosBits, int numPrevBits)  {    m_NumPosBits = numPosBits;    m_PosMask = (1 << numPosBits) - 1;    m_NumPrevBits = numPrevBits;    int numStates = 1 << (m_NumPrevBits + m_NumPosBits);    m_Coders = (CLiteralDecoder2 *)memory;    return memory + sizeof(CLiteralDecoder2) * numStates;  }  void Init()  {    int numStates = 1 << (m_NumPrevBits + m_NumPosBits);    for (int i = 0; i < numStates; i++)      m_Coders[i].Init();  }  int GetState(int pos, BYTE prevByte) const    { return ((pos & m_PosMask) << m_NumPrevBits) + (prevByte >> (8 - m_NumPrevBits)); }  BYTE DecodeNormal(CRangeDecoder *rangeDecoder, int pos, BYTE prevByte)    { return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); }  BYTE DecodeWithMatchByte(CRangeDecoder *rangeDecoder, int pos, BYTE prevByte, BYTE matchByte)    { return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); }};#endif

⌨️ 快捷键说明

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