1 /* 2 Copyright (c) 2003-2013, Troy D. Hanson http://uthash.sourceforge.net 3 All rights reserved. 4 5 Redistribution and use in source and binary forms, with or without 6 modification, are permitted provided that the following conditions are met: 7 8 * Redistributions of source code must retain the above copyright 9 notice, this list of conditions and the following disclaimer. 10 11 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 12 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 13 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 14 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 15 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 16 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 18 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 19 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 20 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 21 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 */ 23 24 /* $Id: uthash.h 2682 2012-11-23 22:04:22Z kaiwang27 $ */ 25 26 #ifndef UTHASH_H 27 #define UTHASH_H 28 29 #include <string.h> /* memcmp,strlen */ 30 #include <stddef.h> /* ptrdiff_t */ 31 #include <stdlib.h> /* exit() */ 32 33 /* These macros use decltype or the earlier __typeof GNU extension. 34 As decltype is only available in newer compilers (VS2010 or gcc 4.3+ 35 when compiling c++ source) this code uses whatever method is needed 36 or, for VS2008 where neither is available, uses casting workarounds. */ 37 #ifdef _MSC_VER /* MS compiler */ 38 #if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ 39 #define DECLTYPE(x) (decltype(x)) 40 #else /* VS2008 or older (or VS2010 in C mode) */ 41 #define NO_DECLTYPE 42 #define DECLTYPE(x) 43 #endif 44 #else /* GNU, Sun and other compilers */ 45 #define DECLTYPE(x) (__typeof(x)) 46 #endif 47 48 #ifdef NO_DECLTYPE 49 #define DECLTYPE_ASSIGN(dst,src) \ 50 do { \ 51 char **_da_dst = (char**)(&(dst)); \ 52 *_da_dst = (char*)(src); \ 53 } while(0) 54 #else 55 #define DECLTYPE_ASSIGN(dst,src) \ 56 do { \ 57 (dst) = DECLTYPE(dst)(src); \ 58 } while(0) 59 #endif 60 61 /* a number of the hash function use uint32_t which isn't defined on win32 */ 62 #ifdef _MSC_VER 63 typedef unsigned int uint32_t; 64 typedef unsigned char uint8_t; 65 #else 66 #include <inttypes.h> /* uint32_t */ 67 #endif 68 69 #define UTHASH_VERSION 1.9.7 70 71 #ifndef uthash_fatal 72 #define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ 73 #endif 74 #ifndef uthash_malloc 75 #define uthash_malloc(sz) malloc(sz) /* malloc fcn */ 76 #endif 77 #ifndef uthash_free 78 #define uthash_free(ptr,sz) free(ptr) /* free fcn */ 79 #endif 80 81 #ifndef uthash_noexpand_fyi 82 #define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ 83 #endif 84 #ifndef uthash_expand_fyi 85 #define uthash_expand_fyi(tbl) /* can be defined to log expands */ 86 #endif 87 88 /* initial number of buckets */ 89 #define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */ 90 #define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */ 91 #define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */ 92 93 /* calculate the element whose hash handle address is hhe */ 94 #define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) 95 96 #define HASH_FIND(hh,head,keyptr,keylen,out) \ 97 do { \ 98 unsigned _hf_bkt,_hf_hashv; \ 99 out=NULL; \ 100 if (head) { \ 101 HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ 102 if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ 103 HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ 104 keyptr,keylen,out); \ 105 } \ 106 } \ 107 } while (0) 108 109 #ifdef HASH_BLOOM 110 #define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) 111 #define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) 112 #define HASH_BLOOM_MAKE(tbl) \ 113 do { \ 114 (tbl)->bloom_nbits = HASH_BLOOM; \ 115 (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ 116 if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ 117 memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ 118 (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ 119 } while (0) 120 121 #define HASH_BLOOM_FREE(tbl) \ 122 do { \ 123 uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ 124 } while (0) 125 126 #define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) 127 #define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) 128 129 #define HASH_BLOOM_ADD(tbl,hashv) \ 130 HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) 131 132 #define HASH_BLOOM_TEST(tbl,hashv) \ 133 HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) 134 135 #else 136 #define HASH_BLOOM_MAKE(tbl) 137 #define HASH_BLOOM_FREE(tbl) 138 #define HASH_BLOOM_ADD(tbl,hashv) 139 #define HASH_BLOOM_TEST(tbl,hashv) (1) 140 #endif 141 142 #define HASH_MAKE_TABLE(hh,head) \ 143 do { \ 144 (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ 145 sizeof(UT_hash_table)); \ 146 if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ 147 memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ 148 (head)->hh.tbl->tail = &((head)->hh); \ 149 (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ 150 (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ 151 (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ 152 (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ 153 HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ 154 if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ 155 memset((head)->hh.tbl->buckets, 0, \ 156 HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ 157 HASH_BLOOM_MAKE((head)->hh.tbl); \ 158 (head)->hh.tbl->signature = HASH_SIGNATURE; \ 159 } while(0) 160 161 #define HASH_ADD(hh,head,fieldname,keylen_in,add) \ 162 HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add) 163 164 #define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ 165 do { \ 166 unsigned _ha_bkt; \ 167 (add)->hh.next = NULL; \ 168 (add)->hh.key = (char*)keyptr; \ 169 (add)->hh.keylen = (unsigned)keylen_in; \ 170 if (!(head)) { \ 171 head = (add); \ 172 (head)->hh.prev = NULL; \ 173 HASH_MAKE_TABLE(hh,head); \ 174 } else { \ 175 (head)->hh.tbl->tail->next = (add); \ 176 (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ 177 (head)->hh.tbl->tail = &((add)->hh); \ 178 } \ 179 (head)->hh.tbl->num_items++; \ 180 (add)->hh.tbl = (head)->hh.tbl; \ 181 HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ 182 (add)->hh.hashv, _ha_bkt); \ 183 HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ 184 HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ 185 HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ 186 HASH_FSCK(hh,head); \ 187 } while(0) 188 189 #define HASH_TO_BKT( hashv, num_bkts, bkt ) \ 190 do { \ 191 bkt = ((hashv) & ((num_bkts) - 1)); \ 192 } while(0) 193 194 /* delete "delptr" from the hash table. 195 * "the usual" patch-up process for the app-order doubly-linked-list. 196 * The use of _hd_hh_del below deserves special explanation. 197 * These used to be expressed using (delptr) but that led to a bug 198 * if someone used the same symbol for the head and deletee, like 199 * HASH_DELETE(hh,users,users); 200 * We want that to work, but by changing the head (users) below 201 * we were forfeiting our ability to further refer to the deletee (users) 202 * in the patch-up process. Solution: use scratch space to 203 * copy the deletee pointer, then the latter references are via that 204 * scratch pointer rather than through the repointed (users) symbol. 205 */ 206 #define HASH_DELETE(hh,head,delptr) \ 207 do { \ 208 unsigned _hd_bkt; \ 209 struct UT_hash_handle *_hd_hh_del; \ 210 if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ 211 uthash_free((head)->hh.tbl->buckets, \ 212 (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ 213 HASH_BLOOM_FREE((head)->hh.tbl); \ 214 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ 215 head = NULL; \ 216 } else { \ 217 _hd_hh_del = &((delptr)->hh); \ 218 if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ 219 (head)->hh.tbl->tail = \ 220 (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ 221 (head)->hh.tbl->hho); \ 222 } \ 223 if ((delptr)->hh.prev) { \ 224 ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ 225 (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ 226 } else { \ 227 DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ 228 } \ 229 if (_hd_hh_del->next) { \ 230 ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ 231 (head)->hh.tbl->hho))->prev = \ 232 _hd_hh_del->prev; \ 233 } \ 234 HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ 235 HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ 236 (head)->hh.tbl->num_items--; \ 237 } \ 238 HASH_FSCK(hh,head); \ 239 } while (0) 240 241 242 /* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ 243 #define HASH_FIND_STR(head,findstr,out) \ 244 HASH_FIND(hh,head,findstr,strlen(findstr),out) 245 #define HASH_ADD_STR(head,strfield,add) \ 246 HASH_ADD(hh,head,strfield,strlen(add->strfield),add) 247 #define HASH_FIND_INT(head,findint,out) \ 248 HASH_FIND(hh,head,findint,sizeof(int),out) 249 #define HASH_ADD_INT(head,intfield,add) \ 250 HASH_ADD(hh,head,intfield,sizeof(int),add) 251 #define HASH_FIND_PTR(head,findptr,out) \ 252 HASH_FIND(hh,head,findptr,sizeof(void *),out) 253 #define HASH_ADD_PTR(head,ptrfield,add) \ 254 HASH_ADD(hh,head,ptrfield,sizeof(void *),add) 255 #define HASH_DEL(head,delptr) \ 256 HASH_DELETE(hh,head,delptr) 257 258 /* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. 259 * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. 260 */ 261 #ifdef HASH_DEBUG 262 #define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) 263 #define HASH_FSCK(hh,head) \ 264 do { \ 265 unsigned _bkt_i; \ 266 unsigned _count, _bkt_count; \ 267 char *_prev; \ 268 struct UT_hash_handle *_thh; \ 269 if (head) { \ 270 _count = 0; \ 271 for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ 272 _bkt_count = 0; \ 273 _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ 274 _prev = NULL; \ 275 while (_thh) { \ 276 if (_prev != (char*)(_thh->hh_prev)) { \ 277 HASH_OOPS("invalid hh_prev %p, actual %p\n", \ 278 _thh->hh_prev, _prev ); \ 279 } \ 280 _bkt_count++; \ 281 _prev = (char*)(_thh); \ 282 _thh = _thh->hh_next; \ 283 } \ 284 _count += _bkt_count; \ 285 if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ 286 HASH_OOPS("invalid bucket count %d, actual %d\n", \ 287 (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ 288 } \ 289 } \ 290 if (_count != (head)->hh.tbl->num_items) { \ 291 HASH_OOPS("invalid hh item count %d, actual %d\n", \ 292 (head)->hh.tbl->num_items, _count ); \ 293 } \ 294 /* traverse hh in app order; check next/prev integrity, count */ \ 295 _count = 0; \ 296 _prev = NULL; \ 297 _thh = &(head)->hh; \ 298 while (_thh) { \ 299 _count++; \ 300 if (_prev !=(char*)(_thh->prev)) { \ 301 HASH_OOPS("invalid prev %p, actual %p\n", \ 302 _thh->prev, _prev ); \ 303 } \ 304 _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ 305 _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ 306 (head)->hh.tbl->hho) : NULL ); \ 307 } \ 308 if (_count != (head)->hh.tbl->num_items) { \ 309 HASH_OOPS("invalid app item count %d, actual %d\n", \ 310 (head)->hh.tbl->num_items, _count ); \ 311 } \ 312 } \ 313 } while (0) 314 #else 315 #define HASH_FSCK(hh,head) 316 #endif 317 318 /* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to 319 * the descriptor to which this macro is defined for tuning the hash function. 320 * The app can #include <unistd.h> to get the prototype for write(2). */ 321 #ifdef HASH_EMIT_KEYS 322 #define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ 323 do { \ 324 unsigned _klen = fieldlen; \ 325 write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ 326 write(HASH_EMIT_KEYS, keyptr, fieldlen); \ 327 } while (0) 328 #else 329 #define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) 330 #endif 331 332 /* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ 333 #ifdef HASH_FUNCTION 334 #define HASH_FCN HASH_FUNCTION 335 #else 336 #define HASH_FCN HASH_JEN 337 #endif 338 339 /* The Bernstein hash function, used in Perl prior to v5.6 */ 340 #define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ 341 do { \ 342 unsigned _hb_keylen=keylen; \ 343 char *_hb_key=(char*)(key); \ 344 (hashv) = 0; \ 345 while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \ 346 bkt = (hashv) & (num_bkts-1); \ 347 } while (0) 348 349 350 /* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at 351 * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ 352 #define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ 353 do { \ 354 unsigned _sx_i; \ 355 char *_hs_key=(char*)(key); \ 356 hashv = 0; \ 357 for(_sx_i=0; _sx_i < keylen; _sx_i++) \ 358 hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ 359 bkt = hashv & (num_bkts-1); \ 360 } while (0) 361 362 #define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ 363 do { \ 364 unsigned _fn_i; \ 365 char *_hf_key=(char*)(key); \ 366 hashv = 2166136261UL; \ 367 for(_fn_i=0; _fn_i < keylen; _fn_i++) \ 368 hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \ 369 bkt = hashv & (num_bkts-1); \ 370 } while(0) 371 372 #define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ 373 do { \ 374 unsigned _ho_i; \ 375 char *_ho_key=(char*)(key); \ 376 hashv = 0; \ 377 for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ 378 hashv += _ho_key[_ho_i]; \ 379 hashv += (hashv << 10); \ 380 hashv ^= (hashv >> 6); \ 381 } \ 382 hashv += (hashv << 3); \ 383 hashv ^= (hashv >> 11); \ 384 hashv += (hashv << 15); \ 385 bkt = hashv & (num_bkts-1); \ 386 } while(0) 387 388 #define HASH_JEN_MIX(a,b,c) \ 389 do { \ 390 a -= b; a -= c; a ^= ( c >> 13 ); \ 391 b -= c; b -= a; b ^= ( a << 8 ); \ 392 c -= a; c -= b; c ^= ( b >> 13 ); \ 393 a -= b; a -= c; a ^= ( c >> 12 ); \ 394 b -= c; b -= a; b ^= ( a << 16 ); \ 395 c -= a; c -= b; c ^= ( b >> 5 ); \ 396 a -= b; a -= c; a ^= ( c >> 3 ); \ 397 b -= c; b -= a; b ^= ( a << 10 ); \ 398 c -= a; c -= b; c ^= ( b >> 15 ); \ 399 } while (0) 400 401 #define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ 402 do { \ 403 unsigned _hj_i,_hj_j,_hj_k; \ 404 char *_hj_key=(char*)(key); \ 405 hashv = 0xfeedbeef; \ 406 _hj_i = _hj_j = 0x9e3779b9; \ 407 _hj_k = (unsigned)keylen; \ 408 while (_hj_k >= 12) { \ 409 _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ 410 + ( (unsigned)_hj_key[2] << 16 ) \ 411 + ( (unsigned)_hj_key[3] << 24 ) ); \ 412 _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ 413 + ( (unsigned)_hj_key[6] << 16 ) \ 414 + ( (unsigned)_hj_key[7] << 24 ) ); \ 415 hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ 416 + ( (unsigned)_hj_key[10] << 16 ) \ 417 + ( (unsigned)_hj_key[11] << 24 ) ); \ 418 \ 419 HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ 420 \ 421 _hj_key += 12; \ 422 _hj_k -= 12; \ 423 } \ 424 hashv += keylen; \ 425 switch ( _hj_k ) { \ 426 case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ 427 case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ 428 case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ 429 case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ 430 case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ 431 case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ 432 case 5: _hj_j += _hj_key[4]; \ 433 case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ 434 case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ 435 case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ 436 case 1: _hj_i += _hj_key[0]; \ 437 } \ 438 HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ 439 bkt = hashv & (num_bkts-1); \ 440 } while(0) 441 442 /* The Paul Hsieh hash function */ 443 #undef get16bits 444 #if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ 445 || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) 446 #define get16bits(d) (*((const uint16_t *) (d))) 447 #endif 448 449 #if !defined (get16bits) 450 #define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ 451 +(uint32_t)(((const uint8_t *)(d))[0]) ) 452 #endif 453 #define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ 454 do { \ 455 char *_sfh_key=(char*)(key); \ 456 uint32_t _sfh_tmp, _sfh_len = keylen; \ 457 \ 458 int _sfh_rem = _sfh_len & 3; \ 459 _sfh_len >>= 2; \ 460 hashv = 0xcafebabe; \ 461 \ 462 /* Main loop */ \ 463 for (;_sfh_len > 0; _sfh_len--) { \ 464 hashv += get16bits (_sfh_key); \ 465 _sfh_tmp = (get16bits (_sfh_key+2) << 11) ^ hashv; \ 466 hashv = (hashv << 16) ^ _sfh_tmp; \ 467 _sfh_key += 2*sizeof (uint16_t); \ 468 hashv += hashv >> 11; \ 469 } \ 470 \ 471 /* Handle end cases */ \ 472 switch (_sfh_rem) { \ 473 case 3: hashv += get16bits (_sfh_key); \ 474 hashv ^= hashv << 16; \ 475 hashv ^= _sfh_key[sizeof (uint16_t)] << 18; \ 476 hashv += hashv >> 11; \ 477 break; \ 478 case 2: hashv += get16bits (_sfh_key); \ 479 hashv ^= hashv << 11; \ 480 hashv += hashv >> 17; \ 481 break; \ 482 case 1: hashv += *_sfh_key; \ 483 hashv ^= hashv << 10; \ 484 hashv += hashv >> 1; \ 485 } \ 486 \ 487 /* Force "avalanching" of final 127 bits */ \ 488 hashv ^= hashv << 3; \ 489 hashv += hashv >> 5; \ 490 hashv ^= hashv << 4; \ 491 hashv += hashv >> 17; \ 492 hashv ^= hashv << 25; \ 493 hashv += hashv >> 6; \ 494 bkt = hashv & (num_bkts-1); \ 495 } while(0) 496 497 #ifdef HASH_USING_NO_STRICT_ALIASING 498 /* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. 499 * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. 500 * MurmurHash uses the faster approach only on CPU's where we know it's safe. 501 * 502 * Note the preprocessor built-in defines can be emitted using: 503 * 504 * gcc -m64 -dM -E - < /dev/null (on gcc) 505 * cc -## a.c (where a.c is a simple test file) (Sun Studio) 506 */ 507 #if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) 508 #define MUR_GETBLOCK(p,i) p[i] 509 #else /* non intel */ 510 #define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0) 511 #define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1) 512 #define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2) 513 #define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3) 514 #define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) 515 #if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) 516 #define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) 517 #define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) 518 #define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) 519 #else /* assume little endian non-intel */ 520 #define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) 521 #define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) 522 #define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) 523 #endif 524 #define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ 525 (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ 526 (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ 527 MUR_ONE_THREE(p)))) 528 #endif 529 #define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) 530 #define MUR_FMIX(_h) \ 531 do { \ 532 _h ^= _h >> 16; \ 533 _h *= 0x85ebca6b; \ 534 _h ^= _h >> 13; \ 535 _h *= 0xc2b2ae35l; \ 536 _h ^= _h >> 16; \ 537 } while(0) 538 539 #define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \ 540 do { \ 541 const uint8_t *_mur_data = (const uint8_t*)(key); \ 542 const int _mur_nblocks = (keylen) / 4; \ 543 uint32_t _mur_h1 = 0xf88D5353; \ 544 uint32_t _mur_c1 = 0xcc9e2d51; \ 545 uint32_t _mur_c2 = 0x1b873593; \ 546 uint32_t _mur_k1 = 0; \ 547 const uint8_t *_mur_tail; \ 548 const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \ 549 int _mur_i; \ 550 for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \ 551 _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ 552 _mur_k1 *= _mur_c1; \ 553 _mur_k1 = MUR_ROTL32(_mur_k1,15); \ 554 _mur_k1 *= _mur_c2; \ 555 \ 556 _mur_h1 ^= _mur_k1; \ 557 _mur_h1 = MUR_ROTL32(_mur_h1,13); \ 558 _mur_h1 = _mur_h1*5+0xe6546b64; \ 559 } \ 560 _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \ 561 _mur_k1=0; \ 562 switch((keylen) & 3) { \ 563 case 3: _mur_k1 ^= _mur_tail[2] << 16; \ 564 case 2: _mur_k1 ^= _mur_tail[1] << 8; \ 565 case 1: _mur_k1 ^= _mur_tail[0]; \ 566 _mur_k1 *= _mur_c1; \ 567 _mur_k1 = MUR_ROTL32(_mur_k1,15); \ 568 _mur_k1 *= _mur_c2; \ 569 _mur_h1 ^= _mur_k1; \ 570 } \ 571 _mur_h1 ^= (keylen); \ 572 MUR_FMIX(_mur_h1); \ 573 hashv = _mur_h1; \ 574 bkt = hashv & (num_bkts-1); \ 575 } while(0) 576 #endif /* HASH_USING_NO_STRICT_ALIASING */ 577 578 /* key comparison function; return 0 if keys equal */ 579 #define HASH_KEYCMP(a,b,len) memcmp(a,b,len) 580 581 /* iterate over items in a known bucket to find desired item */ 582 #define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ 583 do { \ 584 if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ 585 else out=NULL; \ 586 while (out) { \ 587 if ((out)->hh.keylen == keylen_in) { \ 588 if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \ 589 } \ 590 if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \ 591 else out = NULL; \ 592 } \ 593 } while(0) 594 595 /* add an item to a bucket */ 596 #define HASH_ADD_TO_BKT(head,addhh) \ 597 do { \ 598 head.count++; \ 599 (addhh)->hh_next = head.hh_head; \ 600 (addhh)->hh_prev = NULL; \ 601 if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ 602 (head).hh_head=addhh; \ 603 if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ 604 && (addhh)->tbl->noexpand != 1) { \ 605 HASH_EXPAND_BUCKETS((addhh)->tbl); \ 606 } \ 607 } while(0) 608 609 /* remove an item from a given bucket */ 610 #define HASH_DEL_IN_BKT(hh,head,hh_del) \ 611 (head).count--; \ 612 if ((head).hh_head == hh_del) { \ 613 (head).hh_head = hh_del->hh_next; \ 614 } \ 615 if (hh_del->hh_prev) { \ 616 hh_del->hh_prev->hh_next = hh_del->hh_next; \ 617 } \ 618 if (hh_del->hh_next) { \ 619 hh_del->hh_next->hh_prev = hh_del->hh_prev; \ 620 } 621 622 /* Bucket expansion has the effect of doubling the number of buckets 623 * and redistributing the items into the new buckets. Ideally the 624 * items will distribute more or less evenly into the new buckets 625 * (the extent to which this is true is a measure of the quality of 626 * the hash function as it applies to the key domain). 627 * 628 * With the items distributed into more buckets, the chain length 629 * (item count) in each bucket is reduced. Thus by expanding buckets 630 * the hash keeps a bound on the chain length. This bounded chain 631 * length is the essence of how a hash provides constant time lookup. 632 * 633 * The calculation of tbl->ideal_chain_maxlen below deserves some 634 * explanation. First, keep in mind that we're calculating the ideal 635 * maximum chain length based on the *new* (doubled) bucket count. 636 * In fractions this is just n/b (n=number of items,b=new num buckets). 637 * Since the ideal chain length is an integer, we want to calculate 638 * ceil(n/b). We don't depend on floating point arithmetic in this 639 * hash, so to calculate ceil(n/b) with integers we could write 640 * 641 * ceil(n/b) = (n/b) + ((n%b)?1:0) 642 * 643 * and in fact a previous version of this hash did just that. 644 * But now we have improved things a bit by recognizing that b is 645 * always a power of two. We keep its base 2 log handy (call it lb), 646 * so now we can write this with a bit shift and logical AND: 647 * 648 * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) 649 * 650 */ 651 #define HASH_EXPAND_BUCKETS(tbl) \ 652 do { \ 653 unsigned _he_bkt; \ 654 unsigned _he_bkt_i; \ 655 struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ 656 UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ 657 _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ 658 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ 659 if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ 660 memset(_he_new_buckets, 0, \ 661 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ 662 tbl->ideal_chain_maxlen = \ 663 (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ 664 ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ 665 tbl->nonideal_items = 0; \ 666 for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ 667 { \ 668 _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ 669 while (_he_thh) { \ 670 _he_hh_nxt = _he_thh->hh_next; \ 671 HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ 672 _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ 673 if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ 674 tbl->nonideal_items++; \ 675 _he_newbkt->expand_mult = _he_newbkt->count / \ 676 tbl->ideal_chain_maxlen; \ 677 } \ 678 _he_thh->hh_prev = NULL; \ 679 _he_thh->hh_next = _he_newbkt->hh_head; \ 680 if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ 681 _he_thh; \ 682 _he_newbkt->hh_head = _he_thh; \ 683 _he_thh = _he_hh_nxt; \ 684 } \ 685 } \ 686 uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ 687 tbl->num_buckets *= 2; \ 688 tbl->log2_num_buckets++; \ 689 tbl->buckets = _he_new_buckets; \ 690 tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ 691 (tbl->ineff_expands+1) : 0; \ 692 if (tbl->ineff_expands > 1) { \ 693 tbl->noexpand=1; \ 694 uthash_noexpand_fyi(tbl); \ 695 } \ 696 uthash_expand_fyi(tbl); \ 697 } while(0) 698 699 700 /* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ 701 /* Note that HASH_SORT assumes the hash handle name to be hh. 702 * HASH_SRT was added to allow the hash handle name to be passed in. */ 703 #define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) 704 #define HASH_SRT(hh,head,cmpfcn) \ 705 do { \ 706 unsigned _hs_i; \ 707 unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ 708 struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ 709 if (head) { \ 710 _hs_insize = 1; \ 711 _hs_looping = 1; \ 712 _hs_list = &((head)->hh); \ 713 while (_hs_looping) { \ 714 _hs_p = _hs_list; \ 715 _hs_list = NULL; \ 716 _hs_tail = NULL; \ 717 _hs_nmerges = 0; \ 718 while (_hs_p) { \ 719 _hs_nmerges++; \ 720 _hs_q = _hs_p; \ 721 _hs_psize = 0; \ 722 for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ 723 _hs_psize++; \ 724 _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ 725 ((void*)((char*)(_hs_q->next) + \ 726 (head)->hh.tbl->hho)) : NULL); \ 727 if (! (_hs_q) ) break; \ 728 } \ 729 _hs_qsize = _hs_insize; \ 730 while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ 731 if (_hs_psize == 0) { \ 732 _hs_e = _hs_q; \ 733 _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ 734 ((void*)((char*)(_hs_q->next) + \ 735 (head)->hh.tbl->hho)) : NULL); \ 736 _hs_qsize--; \ 737 } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ 738 _hs_e = _hs_p; \ 739 _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ 740 ((void*)((char*)(_hs_p->next) + \ 741 (head)->hh.tbl->hho)) : NULL); \ 742 _hs_psize--; \ 743 } else if (( \ 744 cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ 745 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ 746 ) <= 0) { \ 747 _hs_e = _hs_p; \ 748 _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ 749 ((void*)((char*)(_hs_p->next) + \ 750 (head)->hh.tbl->hho)) : NULL); \ 751 _hs_psize--; \ 752 } else { \ 753 _hs_e = _hs_q; \ 754 _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ 755 ((void*)((char*)(_hs_q->next) + \ 756 (head)->hh.tbl->hho)) : NULL); \ 757 _hs_qsize--; \ 758 } \ 759 if ( _hs_tail ) { \ 760 _hs_tail->next = ((_hs_e) ? \ 761 ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ 762 } else { \ 763 _hs_list = _hs_e; \ 764 } \ 765 _hs_e->prev = ((_hs_tail) ? \ 766 ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ 767 _hs_tail = _hs_e; \ 768 } \ 769 _hs_p = _hs_q; \ 770 } \ 771 _hs_tail->next = NULL; \ 772 if ( _hs_nmerges <= 1 ) { \ 773 _hs_looping=0; \ 774 (head)->hh.tbl->tail = _hs_tail; \ 775 DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ 776 } \ 777 _hs_insize *= 2; \ 778 } \ 779 HASH_FSCK(hh,head); \ 780 } \ 781 } while (0) 782 783 /* This function selects items from one hash into another hash. 784 * The end result is that the selected items have dual presence 785 * in both hashes. There is no copy of the items made; rather 786 * they are added into the new hash through a secondary hash 787 * hash handle that must be present in the structure. */ 788 #define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ 789 do { \ 790 unsigned _src_bkt, _dst_bkt; \ 791 void *_last_elt=NULL, *_elt; \ 792 UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ 793 ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ 794 if (src) { \ 795 for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ 796 for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ 797 _src_hh; \ 798 _src_hh = _src_hh->hh_next) { \ 799 _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ 800 if (cond(_elt)) { \ 801 _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ 802 _dst_hh->key = _src_hh->key; \ 803 _dst_hh->keylen = _src_hh->keylen; \ 804 _dst_hh->hashv = _src_hh->hashv; \ 805 _dst_hh->prev = _last_elt; \ 806 _dst_hh->next = NULL; \ 807 if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ 808 if (!dst) { \ 809 DECLTYPE_ASSIGN(dst,_elt); \ 810 HASH_MAKE_TABLE(hh_dst,dst); \ 811 } else { \ 812 _dst_hh->tbl = (dst)->hh_dst.tbl; \ 813 } \ 814 HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ 815 HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ 816 (dst)->hh_dst.tbl->num_items++; \ 817 _last_elt = _elt; \ 818 _last_elt_hh = _dst_hh; \ 819 } \ 820 } \ 821 } \ 822 } \ 823 HASH_FSCK(hh_dst,dst); \ 824 } while (0) 825 826 #define HASH_CLEAR(hh,head) \ 827 do { \ 828 if (head) { \ 829 uthash_free((head)->hh.tbl->buckets, \ 830 (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ 831 HASH_BLOOM_FREE((head)->hh.tbl); \ 832 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ 833 (head)=NULL; \ 834 } \ 835 } while(0) 836 837 #ifdef NO_DECLTYPE 838 #define HASH_ITER(hh,head,el,tmp) \ 839 for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ 840 el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) 841 #else 842 #define HASH_ITER(hh,head,el,tmp) \ 843 for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ 844 el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) 845 #endif 846 847 /* obtain a count of items in the hash */ 848 #define HASH_COUNT(head) HASH_CNT(hh,head) 849 #define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) 850 851 typedef struct UT_hash_bucket { 852 struct UT_hash_handle *hh_head; 853 unsigned count; 854 855 /* expand_mult is normally set to 0. In this situation, the max chain length 856 * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If 857 * the bucket's chain exceeds this length, bucket expansion is triggered). 858 * However, setting expand_mult to a non-zero value delays bucket expansion 859 * (that would be triggered by additions to this particular bucket) 860 * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. 861 * (The multiplier is simply expand_mult+1). The whole idea of this 862 * multiplier is to reduce bucket expansions, since they are expensive, in 863 * situations where we know that a particular bucket tends to be overused. 864 * It is better to let its chain length grow to a longer yet-still-bounded 865 * value, than to do an O(n) bucket expansion too often. 866 */ 867 unsigned expand_mult; 868 869 } UT_hash_bucket; 870 871 /* random signature used only to find hash tables in external analysis */ 872 #define HASH_SIGNATURE 0xa0111fe1 873 #define HASH_BLOOM_SIGNATURE 0xb12220f2 874 875 typedef struct UT_hash_table { 876 UT_hash_bucket *buckets; 877 unsigned num_buckets, log2_num_buckets; 878 unsigned num_items; 879 struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ 880 ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ 881 882 /* in an ideal situation (all buckets used equally), no bucket would have 883 * more than ceil(#items/#buckets) items. that's the ideal chain length. */ 884 unsigned ideal_chain_maxlen; 885 886 /* nonideal_items is the number of items in the hash whose chain position 887 * exceeds the ideal chain maxlen. these items pay the penalty for an uneven 888 * hash distribution; reaching them in a chain traversal takes >ideal steps */ 889 unsigned nonideal_items; 890 891 /* ineffective expands occur when a bucket doubling was performed, but 892 * afterward, more than half the items in the hash had nonideal chain 893 * positions. If this happens on two consecutive expansions we inhibit any 894 * further expansion, as it's not helping; this happens when the hash 895 * function isn't a good fit for the key domain. When expansion is inhibited 896 * the hash will still work, albeit no longer in constant time. */ 897 unsigned ineff_expands, noexpand; 898 899 uint32_t signature; /* used only to find hash tables in external analysis */ 900 #ifdef HASH_BLOOM 901 uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ 902 uint8_t *bloom_bv; 903 char bloom_nbits; 904 #endif 905 906 } UT_hash_table; 907 908 typedef struct UT_hash_handle { 909 struct UT_hash_table *tbl; 910 void *prev; /* prev element in app order */ 911 void *next; /* next element in app order */ 912 struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ 913 struct UT_hash_handle *hh_next; /* next hh in bucket order */ 914 void *key; /* ptr to enclosing struct's key */ 915 unsigned keylen; /* enclosing struct's key len */ 916 unsigned hashv; /* result of hash-fcn(key) */ 917 } UT_hash_handle; 918 919 #endif /* UTHASH_H */ 920