1 #ifndef _RAR_COMPRESS_ 2 #define _RAR_COMPRESS_ 3 4 // Combine pack and unpack constants to class to avoid polluting global 5 // namespace with numerous short names. 6 class PackDef 7 { 8 public: 9 // Maximum LZ match length we can encode even for short distances. 10 static const uint MAX_LZ_MATCH = 0x1001; 11 12 // We increment LZ match length for longer distances, because shortest 13 // matches are not allowed for them. Maximum length increment is 3 14 // for distances larger than 256KB (0x40000). Here we define the maximum 15 // incremented LZ match. Normally packer does not use it, but we must be 16 // ready to process it in corrupt archives. 17 static const uint MAX_INC_LZ_MATCH = MAX_LZ_MATCH + 3; 18 19 static const uint MAX3_LZ_MATCH = 0x101; // Maximum match length for RAR v3. 20 static const uint LOW_DIST_REP_COUNT = 16; 21 22 static const uint NC = 306; /* alphabet = {0, 1, 2, ..., NC - 1} */ 23 static const uint DC = 64; 24 static const uint LDC = 16; 25 static const uint RC = 44; 26 static const uint HUFF_TABLE_SIZE = NC + DC + RC + LDC; 27 static const uint BC = 20; 28 29 static const uint NC30 = 299; /* alphabet = {0, 1, 2, ..., NC - 1} */ 30 static const uint DC30 = 60; 31 static const uint LDC30 = 17; 32 static const uint RC30 = 28; 33 static const uint BC30 = 20; 34 static const uint HUFF_TABLE_SIZE30 = NC30 + DC30 + RC30 + LDC30; 35 36 static const uint NC20 = 298; /* alphabet = {0, 1, 2, ..., NC - 1} */ 37 static const uint DC20 = 48; 38 static const uint RC20 = 28; 39 static const uint BC20 = 19; 40 static const uint MC20 = 257; 41 42 // Largest alphabet size among all values listed above. 43 static const uint LARGEST_TABLE_SIZE = 306; 44 45 enum { 46 CODE_HUFFMAN, CODE_LZ, CODE_REPEATLZ, CODE_CACHELZ, CODE_STARTFILE, 47 CODE_ENDFILE, CODE_FILTER, CODE_FILTERDATA 48 }; 49 }; 50 51 52 enum FilterType { 53 // These values must not be changed, because we use them directly 54 // in RAR5 compression and decompression code. 55 FILTER_DELTA=0, FILTER_E8, FILTER_E8E9, FILTER_ARM, 56 FILTER_AUDIO, FILTER_RGB, FILTER_ITANIUM, FILTER_PPM, FILTER_NONE 57 }; 58 59 #endif 60