| OLD | NEW |
| (Empty) |
| 1 // LzmaBase.cs | |
| 2 | |
| 3 namespace SevenZip.Compression.LZMA | |
| 4 { | |
| 5 internal abstract class Base | |
| 6 { | |
| 7 public const uint kNumRepDistances = 4; | |
| 8 public const uint kNumStates = 12; | |
| 9 | |
| 10 // static byte []kLiteralNextStates = {0, 0, 0, 0, 1, 2, 3, 4,
5, 6, 4, 5}; | |
| 11 // static byte []kMatchNextStates = {7, 7, 7, 7, 7, 7, 7, 10,
10, 10, 10, 10}; | |
| 12 // static byte []kRepNextStates = {8, 8, 8, 8, 8, 8, 8, 11,
11, 11, 11, 11}; | |
| 13 // static byte []kShortRepNextStates = {9, 9, 9, 9, 9, 9, 9, 11,
11, 11, 11, 11}; | |
| 14 | |
| 15 public struct State | |
| 16 { | |
| 17 public uint Index; | |
| 18 public void Init() { Index = 0; } | |
| 19 public void UpdateChar() | |
| 20 { | |
| 21 if (Index < 4) Index = 0; | |
| 22 else if (Index < 10) Index -= 3; | |
| 23 else Index -= 6; | |
| 24 } | |
| 25 public void UpdateMatch() { Index = (uint)(Index < 7 ? 7
: 10); } | |
| 26 public void UpdateRep() { Index = (uint)(Index < 7 ? 8 :
11); } | |
| 27 public void UpdateShortRep() { Index = (uint)(Index < 7
? 9 : 11); } | |
| 28 public bool IsCharState() { return Index < 7; } | |
| 29 } | |
| 30 | |
| 31 public const int kNumPosSlotBits = 6; | |
| 32 public const int kDicLogSizeMin = 0; | |
| 33 // public const int kDicLogSizeMax = 30; | |
| 34 // public const uint kDistTableSizeMax = kDicLogSizeMax * 2; | |
| 35 | |
| 36 public const int kNumLenToPosStatesBits = 2; // it's for speed o
ptimization | |
| 37 public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBi
ts; | |
| 38 | |
| 39 public const uint kMatchMinLen = 2; | |
| 40 | |
| 41 public static uint GetLenToPosState(uint len) | |
| 42 { | |
| 43 len -= kMatchMinLen; | |
| 44 if (len < kNumLenToPosStates) | |
| 45 return len; | |
| 46 return (uint)(kNumLenToPosStates - 1); | |
| 47 } | |
| 48 | |
| 49 public const int kNumAlignBits = 4; | |
| 50 public const uint kAlignTableSize = 1 << kNumAlignBits; | |
| 51 public const uint kAlignMask = (kAlignTableSize - 1); | |
| 52 | |
| 53 public const uint kStartPosModelIndex = 4; | |
| 54 public const uint kEndPosModelIndex = 14; | |
| 55 public const uint kNumPosModels = kEndPosModelIndex - kStartPosM
odelIndex; | |
| 56 | |
| 57 public const uint kNumFullDistances = 1 << ((int)kEndPosModelInd
ex / 2); | |
| 58 | |
| 59 public const uint kNumLitPosStatesBitsEncodingMax = 4; | |
| 60 public const uint kNumLitContextBitsMax = 8; | |
| 61 | |
| 62 public const int kNumPosStatesBitsMax = 4; | |
| 63 public const uint kNumPosStatesMax = (1 << kNumPosStatesBitsMax)
; | |
| 64 public const int kNumPosStatesBitsEncodingMax = 4; | |
| 65 public const uint kNumPosStatesEncodingMax = (1 << kNumPosStates
BitsEncodingMax); | |
| 66 | |
| 67 public const int kNumLowLenBits = 3; | |
| 68 public const int kNumMidLenBits = 3; | |
| 69 public const int kNumHighLenBits = 8; | |
| 70 public const uint kNumLowLenSymbols = 1 << kNumLowLenBits; | |
| 71 public const uint kNumMidLenSymbols = 1 << kNumMidLenBits; | |
| 72 public const uint kNumLenSymbols = kNumLowLenSymbols + kNumMidLe
nSymbols + | |
| 73 (1 << kNumHighLenBits); | |
| 74 public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols -
1; | |
| 75 } | |
| 76 } | |
| OLD | NEW |