"Fossies" - the Fresh Open Source Software Archive

Member "UXP-2019.06.08/other-licenses/7zstub/src/CS/7zip/Compress/LZMA/LzmaBase.cs" (8 Jun 2019, 2772 Bytes) of package /linux/www/UXP-2019.06.08.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C# source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    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 }