Provided by: publib-dev_0.40-3build1_amd64 bug

NAME

       hash_create, hash_destroy, hash_install, hash_lookup, hash_uninstall, hash_iter - generic hash tables

SYNOPSIS

       #include <publib.h>

       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);

DESCRIPTION

       These  functions  implement  generic  hash  tables.  The table is created by hash_create 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.  cmp is a qsort(3)-like
       comparison functions, used to compare to (wannabe) hash table elements.

       hash_install 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.

       hash_lookup 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 collisions.

       hash_uninstall removes an element from a table.  The argument is a pointer to a datum that identifies the
       element.

       hash_iter  goes  through every element in the hash table and calls the doit function for each.  The first
       argument it provides to doit is the element in question, the second is whatever was given to hash_iter as
       param.   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 doit is ignored.

RETURNS

       hash_create returns a pointer to the new hash table, or NULL if it fails.

       hash_install 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).

       hash_uninstall returns 0 if it found the element in the array, or -1 if it didn't.

       hash_lookup return a pointer to the element it finds, or NULL if it doesn't find anything beautiful.

       hash_iter  returns  -1,  0,  or 1.  If hash_iter receives a return value of -1 or 0 for some element from
       doit, hash_iter immediately returns -1 or 0, respectively.  In all other cases hash_iter returns 1.

SEE ALSO

       publib(3), qsort(3), bsearch(3)

AUTHOR

       Lars Wirzenius (lars.wirzenius@helsinki.fi)