tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

LzmaBase.cs (2772B)


      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 optimization
     37 	public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBits;
     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 - kStartPosModelIndex;
     56 
     57 	public const uint kNumFullDistances = 1 << ((int)kEndPosModelIndex / 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 << kNumPosStatesBitsEncodingMax);
     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 + kNumMidLenSymbols +
     73 			(1 << kNumHighLenBits);
     74 	public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1;
     75 }
     76 }