Subversion Repositories Games.Chess Giants

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
99 pmbaty 1
/* LzHash.h -- HASH functions for LZ algorithms
2
2008-10-04 : Igor Pavlov : Public domain */
3
 
4
#ifndef __LZHASH_H
5
#define __LZHASH_H
6
 
7
#define kHash2Size (1 << 10)
8
#define kHash3Size (1 << 16)
9
#define kHash4Size (1 << 20)
10
 
11
#define kFix3HashSize (kHash2Size)
12
#define kFix4HashSize (kHash2Size + kHash3Size)
13
#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
14
 
15
#define HASH2_CALC hashValue = cur[0] | ((UInt32)cur[1] << 8);
16
 
17
#define HASH3_CALC { \
18
  UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
19
  hash2Value = temp & (kHash2Size - 1); \
20
  hashValue = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
21
 
22
#define HASH4_CALC { \
23
  UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
24
  hash2Value = temp & (kHash2Size - 1); \
25
  hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \
26
  hashValue = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
27
 
28
#define HASH5_CALC { \
29
  UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
30
  hash2Value = temp & (kHash2Size - 1); \
31
  hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \
32
  hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)); \
33
  hashValue = (hash4Value ^ (p->crc[cur[4]] << 3)) & p->hashMask; \
34
  hash4Value &= (kHash4Size - 1); }
35
 
36
/* #define HASH_ZIP_CALC hashValue = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
37
#define HASH_ZIP_CALC hashValue = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
38
 
39
 
40
#define MT_HASH2_CALC \
41
  hash2Value = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
42
 
43
#define MT_HASH3_CALC { \
44
  UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
45
  hash2Value = temp & (kHash2Size - 1); \
46
  hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
47
 
48
#define MT_HASH4_CALC { \
49
  UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
50
  hash2Value = temp & (kHash2Size - 1); \
51
  hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \
52
  hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); }
53
 
54
#endif