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