Go to the documentation of this file.
11 #ifndef GB_HASHINDEX_H
12 #define GB_HASHINDEX_H
21 extern const uint32_t
crctab[];
23 #define USE_ARB_CRC_HASH
24 #ifdef USE_ARB_CRC_HASH
26 #define GB_CALC_HASH_INDEX_CASE_SENSITIVE(string, index, size) do { \
27 const char *local_ptr = (string); \
29 (index) = 0xffffffffL; \
30 while ((local_i=(*(local_ptr++)))) { \
31 (index) = crctab[((int)(index)^local_i) & 0xff] ^ ((index) >> 8); \
33 (index) = (index) % (size); \
36 #define GB_CALC_HASH_INDEX_CASE_IGNORED(string, index, size) do { \
37 const char *local_ptr = (string); \
39 (index) = 0xffffffffL; \
40 while ((local_i = *(local_ptr++))) { \
41 (index) = crctab[((int) (index) ^ toupper(local_i)) & 0xff] ^ ((index) >> 8); \
43 (index) = (index) % (size); \
46 #elif defined(USE_DJB2_HASH)
48 #define GB_CALC_HASH_INDEX_CASE_SENSITIVE(string, index, size) do { \
49 const char *local_ptr = (string); \
52 while ((local_i = *(local_ptr++))) { \
53 (index) = (((index) << 5) + (index))+ local_i; \
55 (index) = (index) % (size); \
58 #define GB_CALC_HASH_INDEX_CASE_IGNORED(string, index, size) do { \
59 const char *local_ptr = (string); \
62 while ((local_i = *(local_ptr++))) { \
63 (index) = (((index) << 5) + (index))+ toupper(local_i); \
65 (index) = (index) % (size); \
70 #define GB_CALC_HASH_INDEX(string, index, size, caseSens) do { \
71 if ((caseSens) == GB_IGNORE_CASE) \
72 GB_CALC_HASH_INDEX_CASE_IGNORED(string, index, size); \
74 GB_CALC_HASH_INDEX_CASE_SENSITIVE(string, index, size); \
80 #error gb_hashindex.h included twice
81 #endif // GB_HASHINDEX_H