Lines Matching refs:h

33     struct hashtable *h;  in create_hashtable()  local
41 h = (struct hashtable *)malloc(sizeof(struct hashtable)); in create_hashtable()
42 if (NULL == h) return NULL; /*oom*/ in create_hashtable()
43 h->table = (struct entry **)malloc(sizeof(struct entry*) * size); in create_hashtable()
44 if (NULL == h->table) { free(h); return NULL; } /*oom*/ in create_hashtable()
45 memset(h->table, 0, size * sizeof(struct entry *)); in create_hashtable()
46 h->tablelength = size; in create_hashtable()
47 h->primeindex = pindex; in create_hashtable()
48 h->entrycount = 0; in create_hashtable()
49 h->hashfn = hashf; in create_hashtable()
50 h->eqfn = eqf; in create_hashtable()
51 h->loadlimit = (unsigned int) ceil(size * max_load_factor); in create_hashtable()
52 return h; in create_hashtable()
57 hash(struct hashtable *h, void *k) in hash() argument
61 unsigned int i = h->hashfn(k); in hash()
71 hashtable_expand(struct hashtable *h) in hashtable_expand() argument
79 if (h->primeindex == (prime_table_length - 1)) return 0; in hashtable_expand()
80 newsize = primes[++(h->primeindex)]; in hashtable_expand()
88 for (i = 0; i < h->tablelength; i++) { in hashtable_expand()
89 while (NULL != (e = h->table[i])) { in hashtable_expand()
90 h->table[i] = e->next; in hashtable_expand()
91 index = indexFor(newsize,e->h); in hashtable_expand()
96 free(h->table); in hashtable_expand()
97 h->table = newtable; in hashtable_expand()
103 realloc(h->table, newsize * sizeof(struct entry *)); in hashtable_expand()
104 if (NULL == newtable) { (h->primeindex)--; return 0; } in hashtable_expand()
105 h->table = newtable; in hashtable_expand()
106 memset(newtable[h->tablelength], 0, newsize - h->tablelength); in hashtable_expand()
107 for (i = 0; i < h->tablelength; i++) { in hashtable_expand()
109 index = indexFor(newsize,e->h); in hashtable_expand()
123 h->tablelength = newsize; in hashtable_expand()
124 h->loadlimit = (unsigned int) ceil(newsize * max_load_factor); in hashtable_expand()
130 hashtable_count(struct hashtable *h) in hashtable_count() argument
132 return h->entrycount; in hashtable_count()
137 hashtable_insert(struct hashtable *h, void *k, void *v) in hashtable_insert() argument
142 if (++(h->entrycount) > h->loadlimit) in hashtable_insert()
148 hashtable_expand(h); in hashtable_insert()
151 if (NULL == e) { --(h->entrycount); return 0; } /*oom*/ in hashtable_insert()
152 e->h = hash(h,k); in hashtable_insert()
153 index = indexFor(h->tablelength,e->h); in hashtable_insert()
156 e->next = h->table[index]; in hashtable_insert()
157 h->table[index] = e; in hashtable_insert()
163 hashtable_search(struct hashtable *h, void *k) in hashtable_search() argument
167 hashvalue = hash(h,k); in hashtable_search()
168 index = indexFor(h->tablelength,hashvalue); in hashtable_search()
169 e = h->table[index]; in hashtable_search()
173 if ((hashvalue == e->h) && (h->eqfn(k, e->k))) return e->v; in hashtable_search()
181 hashtable_remove(struct hashtable *h, void *k) in hashtable_remove() argument
191 hashvalue = hash(h,k); in hashtable_remove()
192 index = indexFor(h->tablelength,hash(h,k)); in hashtable_remove()
193 pE = &(h->table[index]); in hashtable_remove()
198 if ((hashvalue == e->h) && (h->eqfn(k, e->k))) in hashtable_remove()
201 h->entrycount--; in hashtable_remove()
216 hashtable_destroy(struct hashtable *h, int free_values) in hashtable_destroy() argument
220 struct entry **table = h->table; in hashtable_destroy()
223 for (i = 0; i < h->tablelength; i++) in hashtable_destroy()
232 for (i = 0; i < h->tablelength; i++) in hashtable_destroy()
239 free(h->table); in hashtable_destroy()
240 free(h); in hashtable_destroy()