Lines Matching refs:head
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
159 if (head) { \
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
171 if (head) { \
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
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
292 if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) { \
295 } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
300 #define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ argument
302 char *_hs_saved_head = (char*)(head); \
304 DECLTYPE_ASSIGN(head, _hs_iter); \
305 if (cmpfcn(head, add) > 0) { \
306 DECLTYPE_ASSIGN(head, _hs_saved_head); \
309 DECLTYPE_ASSIGN(head, _hs_saved_head); \
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); \
329 HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
330 HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
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
359 if (!(head)) { \
364 (head) = (add); \
367 void *_hs_iter = (head); \
368 (add)->hh.tbl = (head)->hh.tbl; \
369 HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \
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); \
375 (head) = (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
405 if (!(head)) { \
410 (head) = (add); \
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)); \
461 (head) = NULL; \
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; \
470 DECLTYPE_ASSIGN(head, _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"); \
483 #define HASH_FIND_STR(head,findstr,out) \ argument
486 HASH_FIND(hh, head, findstr, _uthash_hfstr_keylen, out); \
488 #define HASH_ADD_STR(head,strfield,add) \ argument
491 HASH_ADD(hh, head, strfield[0], _uthash_hastr_keylen, add); \
493 #define HASH_REPLACE_STR(head,strfield,add,replaced) \ argument
496 HASH_REPLACE(hh, head, strfield[0], _uthash_hrstr_keylen, add, replaced); \
498 #define HASH_FIND_INT(head,findint,out) \ argument
499 HASH_FIND(hh,head,findint,sizeof(int),out)
500 #define HASH_ADD_INT(head,intfield,add) \ argument
501 HASH_ADD(hh,head,intfield,sizeof(int),add)
502 #define HASH_REPLACE_INT(head,intfield,add,replaced) \ argument
503 HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
504 #define HASH_FIND_PTR(head,findptr,out) \ argument
505 HASH_FIND(hh,head,findptr,sizeof(void *),out)
506 #define HASH_ADD_PTR(head,ptrfield,add) \ argument
507 HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
508 #define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ argument
509 HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
510 #define HASH_DEL(head,delptr) \ argument
511 HASH_DELETE(hh,head,delptr)
519 #define HASH_FSCK(hh,head,where) \ argument
522 if (head) { \
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
748 #define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \ argument
750 if ((head).hh_head != NULL) { \
751 DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \
770 #define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \ argument
772 UT_hash_bucket *_ha_head = &(head); \
785 HASH_DEL_IN_BKT(head,addhh); \
792 #define HASH_DEL_IN_BKT(head,delhh) \ argument
794 UT_hash_bucket *_hd_head = &(head); \
892 #define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) argument
893 #define HASH_SRT(hh,head,cmpfcn) \ argument
898 if (head != NULL) { \
901 _hs_list = &((head)->hh); \
914 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
924 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
930 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
934 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \
935 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \
940 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
946 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
951 ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \
957 ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \
968 (head)->hh.tbl->tail = _hs_tail; \
969 DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
973 HASH_FSCK(hh, head, "HASH_SRT"); \
1040 #define HASH_CLEAR(hh,head) \ argument
1042 if ((head) != NULL) { \
1043 HASH_BLOOM_FREE((head)->hh.tbl); \
1044 uthash_free((head)->hh.tbl->buckets, \
1045 (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
1046 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
1047 (head) = NULL; \
1051 #define HASH_OVERHEAD(hh,head) \ argument
1052 (((head) != NULL) ? ( \
1053 (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
1054 ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
1059 #define HASH_ITER(hh,head,el,tmp) \ argument
1060 for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
1063 #define HASH_ITER(hh,head,el,tmp) \ argument
1064 for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
1069 #define HASH_COUNT(head) HASH_CNT(hh,head) argument
1070 #define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U) argument