Lines Matching refs:table

57 #define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0)  argument
59 #define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key)) argument
60 #define do_hash_bin(key,table) (do_hash(key, table)%(table)->num_bins) argument
208 st_free_table(table) in st_free_table() argument
209 st_table *table; in st_free_table()
214 for(i = 0; i < table->num_bins; i++) {
215 ptr = table->bins[i];
222 free(table->bins);
223 free(table);
226 #define PTR_NOT_EQUAL(table, ptr, hash_val, key) \ argument
227 ((ptr) != 0 && (ptr->hash != (hash_val) || !EQUAL((table), (key), (ptr)->key)))
235 #define FIND_ENTRY(table, ptr, hash_val, bin_pos) do {\ argument
236 bin_pos = hash_val%(table)->num_bins;\
237 ptr = (table)->bins[bin_pos];\
238 if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\
240 while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\
248 st_lookup(table, key, value) in st_lookup() argument
249 st_table *table; in st_lookup()
256 hash_val = do_hash(key, table);
257 FIND_ENTRY(table, ptr, hash_val, bin_pos);
268 #define ADD_DIRECT(table, key, value, hash_val, bin_pos)\ argument
271 if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\
272 rehash(table);\
273 bin_pos = hash_val % table->num_bins;\
281 entry->next = table->bins[bin_pos];\
282 table->bins[bin_pos] = entry;\
283 table->num_entries++;\
287 st_insert(table, key, value) in st_insert() argument
288 register st_table *table; in st_insert()
295 hash_val = do_hash(key, table);
296 FIND_ENTRY(table, ptr, hash_val, bin_pos);
299 ADD_DIRECT(table, key, value, hash_val, bin_pos);
309 st_add_direct(table, key, value) in st_add_direct() argument
310 st_table *table; in st_add_direct()
316 hash_val = do_hash(key, table);
317 bin_pos = hash_val % table->num_bins;
318 ADD_DIRECT(table, key, value, hash_val, bin_pos);
322 rehash(table) in rehash() argument
323 register st_table *table; in rehash()
326 int i, old_num_bins = table->num_bins, new_num_bins;
336 ptr = table->bins[i];
345 free(table->bins);
346 table->num_bins = new_num_bins;
347 table->bins = new_bins;
392 st_delete(table, key, value) in st_delete() argument
393 register st_table *table; in st_delete()
401 hash_val = do_hash_bin(*key, table);
402 ptr = table->bins[hash_val];
409 if (EQUAL(table, *key, ptr->key)) {
410 table->bins[hash_val] = ptr->next;
411 table->num_entries--;
419 if (EQUAL(table, ptr->next->key, *key)) {
422 table->num_entries--;
434 st_delete_safe(table, key, value, never) in st_delete_safe() argument
435 register st_table *table; in st_delete_safe()
443 hash_val = do_hash_bin(*key, table);
444 ptr = table->bins[hash_val];
452 if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
453 table->num_entries--;
478 st_cleanup_safe(table, never) in st_cleanup_safe() argument
479 st_table *table; in st_cleanup_safe()
482 int num_entries = table->num_entries;
484 st_foreach(table, delete_never, never);
485 table->num_entries = num_entries;
489 st_foreach(table, func, arg) in st_foreach() argument
490 st_table *table; in st_foreach()
498 for(i = 0; i < table->num_bins; i++) {
500 for(ptr = table->bins[i]; ptr != 0;) {
505 if (i < table->num_bins) {
506 for (tmp = table->bins[i]; tmp; tmp=tmp->next) {
524 table->bins[i] = ptr->next;
531 table->num_entries--;