d53296ee709a5e8fb276ea9c80c01383d2b47fad
[coreboot.git] / payloads / bayou / util / pbuilder / lzma / C / 7zip / Compress / LZMA / LZMA.h
1 // LZMA.h\r
2 \r
3 #ifndef __LZMA_H\r
4 #define __LZMA_H\r
5 \r
6 namespace NCompress {\r
7 namespace NLZMA {\r
8 \r
9 const UInt32 kNumRepDistances = 4;\r
10 \r
11 const int kNumStates = 12;\r
12 \r
13 const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4,  5,  6,   4, 5};\r
14 const Byte kMatchNextStates[kNumStates]   = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};\r
15 const Byte kRepNextStates[kNumStates]     = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};\r
16 const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};\r
17 \r
18 class CState\r
19 {\r
20 public:\r
21   Byte Index;\r
22   void Init() { Index = 0; }\r
23   void UpdateChar() { Index = kLiteralNextStates[Index]; }\r
24   void UpdateMatch() { Index = kMatchNextStates[Index]; }\r
25   void UpdateRep() { Index = kRepNextStates[Index]; }\r
26   void UpdateShortRep() { Index = kShortRepNextStates[Index]; }\r
27   bool IsCharState() const { return Index < 7; }\r
28 };\r
29 \r
30 const int kNumPosSlotBits = 6; \r
31 const int kDicLogSizeMin = 0; \r
32 const int kDicLogSizeMax = 32; \r
33 const int kDistTableSizeMax = kDicLogSizeMax * 2; \r
34 \r
35 const UInt32 kNumLenToPosStates = 4;\r
36 \r
37 inline UInt32 GetLenToPosState(UInt32 len)\r
38 {\r
39   len -= 2;\r
40   if (len < kNumLenToPosStates)\r
41     return len;\r
42   return kNumLenToPosStates - 1;\r
43 }\r
44 \r
45 namespace NLength {\r
46 \r
47 const int kNumPosStatesBitsMax = 4;\r
48 const UInt32 kNumPosStatesMax = (1 << kNumPosStatesBitsMax);\r
49 \r
50 const int kNumPosStatesBitsEncodingMax = 4;\r
51 const UInt32 kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax);\r
52 \r
53 const int kNumLowBits = 3;\r
54 const int kNumMidBits = 3;\r
55 const int kNumHighBits = 8;\r
56 const UInt32 kNumLowSymbols = 1 << kNumLowBits;\r
57 const UInt32 kNumMidSymbols = 1 << kNumMidBits;\r
58 const UInt32 kNumSymbolsTotal = kNumLowSymbols + kNumMidSymbols + (1 << kNumHighBits);\r
59 \r
60 }\r
61 \r
62 const UInt32 kMatchMinLen = 2;\r
63 const UInt32 kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1;\r
64 \r
65 const int kNumAlignBits = 4;\r
66 const UInt32 kAlignTableSize = 1 << kNumAlignBits;\r
67 const UInt32 kAlignMask = (kAlignTableSize - 1);\r
68 \r
69 const UInt32 kStartPosModelIndex = 4;\r
70 const UInt32 kEndPosModelIndex = 14;\r
71 const UInt32 kNumPosModels = kEndPosModelIndex - kStartPosModelIndex;\r
72 \r
73 const UInt32 kNumFullDistances = 1 << (kEndPosModelIndex / 2);\r
74 \r
75 const int kNumLitPosStatesBitsEncodingMax = 4;\r
76 const int kNumLitContextBitsMax = 8;\r
77 \r
78 const int kNumMoveBits = 5;\r
79 \r
80 }}\r
81 \r
82 #endif\r