diff src/win32/7zip/7z/CPP/7zip/Compress/DeflateConst.h @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
line wrap: on
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/win32/7zip/7z/CPP/7zip/Compress/DeflateConst.h	Sat Mar 03 10:31:27 2012 -0600
     1.3 @@ -0,0 +1,134 @@
     1.4 +// DeflateConst.h
     1.5 +
     1.6 +#ifndef __DEFLATE_CONST_H
     1.7 +#define __DEFLATE_CONST_H
     1.8 +
     1.9 +namespace NCompress {
    1.10 +namespace NDeflate {
    1.11 +
    1.12 +const int kNumHuffmanBits = 15;
    1.13 +
    1.14 +const UInt32 kHistorySize32 = (1 << 15);
    1.15 +const UInt32 kHistorySize64 = (1 << 16);
    1.16 +
    1.17 +const UInt32 kDistTableSize32 = 30;
    1.18 +const UInt32 kDistTableSize64 = 32;
    1.19 +  
    1.20 +const UInt32 kNumLenSymbols32 = 256;
    1.21 +const UInt32 kNumLenSymbols64 = 255; // don't change it. It must be <= 255.
    1.22 +const UInt32 kNumLenSymbolsMax = kNumLenSymbols32;
    1.23 +  
    1.24 +const UInt32 kNumLenSlots = 29;
    1.25 +
    1.26 +const UInt32 kFixedDistTableSize = 32;
    1.27 +const UInt32 kFixedLenTableSize = 31;
    1.28 +
    1.29 +const UInt32 kSymbolEndOfBlock = 0x100;
    1.30 +const UInt32 kSymbolMatch = kSymbolEndOfBlock + 1;
    1.31 +
    1.32 +const UInt32 kMainTableSize = kSymbolMatch + kNumLenSlots;
    1.33 +const UInt32 kFixedMainTableSize = kSymbolMatch + kFixedLenTableSize;
    1.34 +
    1.35 +const UInt32 kLevelTableSize = 19;
    1.36 +
    1.37 +const UInt32 kTableDirectLevels = 16;
    1.38 +const UInt32 kTableLevelRepNumber = kTableDirectLevels;
    1.39 +const UInt32 kTableLevel0Number = kTableLevelRepNumber + 1;
    1.40 +const UInt32 kTableLevel0Number2 = kTableLevel0Number + 1;
    1.41 +
    1.42 +const UInt32 kLevelMask = 0xF;
    1.43 +
    1.44 +const Byte kLenStart32[kFixedLenTableSize] =
    1.45 +  {0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224, 255, 0, 0};
    1.46 +const Byte kLenStart64[kFixedLenTableSize] =
    1.47 +  {0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224, 0, 0, 0};
    1.48 +
    1.49 +const Byte kLenDirectBits32[kFixedLenTableSize] =
    1.50 +  {0,0,0,0,0,0,0,0,1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,  4,  5,  5,  5,  5, 0, 0, 0};
    1.51 +const Byte kLenDirectBits64[kFixedLenTableSize] =
    1.52 +  {0,0,0,0,0,0,0,0,1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,  4,  5,  5,  5,  5, 16, 0, 0};
    1.53 +
    1.54 +const UInt32 kDistStart[kDistTableSize64]  =
    1.55 +  {0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,
    1.56 +  1024,1536,2048,3072,4096,6144,8192,12288,16384,24576,32768,49152};
    1.57 +const Byte kDistDirectBits[kDistTableSize64] =
    1.58 +  {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};
    1.59 +
    1.60 +const Byte kLevelDirectBits[3] = {2, 3, 7};
    1.61 +
    1.62 +const Byte kCodeLengthAlphabetOrder[kLevelTableSize] = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
    1.63 +
    1.64 +const UInt32 kMatchMinLen = 3;
    1.65 +const UInt32 kMatchMaxLen32 = kNumLenSymbols32 + kMatchMinLen - 1; //256 + 2
    1.66 +const UInt32 kMatchMaxLen64 = kNumLenSymbols64 + kMatchMinLen - 1; //255 + 2
    1.67 +const UInt32 kMatchMaxLen = kMatchMaxLen32;
    1.68 +
    1.69 +const int kFinalBlockFieldSize = 1;
    1.70 +
    1.71 +namespace NFinalBlockField
    1.72 +{
    1.73 +  enum
    1.74 +  {
    1.75 +    kNotFinalBlock = 0,
    1.76 +    kFinalBlock = 1
    1.77 +  };
    1.78 +}
    1.79 +
    1.80 +const int kBlockTypeFieldSize = 2;
    1.81 +
    1.82 +namespace NBlockType
    1.83 +{
    1.84 +  enum
    1.85 +  {
    1.86 +    kStored = 0,
    1.87 +    kFixedHuffman = 1,
    1.88 +    kDynamicHuffman = 2
    1.89 +  };
    1.90 +}
    1.91 +
    1.92 +const int kNumLenCodesFieldSize = 5;
    1.93 +const int kNumDistCodesFieldSize = 5;
    1.94 +const int kNumLevelCodesFieldSize = 4;
    1.95 +
    1.96 +const UInt32 kNumLitLenCodesMin = 257;
    1.97 +const UInt32 kNumDistCodesMin = 1;
    1.98 +const UInt32 kNumLevelCodesMin = 4;
    1.99 +
   1.100 +const int kLevelFieldSize = 3;
   1.101 +
   1.102 +const int kStoredBlockLengthFieldSize = 16;
   1.103 +
   1.104 +struct CLevels
   1.105 +{
   1.106 +  Byte litLenLevels[kFixedMainTableSize];
   1.107 +  Byte distLevels[kFixedDistTableSize];
   1.108 +
   1.109 +  void SubClear()
   1.110 +  {
   1.111 +    UInt32 i;
   1.112 +    for(i = kNumLitLenCodesMin; i < kFixedMainTableSize; i++)
   1.113 +      litLenLevels[i] = 0;
   1.114 +    for(i = 0; i < kFixedDistTableSize; i++)
   1.115 +      distLevels[i] = 0;
   1.116 +  }
   1.117 +
   1.118 +  void SetFixedLevels()
   1.119 +  {
   1.120 +    int i;
   1.121 +    
   1.122 +    for (i = 0; i < 144; i++)
   1.123 +      litLenLevels[i] = 8;
   1.124 +    for (; i < 256; i++)
   1.125 +      litLenLevels[i] = 9;
   1.126 +    for (; i < 280; i++)
   1.127 +      litLenLevels[i] = 7;
   1.128 +    for (; i < 288; i++)
   1.129 +      litLenLevels[i] = 8;
   1.130 +    for (i = 0; i < kFixedDistTableSize; i++)  // test it: InfoZip only uses kDistTableSize
   1.131 +      distLevels[i] = 5;
   1.132 +  }
   1.133 +};
   1.134 +
   1.135 +}}
   1.136 +
   1.137 +#endif