Lines Matching refs:hh
141 #define HASH_ROLLBACK_BKT(hh, head, itemptrhh) \ argument
145 HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
146 (head)->hh.tbl->buckets[_hd_bkt].count++; \
156 #define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \ argument
161 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \
162 if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \
163 …HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, …
168 #define HASH_FIND(hh,head,keyptr,keylen,out) \ argument
174 HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \
215 #define HASH_MAKE_TABLE(hh,head,oomed) \ argument
217 (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \
218 if (!(head)->hh.tbl) { \
221 uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \
222 (head)->hh.tbl->tail = &((head)->hh); \
223 (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
224 (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
225 (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
226 (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
228 (head)->hh.tbl->signature = HASH_SIGNATURE; \
229 if (!(head)->hh.tbl->buckets) { \
231 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
233 uthash_bzero((head)->hh.tbl->buckets, \
235 HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \
238 uthash_free((head)->hh.tbl->buckets, \
240 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
247 #define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \ argument
250 HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
252 HASH_DELETE(hh, head, replaced); \
254 …HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn…
257 #define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \ argument
260 HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
262 HASH_DELETE(hh, head, replaced); \
264 HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \
267 #define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ argument
271 HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \
274 #define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \ argument
278 …HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn)…
281 #define HASH_APPEND_LIST(hh, head, add) \ argument
283 (add)->hh.next = NULL; \
284 (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
285 (head)->hh.tbl->tail->next = (add); \
286 (head)->hh.tbl->tail = &((add)->hh); \
289 #define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ argument
295 } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
300 #define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ argument
310 } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
316 #define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ argument
320 (head)->hh.tbl->num_items++; \
321 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
322 HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
324 HASH_ROLLBACK_BKT(hh, head, &(add)->hh); \
325 HASH_DELETE_HH(hh, head, &(add)->hh); \
326 (add)->hh.tbl = NULL; \
329 HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
330 HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
333 (add)->hh.tbl = NULL; \
340 #define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ argument
343 (head)->hh.tbl->num_items++; \
344 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
345 HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
346 HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
347 HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
353 #define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \ argument
356 (add)->hh.hashv = (hashval); \
357 (add)->hh.key = (char*) (keyptr); \
358 (add)->hh.keylen = (unsigned) (keylen_in); \
360 (add)->hh.next = NULL; \
361 (add)->hh.prev = NULL; \
362 HASH_MAKE_TABLE(hh, add, _ha_oomed); \
368 (add)->hh.tbl = (head)->hh.tbl; \
369 HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \
371 (add)->hh.next = _hs_iter; \
372 if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \
373 HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \
377 HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \
379 HASH_APPEND_LIST(hh, head, add); \
382 HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
383 HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER"); \
386 #define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \ argument
390 HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \
393 #define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \ argument
394 …HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn)
396 #define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \ argument
397 HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn)
399 #define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \ argument
402 (add)->hh.hashv = (hashval); \
403 (add)->hh.key = (const void*) (keyptr); \
404 (add)->hh.keylen = (unsigned) (keylen_in); \
406 (add)->hh.next = NULL; \
407 (add)->hh.prev = NULL; \
408 HASH_MAKE_TABLE(hh, add, _ha_oomed); \
413 (add)->hh.tbl = (head)->hh.tbl; \
414 HASH_APPEND_LIST(hh, head, add); \
416 HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
417 HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE"); \
420 #define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ argument
424 HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \
427 #define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \ argument
428 HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add)
430 #define HASH_ADD(hh,head,fieldname,keylen_in,add) \ argument
431 HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add)
450 #define HASH_DELETE(hh,head,delptr) \ argument
451 HASH_DELETE_HH(hh, head, &(delptr)->hh)
453 #define HASH_DELETE_HH(hh,head,delptrhh) \ argument
457 HASH_BLOOM_FREE((head)->hh.tbl); \
458 uthash_free((head)->hh.tbl->buckets, \
459 (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
460 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
464 if (_hd_hh_del == (head)->hh.tbl->tail) { \
465 (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \
468 HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \
473 HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \
475 HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
476 HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
477 (head)->hh.tbl->num_items--; \
479 HASH_FSCK(hh, head, "HASH_DELETE_HH"); \
486 HASH_FIND(hh, head, findstr, _uthash_hfstr_keylen, out); \
491 HASH_ADD(hh, head, strfield[0], _uthash_hastr_keylen, add); \
496 HASH_REPLACE(hh, head, strfield[0], _uthash_hrstr_keylen, add, replaced); \
499 HASH_FIND(hh,head,findint,sizeof(int),out)
501 HASH_ADD(hh,head,intfield,sizeof(int),add)
503 HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
505 HASH_FIND(hh,head,findptr,sizeof(void *),out)
507 HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
509 HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
511 HASH_DELETE(hh,head,delptr)
519 #define HASH_FSCK(hh,head,where) \ argument
526 for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \
528 _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
540 if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
542 (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
545 if (_count != (head)->hh.tbl->num_items) { \
547 (where), (head)->hh.tbl->num_items, _count); \
551 _thh = &(head)->hh; \
558 _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
559 _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \
561 if (_count != (head)->hh.tbl->num_items) { \
563 (where), (head)->hh.tbl->num_items, _count); \
568 #define HASH_FSCK(hh,head,where) argument
575 #define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ argument
582 #define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) argument
746 #define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \ argument
754 if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \
755 if (HASH_KEYCMP((out)->hh.key, keyptr, keylen_in) == 0) { \
759 if ((out)->hh.hh_next != NULL) { \
760 DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \
768 #define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \ argument
834 #define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \ argument
890 #define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
891 #define HASH_SRT(hh,head,cmpfcn) \ argument
899 _hs_list = &((head)->hh); \
912 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
922 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
928 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
932 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \
933 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \
938 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
944 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
949 ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \
955 ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \
966 (head)->hh.tbl->tail = _hs_tail; \
967 DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
971 HASH_FSCK(hh, head, "HASH_SRT"); \
1038 #define HASH_CLEAR(hh,head) \ argument
1041 HASH_BLOOM_FREE((head)->hh.tbl); \
1042 uthash_free((head)->hh.tbl->buckets, \
1043 (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
1044 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
1049 #define HASH_OVERHEAD(hh,head) \ argument
1051 (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
1052 ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
1057 #define HASH_ITER(hh,head,el,tmp) \ argument
1058 for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
1059 (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
1061 #define HASH_ITER(hh,head,el,tmp) \ argument
1062 for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
1063 (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
1067 #define HASH_COUNT(head) HASH_CNT(hh,head)
1068 #define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U) argument