| HASHINIT(9) | Kernel Developer's Manual | HASHINIT(9) | 
hashinit, hashdone —
#include <sys/systm.h>
void *
  
  hashinit(u_int chains,
    enum hashtype htype, bool
    waitok, u_long *hashmask);
void
  
  hashdone(void
    *hashtbl, enum hashtype
    htype, u_long
    hashmask);
hashinit() function allocates and initializes space
  for a simple chaining hash table. The number of slots will be the least power
  of two not smaller than chains. The customary choice for
  chains is the maximum number of elements you intend to
  store divided by your intended load factor. The
  LIST... or TAILQ... macros of
  queue(3) can be used to
  manipulate the chains; pass HASH_LIST or
  HASH_TAILQ as htype to indicate
  which. Each slot will be initialized as the head of an empty chain of the
  proper type. Because different data structures from
  queue(3) can define head
  structures of different sizes, the total size of the allocated table can vary
  with the choice of htype.
If waitok is true, hashinit can wait until enough memory is available. Otherwise, it immediately fails if there is not enough memory is available.
A value will be stored into *hashmask suitable for masking any computed hash, to obtain the index of a chain head in the allocated table.
The hashdone() function deallocates the
    storage allocated by hashinit() and pointed to by
    hashtbl, given the same htype
    and hashmask that were passed to and returned from
    hashinit(). If the table contains any nonempty chain
    when hashdone() is called, the result is
  undefined.
hashinit() should be cast as
  pointer to an array of LIST_HEAD or
  TAILQ_HEAD as appropriate.
  hashinit() returns NULL on
  failure.
hashinit() function was present, without the
  htype or mflags arguments, in
  4.4BSD-Alpha. It was independent of
  queue(3) and simply allocated and
  nulled a table of pointer-sized slots. It sized the table to the
  largest power of two not greater than
  chains; that is, it built in a load factor between 1 and
  2.
NetBSD 1.0 was the first
    NetBSD release to have a
    hashinit() function. It resembled that from
    4.4BSD but made each slot a
    LIST_HEAD from
    queue(3). For
    NetBSD 1.3.3 it had been changed to size the table
    to the least power of two not less than or equal to
    chains. By NetBSD 1.4 it had
    the mflags argument and the current sizing rule.
NetBSD 1.5 had the
    hashdone() function. By NetBSD
    1.6 hashinit() supported
    LIST or TAILQ chains
    selected with htype.
FreeBSD has a
    hashinit() with behavior equivalent (as of
    FreeBSD 6.1) to that in NetBSD
    1.0, and a hashdestroy() that behaves as
    hashdone() but checks that all chains are empty
    first. OpenBSD has a
    hashinit() comparable (as of
    OpenBSD 3.9) to that of NetBSD
    1.4. This manual page was added for NetBSD
    4.0.
| July 1, 2008 | NetBSD 9.4 |