|
@@ -144,7 +144,7 @@ do {
|
|
#define HASH_BLOOM_FREE(tbl)
|
|
#define HASH_BLOOM_FREE(tbl)
|
|
#define HASH_BLOOM_ADD(tbl,hashv)
|
|
#define HASH_BLOOM_ADD(tbl,hashv)
|
|
#define HASH_BLOOM_TEST(tbl,hashv) (1)
|
|
#define HASH_BLOOM_TEST(tbl,hashv) (1)
|
|
-#define HASH_BLOOM_BYTELEN 0
|
|
|
|
|
|
+#define HASH_BLOOM_BYTELEN 0U
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#define HASH_MAKE_TABLE(hh,head) \
|
|
#define HASH_MAKE_TABLE(hh,head) \
|
|
@@ -347,7 +347,7 @@ do {
|
|
do { \
|
|
do { \
|
|
unsigned _klen = fieldlen; \
|
|
unsigned _klen = fieldlen; \
|
|
write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
|
|
write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
|
|
- write(HASH_EMIT_KEYS, keyptr, fieldlen); \
|
|
|
|
|
|
+ write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
|
|
} while (0)
|
|
} while (0)
|
|
#else
|
|
#else
|
|
#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
|
|
#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
|
|
@@ -363,7 +363,7 @@ do {
|
|
/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
|
|
/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
|
|
#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \
|
|
#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \
|
|
do { \
|
|
do { \
|
|
- unsigned _hb_keylen=keylen; \
|
|
|
|
|
|
+ unsigned _hb_keylen=(unsigned)keylen; \
|
|
const unsigned char *_hb_key=(const unsigned char*)(key); \
|
|
const unsigned char *_hb_key=(const unsigned char*)(key); \
|
|
(hashv) = 0; \
|
|
(hashv) = 0; \
|
|
while (_hb_keylen-- != 0U) { \
|
|
while (_hb_keylen-- != 0U) { \
|
|
@@ -482,7 +482,7 @@ do {
|
|
#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
|
|
#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
|
|
do { \
|
|
do { \
|
|
unsigned const char *_sfh_key=(unsigned const char*)(key); \
|
|
unsigned const char *_sfh_key=(unsigned const char*)(key); \
|
|
- uint32_t _sfh_tmp, _sfh_len = keylen; \
|
|
|
|
|
|
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
|
|
\
|
|
\
|
|
unsigned _sfh_rem = _sfh_len & 3U; \
|
|
unsigned _sfh_rem = _sfh_len & 3U; \
|
|
_sfh_len >>= 2; \
|
|
_sfh_len >>= 2; \
|
|
@@ -491,7 +491,7 @@ do {
|
|
/* Main loop */ \
|
|
/* Main loop */ \
|
|
for (;_sfh_len > 0U; _sfh_len--) { \
|
|
for (;_sfh_len > 0U; _sfh_len--) { \
|
|
hashv += get16bits (_sfh_key); \
|
|
hashv += get16bits (_sfh_key); \
|
|
- _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \
|
|
|
|
|
|
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
|
|
hashv = (hashv << 16) ^ _sfh_tmp; \
|
|
hashv = (hashv << 16) ^ _sfh_tmp; \
|
|
_sfh_key += 2U*sizeof (uint16_t); \
|
|
_sfh_key += 2U*sizeof (uint16_t); \
|
|
hashv += hashv >> 11; \
|
|
hashv += hashv >> 11; \
|
|
@@ -501,7 +501,7 @@ do {
|
|
switch (_sfh_rem) { \
|
|
switch (_sfh_rem) { \
|
|
case 3: hashv += get16bits (_sfh_key); \
|
|
case 3: hashv += get16bits (_sfh_key); \
|
|
hashv ^= hashv << 16; \
|
|
hashv ^= hashv << 16; \
|
|
- hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \
|
|
|
|
|
|
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
|
|
hashv += hashv >> 11; \
|
|
hashv += hashv >> 11; \
|
|
break; \
|
|
break; \
|
|
case 2: hashv += get16bits (_sfh_key); \
|
|
case 2: hashv += get16bits (_sfh_key); \
|
|
@@ -561,7 +561,7 @@ do { \
|
|
_h ^= _h >> 16; \
|
|
_h ^= _h >> 16; \
|
|
_h *= 0x85ebca6bu; \
|
|
_h *= 0x85ebca6bu; \
|
|
_h ^= _h >> 13; \
|
|
_h ^= _h >> 13; \
|
|
- _h *= 0xc2b2ae35uL;\
|
|
|
|
|
|
+ _h *= 0xc2b2ae35u; \
|
|
_h ^= _h >> 16; \
|
|
_h ^= _h >> 16; \
|
|
} while(0)
|
|
} while(0)
|
|
|
|
|
|
@@ -574,7 +574,7 @@ do { \
|
|
uint32_t _mur_c2 = 0x1b873593u; \
|
|
uint32_t _mur_c2 = 0x1b873593u; \
|
|
uint32_t _mur_k1 = 0; \
|
|
uint32_t _mur_k1 = 0; \
|
|
const uint8_t *_mur_tail; \
|
|
const uint8_t *_mur_tail; \
|
|
- const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \
|
|
|
|
|
|
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
|
|
int _mur_i; \
|
|
int _mur_i; \
|
|
for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \
|
|
for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \
|
|
_mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
|
|
_mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
|
|
@@ -584,20 +584,20 @@ do { \
|
|
\
|
|
\
|
|
_mur_h1 ^= _mur_k1; \
|
|
_mur_h1 ^= _mur_k1; \
|
|
_mur_h1 = MUR_ROTL32(_mur_h1,13); \
|
|
_mur_h1 = MUR_ROTL32(_mur_h1,13); \
|
|
- _mur_h1 = _mur_h1*5U + 0xe6546b64u; \
|
|
|
|
|
|
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
|
|
} \
|
|
} \
|
|
- _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \
|
|
|
|
|
|
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
|
|
_mur_k1=0; \
|
|
_mur_k1=0; \
|
|
switch((keylen) & 3U) { \
|
|
switch((keylen) & 3U) { \
|
|
- case 3: _mur_k1 ^= _mur_tail[2] << 16; /* FALLTHROUGH */ \
|
|
|
|
- case 2: _mur_k1 ^= _mur_tail[1] << 8; /* FALLTHROUGH */ \
|
|
|
|
- case 1: _mur_k1 ^= _mur_tail[0]; \
|
|
|
|
|
|
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
|
|
|
|
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
|
|
|
|
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
|
|
_mur_k1 *= _mur_c1; \
|
|
_mur_k1 *= _mur_c1; \
|
|
_mur_k1 = MUR_ROTL32(_mur_k1,15); \
|
|
_mur_k1 = MUR_ROTL32(_mur_k1,15); \
|
|
_mur_k1 *= _mur_c2; \
|
|
_mur_k1 *= _mur_c2; \
|
|
_mur_h1 ^= _mur_k1; \
|
|
_mur_h1 ^= _mur_k1; \
|
|
} \
|
|
} \
|
|
- _mur_h1 ^= (keylen); \
|
|
|
|
|
|
+ _mur_h1 ^= (uint32_t)(keylen); \
|
|
MUR_FMIX(_mur_h1); \
|
|
MUR_FMIX(_mur_h1); \
|
|
hashv = _mur_h1; \
|
|
hashv = _mur_h1; \
|
|
bkt = hashv & (num_bkts-1U); \
|
|
bkt = hashv & (num_bkts-1U); \
|
|
@@ -630,7 +630,7 @@ do {
|
|
if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \
|
|
if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \
|
|
(head).hh_head=addhh; \
|
|
(head).hh_head=addhh; \
|
|
if ((head.count >= ((head.expand_mult+1U) * HASH_BKT_CAPACITY_THRESH)) \
|
|
if ((head.count >= ((head.expand_mult+1U) * HASH_BKT_CAPACITY_THRESH)) \
|
|
- && (addhh)->tbl->noexpand != 1U) { \
|
|
|
|
|
|
+ && ((addhh)->tbl->noexpand != 1U)) { \
|
|
HASH_EXPAND_BUCKETS((addhh)->tbl); \
|
|
HASH_EXPAND_BUCKETS((addhh)->tbl); \
|
|
} \
|
|
} \
|
|
} while(0)
|
|
} while(0)
|
|
@@ -684,10 +684,10 @@ do {
|
|
struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
|
|
struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
|
|
UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
|
|
UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
|
|
_he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
|
|
_he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
|
|
- 2U * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
|
|
|
|
|
|
+ 2UL * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
|
|
if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \
|
|
if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \
|
|
memset(_he_new_buckets, 0, \
|
|
memset(_he_new_buckets, 0, \
|
|
- 2U * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
|
|
|
|
|
|
+ 2UL * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
|
|
tbl->ideal_chain_maxlen = \
|
|
tbl->ideal_chain_maxlen = \
|
|
(tbl->num_items >> (tbl->log2_num_buckets+1U)) + \
|
|
(tbl->num_items >> (tbl->log2_num_buckets+1U)) + \
|
|
(((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
|
|
(((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
|
|
@@ -872,20 +872,20 @@ do {
|
|
} while(0)
|
|
} while(0)
|
|
|
|
|
|
#define HASH_OVERHEAD(hh,head) \
|
|
#define HASH_OVERHEAD(hh,head) \
|
|
- ((head) ? ( \
|
|
|
|
- (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
|
|
|
|
- ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
|
|
|
|
- (sizeof(UT_hash_table)) + \
|
|
|
|
- (HASH_BLOOM_BYTELEN)))) : 0)
|
|
|
|
|
|
+ ((head != NULL) ? ( \
|
|
|
|
+ (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
|
|
|
|
+ ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
|
|
|
|
+ sizeof(UT_hash_table) + \
|
|
|
|
+ (HASH_BLOOM_BYTELEN))) : 0U)
|
|
|
|
|
|
#ifdef NO_DECLTYPE
|
|
#ifdef NO_DECLTYPE
|
|
#define HASH_ITER(hh,head,el,tmp) \
|
|
#define HASH_ITER(hh,head,el,tmp) \
|
|
-for((el)=(head), (*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL); \
|
|
|
|
- el != NULL; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL))
|
|
|
|
|
|
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
|
|
|
|
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
|
|
#else
|
|
#else
|
|
#define HASH_ITER(hh,head,el,tmp) \
|
|
#define HASH_ITER(hh,head,el,tmp) \
|
|
-for((el)=(head),(tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL); \
|
|
|
|
- el != NULL; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL))
|
|
|
|
|
|
+for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
|
|
|
|
+ (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/* obtain a count of items in the hash */
|
|
/* obtain a count of items in the hash */
|