htbl
static void htbl_grow(struct htbl *);
static struct htbl ahash_tbl = {
static struct htbl bhash_tbl = {
static struct htbl ihash_tbl = {
static struct htbl nhash_tbl = {
hash_link(struct htbl *htbl, uint_t hval, void *strp)
if (htbl->htbl_grow && htbl->htbl_ifcount >= htbl->htbl_size * 5)
htbl_grow(htbl);
hep = &htbl->htbl_ptrs[hval % htbl->htbl_size];
link_in(hep, strp, htbl->htbl_link_off);
htbl->htbl_ifcount++;
hash_unlink(struct htbl *htbl, void *strp)
link_out(strp, htbl->htbl_link_off);
htbl->htbl_ifcount--;
htbl_grow(struct htbl *htbl)
if ((new_size = hash_table_sizes[htbl->htbl_size_index + 1]) == 0)
saved_old_ptrs = old_ptrs = htbl->htbl_ptrs;
old_size = htbl->htbl_size;
htbl->htbl_ptrs = new_ptrs;
htbl->htbl_size = new_size;
htbl->htbl_size_index++;
htbl->htbl_ifcount = 0;
htbl->htbl_grow = _B_FALSE;
HADD(htbl, strp);
htbl->htbl_grow = _B_TRUE;
#define HFIRST(htbl, arg) \
((htbl)->htbl_ptrs[(htbl)->htbl_hash((arg), 0) % (htbl)->htbl_size])
#define HADD(htbl, strp) \
hash_link((htbl), (htbl)->htbl_hash((strp), (htbl)->htbl_key_off), \
hash_init(hash_t *htbl)
htbl->hash_size = HASH_TBL_SIZE;
htbl->tbl = malloc(sizeof (hash_elem_t *) * HASH_TBL_SIZE);
if (htbl->tbl == NULL)
for (i = 0; i < htbl->hash_size; ++i)
htbl->tbl[i] = NULL;
hash_add_newobj(hash_t *htbl, picl_hdl_t hdl, void *pobj)
indx = HASH_INDEX(htbl->hash_size, hash_val);
n->next = htbl->tbl[indx];
htbl->tbl[indx] = n;
hash_add_newhdl(hash_t *htbl, picl_hdl_t piclh, picl_hdl_t ptreeh)
indx = HASH_INDEX(htbl->hash_size, picl_val);
n->next = htbl->tbl[indx];
htbl->tbl[indx] = n;
hash_remove(hash_t *htbl, picl_hdl_t hdl)
i = HASH_INDEX(htbl->hash_size, hash_val);
if (htbl->tbl[i] == NULL)
cur = htbl->tbl[i];
htbl->tbl[i] = cur->next;
hash_lookup_obj(hash_t *htbl, picl_hdl_t hdl)
i = HASH_INDEX(htbl->hash_size, hash_val);
tmp = htbl->tbl[i];
hash_lookup_hdl(hash_t *htbl, picl_hdl_t hdl)
i = HASH_INDEX(htbl->hash_size, hash_val);
tmp = htbl->tbl[i];