hash_create, hash_destroy, hash_install, hash_lookup, hash_uninstall, hash_iter
- generic hash tables
Hashtab * hash_create(unsigned long (*fun)(void *),
int (* cmp)(const void *, const void *));
void hash_destroy(Hashtab *ht);
void * hash_install(Hashtab *ht, void *data, size_t size);
void * hash_lookup(Hashtab *ht, void *data);
int hash_uninstall(Hashtab *ht, void *data);
int hash_iter(Hashtab *ht, int (*doit)(void *, void *), void *param);
These functions implement generic hash tables. The table is created by
and destroyed by hash_destroy
. The fun
argument is a pointer to the hashing function, which must convert a datum to
an unsigned long, which is then converted to an index into the hashing table.
is a qsort(3)
-like comparison functions, used to compare to
(wannabe) hash table elements.
installs a new datum into the table. A pointer to the data
and the size of the data are given as the arguments. If the size is 0, only
the pointer value is copied to the table. Otherwise a copy of the data is made
into dynamically allocated memory.
attempts to find a datum in the hash table. A pointer to
another datum is given as the argument. The comparison function should compare
equal (return 0) the desired datum and this datum (but the argument needn't be
a fully initialized datum, although that is up to the writer of the comparison
function). There cannot be two elements in the hash table that are equal (the
comparison function returns 0 for them). It is up to the user to handle
removes an element from a table. The argument is a pointer
to a datum that identifies the element.
goes through every element in the hash table and calls the
function for each. The first argument it provides to doit
is the element in question, the second is whatever was given to
. If doit
returns -1 or 0 for any
element in the hash table, hash_iter
immediately returns without going
through the remaining elements in the hash table. Any other return value from
returns a pointer to the new hash table, or NULL if it fails.
returns a pointer to an element in the table (either the
installed one, or one that was already installed, if one tries to install the
same datum twice).
returns 0 if it found the element in the array, or -1 if
return a pointer to the element it finds, or NULL if it
doesn't find anything beautiful.
returns -1, 0, or 1. If hash_iter
receives a return
value of -1 or 0 for some element from doit
immediately returns -1 or 0, respectively. In all other cases hash_iter
Lars Wirzenius (email@example.com)