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

📄 lzma.h

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 H
字号:
/*Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net )Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org )This library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include "lencoder.h"#ifndef __LZMA_H#define __LZMA_Hnamespace NCompress {namespace NLZMA {const UINT32 kNumRepDistances = 4;const BYTE kNumStates = 12;const BYTE kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4,  5,  6,   4, 5};const BYTE kMatchNextStates[kNumStates]   = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};const BYTE kRepNextStates[kNumStates]     = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};const BYTE kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};class CState{public:  BYTE m_Index;  void Init()    { m_Index = 0; }  void UpdateChar()    { m_Index = kLiteralNextStates[m_Index]; }  void UpdateMatch()    { m_Index = kMatchNextStates[m_Index]; }  void UpdateRep()    { m_Index = kRepNextStates[m_Index]; }  void UpdateShortRep()    { m_Index = kShortRepNextStates[m_Index]; }};class CBaseCoder{protected:  CState m_State;  BYTE m_PreviousByte;  bool m_PeviousIsMatch;  UINT32 m_RepDistances[kNumRepDistances];  void Init()  {    m_State.Init();    m_PreviousByte = 0;    m_PeviousIsMatch = false;    for(UINT32 i = 0 ; i < kNumRepDistances; i++)      m_RepDistances[i] = 0;  }};const int kNumPosSlotBits = 6; const int kDicLogSizeMax = 28; const int kDistTableSizeMax = kDicLogSizeMax * 2; extern UINT32 kDistStart[kDistTableSizeMax];const BYTE kDistDirectBits[kDistTableSizeMax] = {  0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,  10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19,   20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26 };const UINT32 kNumLenToPosStates = 4;inline UINT32 GetLenToPosState(UINT32 aLen){  aLen -= 2;  if (aLen < kNumLenToPosStates)    return aLen;  return kNumLenToPosStates - 1;}const int kMatchMinLen = 2;const int kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1;const int kNumAlignBits = 4;const int kAlignTableSize = 1 << kNumAlignBits;const UINT32 kAlignMask = (kAlignTableSize - 1);const int kStartPosModelIndex = 4;const int kEndPosModelIndex = 14;const int kNumPosModels = kEndPosModelIndex - kStartPosModelIndex;const int kNumFullDistances = 1 << (kEndPosModelIndex / 2);const int kMainChoiceLiteralIndex = 0;const int kMainChoiceMatchIndex = 1;const int kMatchChoiceDistanceIndex= 0;const int kMatchChoiceRepetitionIndex = 1;const int kNumMoveBitsForMainChoice = 5;const int kNumMoveBitsForPosCoders = 5;const int kNumMoveBitsForAlignCoders = 5;const int kNumMoveBitsForPosSlotCoder = 5;const int kNumLitPosStatesBitsEncodingMax = 4;const int kNumLitContextBitsMax = 8;}}#endif

⌨️ 快捷键说明

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