Provided by: publib-dev_0.40-2_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)