xref: /aosp_15_r20/external/lzma/C/LzHash.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker /* LzHash.h -- HASH constants for LZ algorithms
2*f6dc9357SAndroid Build Coastguard Worker 2023-03-05 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker 
4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZ_HASH_H
5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZ_HASH_H
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker /*
8*f6dc9357SAndroid Build Coastguard Worker   (kHash2Size >= (1 <<  8)) : Required
9*f6dc9357SAndroid Build Coastguard Worker   (kHash3Size >= (1 << 16)) : Required
10*f6dc9357SAndroid Build Coastguard Worker */
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker #define kHash2Size (1 << 10)
13*f6dc9357SAndroid Build Coastguard Worker #define kHash3Size (1 << 16)
14*f6dc9357SAndroid Build Coastguard Worker // #define kHash4Size (1 << 20)
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker #define kFix3HashSize (kHash2Size)
17*f6dc9357SAndroid Build Coastguard Worker #define kFix4HashSize (kHash2Size + kHash3Size)
18*f6dc9357SAndroid Build Coastguard Worker // #define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker /*
21*f6dc9357SAndroid Build Coastguard Worker   We use up to 3 crc values for hash:
22*f6dc9357SAndroid Build Coastguard Worker     crc0
23*f6dc9357SAndroid Build Coastguard Worker     crc1 << Shift_1
24*f6dc9357SAndroid Build Coastguard Worker     crc2 << Shift_2
25*f6dc9357SAndroid Build Coastguard Worker   (Shift_1 = 5) and (Shift_2 = 10) is good tradeoff.
26*f6dc9357SAndroid Build Coastguard Worker   Small values for Shift are not good for collision rate.
27*f6dc9357SAndroid Build Coastguard Worker   Big value for Shift_2 increases the minimum size
28*f6dc9357SAndroid Build Coastguard Worker   of hash table, that will be slow for small files.
29*f6dc9357SAndroid Build Coastguard Worker */
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker #define kLzHash_CrcShift_1 5
32*f6dc9357SAndroid Build Coastguard Worker #define kLzHash_CrcShift_2 10
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker #endif
35