Lines Matching refs:h

38 	struct hashtable *h;  in create_hashtable()  local
46 h = (struct hashtable *)malloc(sizeof(struct hashtable)); in create_hashtable()
47 if (NULL == h) return NULL; /*oom*/ in create_hashtable()
48 h->table = (struct entry **)malloc(sizeof(struct entry*) * size); in create_hashtable()
49 if (NULL == h->table) { free(h); return NULL; } /*oom*/ in create_hashtable()
50 memset(h->table, 0, size * sizeof(struct entry *)); in create_hashtable()
51 h->tablelength = size; in create_hashtable()
52 h->primeindex = pindex; in create_hashtable()
53 h->entrycount = 0; in create_hashtable()
54 h->hashfn = hashf; in create_hashtable()
55 h->eqfn = eqf; in create_hashtable()
56 h->loadlimit = (unsigned int) ceil(size * max_load_factor); in create_hashtable()
57 return h; in create_hashtable()
62 hash(struct hashtable *h, void *k) in hash() argument
66 unsigned int i = h->hashfn(k); in hash()
76 hashtable_expand(struct hashtable *h) in hashtable_expand() argument
84 if (h->primeindex == (prime_table_length - 1)) return 0; in hashtable_expand()
85 newsize = primes[++(h->primeindex)]; in hashtable_expand()
93 for (i = 0; i < h->tablelength; i++) { in hashtable_expand()
94 while (NULL != (e = h->table[i])) { in hashtable_expand()
95 h->table[i] = e->next; in hashtable_expand()
96 index = indexFor(newsize,e->h); in hashtable_expand()
101 free(h->table); in hashtable_expand()
102 h->table = newtable; in hashtable_expand()
108 realloc(h->table, newsize * sizeof(struct entry *)); in hashtable_expand()
109 if (NULL == newtable) { (h->primeindex)--; return 0; } in hashtable_expand()
110 h->table = newtable; in hashtable_expand()
111 memset(newtable[h->tablelength], 0, newsize - h->tablelength); in hashtable_expand()
112 for (i = 0; i < h->tablelength; i++) { in hashtable_expand()
114 index = indexFor(newsize,e->h); in hashtable_expand()
128 h->tablelength = newsize; in hashtable_expand()
129 h->loadlimit = (unsigned int) ceil(newsize * max_load_factor); in hashtable_expand()
135 hashtable_count(struct hashtable *h) in hashtable_count() argument
137 return h->entrycount; in hashtable_count()
142 hashtable_insert(struct hashtable *h, void *k, void *v) in hashtable_insert() argument
147 if (++(h->entrycount) > h->loadlimit) in hashtable_insert()
153 hashtable_expand(h); in hashtable_insert()
156 if (NULL == e) { --(h->entrycount); return 0; } /*oom*/ in hashtable_insert()
157 e->h = hash(h,k); in hashtable_insert()
158 index = indexFor(h->tablelength,e->h); in hashtable_insert()
161 e->next = h->table[index]; in hashtable_insert()
162 h->table[index] = e; in hashtable_insert()
168 hashtable_search(struct hashtable *h, void *k) in hashtable_search() argument
172 hashvalue = hash(h,k); in hashtable_search()
173 index = indexFor(h->tablelength,hashvalue); in hashtable_search()
174 e = h->table[index]; in hashtable_search()
178 if ((hashvalue == e->h) && (h->eqfn(k, e->k))) return e->v; in hashtable_search()
186 hashtable_remove(struct hashtable *h, void *k) in hashtable_remove() argument
196 hashvalue = hash(h,k); in hashtable_remove()
197 index = indexFor(h->tablelength,hash(h,k)); in hashtable_remove()
198 pE = &(h->table[index]); in hashtable_remove()
203 if ((hashvalue == e->h) && (h->eqfn(k, e->k))) in hashtable_remove()
206 h->entrycount--; in hashtable_remove()
221 hashtable_destroy(struct hashtable *h, int free_values) in hashtable_destroy() argument
225 struct entry **table = h->table; in hashtable_destroy()
228 for (i = 0; i < h->tablelength; i++) in hashtable_destroy()
237 for (i = 0; i < h->tablelength; i++) in hashtable_destroy()
244 free(h->table); in hashtable_destroy()
245 free(h); in hashtable_destroy()