Lines Matching refs:tbl

97 #define uthash_noexpand_fyi(tbl)          /* can be defined to log noexpand  */
100 #define uthash_expand_fyi(tbl) /* can be defined to log expands */
135 #define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
137 #define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle*)(void*)(((char*)(elp)) + ((tbl)->hho)))
143 HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
144 (head)->hh.tbl->buckets[_hd_bkt].count++; \
159 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \
160 if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \
161 HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \
179 #define HASH_BLOOM_MAKE(tbl,oomed) \
181 (tbl)->bloom_nbits = HASH_BLOOM; \
182 (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
183 if (!(tbl)->bloom_bv) { \
186 uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
187 (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
191 #define HASH_BLOOM_FREE(tbl) \
193 uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
199 #define HASH_BLOOM_ADD(tbl,hashv) \
200 HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
202 #define HASH_BLOOM_TEST(tbl,hashv) \
203 HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
206 #define HASH_BLOOM_MAKE(tbl,oomed)
207 #define HASH_BLOOM_FREE(tbl)
208 #define HASH_BLOOM_ADD(tbl,hashv)
209 #define HASH_BLOOM_TEST(tbl,hashv) (1)
215 (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \
216 if (!(head)->hh.tbl) { \
219 uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \
220 (head)->hh.tbl->tail = &((head)->hh); \
221 (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
222 (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
223 (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
224 (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
226 (head)->hh.tbl->signature = HASH_SIGNATURE; \
227 if (!(head)->hh.tbl->buckets) { \
229 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
231 uthash_bzero((head)->hh.tbl->buckets, \
233 HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \
236 uthash_free((head)->hh.tbl->buckets, \
238 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
282 (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
283 (head)->hh.tbl->tail->next = (add); \
284 (head)->hh.tbl->tail = &((add)->hh); \
293 } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
308 } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
318 (head)->hh.tbl->num_items++; \
319 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
320 HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
324 (add)->hh.tbl = NULL; \
327 HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
331 (add)->hh.tbl = NULL; \
341 (head)->hh.tbl->num_items++; \
342 HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
343 HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
344 HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
366 (add)->hh.tbl = (head)->hh.tbl; \
370 if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \
371 HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \
375 HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \
411 (add)->hh.tbl = (head)->hh.tbl; \
455 HASH_BLOOM_FREE((head)->hh.tbl); \
456 uthash_free((head)->hh.tbl->buckets, \
457 (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
458 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
462 if (_hd_hh_del == (head)->hh.tbl->tail) { \
463 (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \
466 HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \
471 HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \
473 HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
474 HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
475 (head)->hh.tbl->num_items--; \
524 for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \
526 _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
538 if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
540 (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
543 if (_count != (head)->hh.tbl->num_items) { \
545 (where), (head)->hh.tbl->num_items, _count); \
556 _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
557 _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \
559 if (_count != (head)->hh.tbl->num_items) { \
561 (where), (head)->hh.tbl->num_items, _count); \
744 #define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \
747 DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \
758 DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \
777 && !(addhh)->tbl->noexpand) { \
778 HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed); \
814 * The calculation of tbl->ideal_chain_maxlen below deserves some
832 #define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \
839 sizeof(struct UT_hash_bucket) * (tbl)->num_buckets * 2U); \
844 sizeof(struct UT_hash_bucket) * (tbl)->num_buckets * 2U); \
845 (tbl)->ideal_chain_maxlen = \
846 ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) + \
847 ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
848 (tbl)->nonideal_items = 0; \
849 for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) { \
850 _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head; \
853 HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt); \
855 if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) { \
856 (tbl)->nonideal_items++; \
857 if (_he_newbkt->count > _he_newbkt->expand_mult * (tbl)->ideal_chain_maxlen) { \
870 uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
871 (tbl)->num_buckets *= 2U; \
872 (tbl)->log2_num_buckets++; \
873 (tbl)->buckets = _he_new_buckets; \
874 (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ? \
875 ((tbl)->ineff_expands+1U) : 0U; \
876 if ((tbl)->ineff_expands > 1U) { \
877 (tbl)->noexpand = 1; \
878 uthash_noexpand_fyi(tbl); \
880 uthash_expand_fyi(tbl); \
910 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
920 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
926 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
930 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \
931 DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \
936 HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
942 HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
947 ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \
953 ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \
964 (head)->hh.tbl->tail = _hs_tail; \
965 DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
985 for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
986 for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
989 _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
1012 _dst_hh->tbl = (dst)->hh_dst.tbl; \
1014 HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
1015 HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \
1016 (dst)->hh_dst.tbl->num_items++; \
1021 _dst_hh->tbl = NULL; \
1026 HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv); \
1039 HASH_BLOOM_FREE((head)->hh.tbl); \
1040 uthash_free((head)->hh.tbl->buckets, \
1041 (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
1042 uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
1049 (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
1050 ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
1066 #define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
1126 struct UT_hash_table *tbl;