|
|
|
@ -39,6 +39,49 @@ inline uint32_t Hash (const T &v) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Following comment and table copied from glib. */ |
|
|
|
|
/* Each table size has an associated prime modulo (the first prime
|
|
|
|
|
* lower than the table size) used to find the initial bucket. Probing |
|
|
|
|
* then works modulo 2^n. The prime modulo is necessary to get a |
|
|
|
|
* good distribution with poor hash functions. |
|
|
|
|
*/ |
|
|
|
|
static const unsigned int prime_mod [] = |
|
|
|
|
{ |
|
|
|
|
1, /* For 1 << 0 */ |
|
|
|
|
2, |
|
|
|
|
3, |
|
|
|
|
7, |
|
|
|
|
13, |
|
|
|
|
31, |
|
|
|
|
61, |
|
|
|
|
127, |
|
|
|
|
251, |
|
|
|
|
509, |
|
|
|
|
1021, |
|
|
|
|
2039, |
|
|
|
|
4093, |
|
|
|
|
8191, |
|
|
|
|
16381, |
|
|
|
|
32749, |
|
|
|
|
65521, /* For 1 << 16 */ |
|
|
|
|
131071, |
|
|
|
|
262139, |
|
|
|
|
524287, |
|
|
|
|
1048573, |
|
|
|
|
2097143, |
|
|
|
|
4194301, |
|
|
|
|
8388593, |
|
|
|
|
16777213, |
|
|
|
|
33554393, |
|
|
|
|
67108859, |
|
|
|
|
134217689, |
|
|
|
|
268435399, |
|
|
|
|
536870909, |
|
|
|
|
1073741789, |
|
|
|
|
2147483647 /* For 1 << 31 */ |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* hb_map_t |
|
|
|
|
*/ |
|
|
|
@ -184,52 +227,10 @@ struct hb_map_t |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
|
|
|
static HB_INTERNAL inline unsigned int prime_for (unsigned int shift) |
|
|
|
|
static inline unsigned int prime_for (unsigned int shift) |
|
|
|
|
{ |
|
|
|
|
/* Following comment and table copied from glib. */ |
|
|
|
|
/* Each table size has an associated prime modulo (the first prime
|
|
|
|
|
* lower than the table size) used to find the initial bucket. Probing |
|
|
|
|
* then works modulo 2^n. The prime modulo is necessary to get a |
|
|
|
|
* good distribution with poor hash functions. |
|
|
|
|
*/ |
|
|
|
|
static const unsigned int prime_mod [] = |
|
|
|
|
{ |
|
|
|
|
1, /* For 1 << 0 */ |
|
|
|
|
2, |
|
|
|
|
3, |
|
|
|
|
7, |
|
|
|
|
13, |
|
|
|
|
31, |
|
|
|
|
61, |
|
|
|
|
127, |
|
|
|
|
251, |
|
|
|
|
509, |
|
|
|
|
1021, |
|
|
|
|
2039, |
|
|
|
|
4093, |
|
|
|
|
8191, |
|
|
|
|
16381, |
|
|
|
|
32749, |
|
|
|
|
65521, /* For 1 << 16 */ |
|
|
|
|
131071, |
|
|
|
|
262139, |
|
|
|
|
524287, |
|
|
|
|
1048573, |
|
|
|
|
2097143, |
|
|
|
|
4194301, |
|
|
|
|
8388593, |
|
|
|
|
16777213, |
|
|
|
|
33554393, |
|
|
|
|
67108859, |
|
|
|
|
134217689, |
|
|
|
|
268435399, |
|
|
|
|
536870909, |
|
|
|
|
1073741789, |
|
|
|
|
2147483647 /* For 1 << 31 */ |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (unlikely (shift >= ARRAY_LENGTH (prime_mod))) |
|
|
|
|
return prime_mod[ARRAY_LENGTH (prime_mod) -1]; |
|
|
|
|
return prime_mod[ARRAY_LENGTH (prime_mod) - 1]; |
|
|
|
|
|
|
|
|
|
return prime_mod[shift]; |
|
|
|
|
} |
|
|
|
|