en

hash.3


Introduction to Library Functions                         HASH(3)

NAME
     hash - hash table support - obsolete - use cdt

SYNOPSIS
     #include <hash.h>

DESCRIPTION
     The hash routines manipulate collections of dynamic,  scoped
     hash tables.

     A hash table provides an association between a key  and  its
     value.   A key is a sequence of char elements and a value is
     a user supplied pointer to the value.  Each hash table has a
     dynamic number of slots, each pointing to the head of a for-
     ward linked collision chain.

     Hashing occurs as follows:  a hash function takes a  key  as
     an  argument  and  returns  a non-negative index.  The index
     modulo the table size produces a slot that points to a  col-
     lision  chain.  The collision chain is sequentially searched
     until a match  is  found  for  key.   The  hash  tables  are
     automatically resized as new entries are added.

     Each hash table has one key type.  The default key type is a
     pointer to a null-terminated string.  The alternate key type
     is a pointer to a fixed length byte buffer, declared  for  a
     given table by the hashalloc() function described below.

     Hash table information is partitioned  into  two  parts  for
     efficient scoping.  The root part contains fixed information
     that is shared among a set  of  related  hash  tables.   The
     remaining information is maintained on a per-table basis.

     These basic types are defined  in  the  header  file  hash.h
     (alternate names are listed in parenthesis):

     Hash_table_t (HASHTABLE)
          The per-table information.  The  readonly  public  ele-
          ments are:

          int buckets
               The number of table entries.

          char* name
               The hash table name.

          root The root information.  The public elements are:

               int root->accesses
                    The number of lookups.

               int root->collisions

SunOS 5.10                Last change:                          1

Introduction to Library Functions                         HASH(3)

                    The number of lookup collisions.

          Hash_table_t* scope
               The table that this  scope  covers,  NULL  if  the
               table is not a scope.

          int size
               The current hash table size.

     Hash_bucket_t (HASHBUCKET)
          A collision chain hash bucket.   The  public  structure
          elements are:

          char* hashname(Hash_bucket_t*)
               Returns a pointer to the hash bucket key given the
               bucket pointer.

          char* value
               The value associated with the key.

     Hash_header_t (HASHHEADER)
          The hash bucket header that must be the  first  element
          in  all  user  defined  buckets.  HASH_VALUE may not be
          used with user defined buckets.

     Hash_position_t (HASHPOSITION)
          Stores the hash table position for hashscan.  The  pub-
          lic elements are:

          Hash_bucket_t* bucket
               The current hash bucket pointer.

     The routines are:

     Hash_table_t* hashalloc(Hash_table_t* ref, int op, ...)
          Creates a new hash table and returns a pointer  to  the
          table.   malloc(3)  is  used  to allocate space for the
          table.   NULL  is  returned  if  the  table  cannot  be
          created.   ref  is  a pointer to a reference hash table
          that provides default values for  unspecified  informa-
          tion.   The  new hash table and ref share the same root
          information.  If ref is NULL then new root  information
          is  created for the new table.  The remaining arguments
          appear in op-arg pairs, followed by a final 0 argument.
          The op-arg pairs are:

          HASH_alloc, (char(*)()) alloc
               alloc is a function  that  is  called  to  process
               Hash_bucket_t value assignments.  The single argu-
               ment is char* value and the processed char*  value
               is returned.

SunOS 5.10                Last change:                          2

Introduction to Library Functions                         HASH(3)

          HASH_clear, int flags
               flags are the ref flags to be cleared in  the  new
               hash table.  See HASH_set below.

          HASH_compare, (int(*)()) compare
               Specifies an alternate  key  comparison  function.
               The arguments and return value for compare are the
               same as for strncmp(3) if HASH_namesize is  speci-
               fied  and strcmp(3) otherwise.  The first argument
               is the key from the current  hash  bucket  on  the
               collision  chain  and  the  second argument is the
               user supplied key.

          HASH_free, (int(*)()) free
               free is a function that  is  called  when  a  hash
               bucket  is  freed.   If  HASH_BUCKET  was  set  in
               hashalloc then the hash bucket pointer is  passed,
               otherwise the bucket value pointer is passed.

          HASH_hash, (int(*)()) hash
               Specifies an alternate key hash function.  A char*
               key  argument (and, if HASH_namesize is specified,
               an int key size argument) is passed to hash.   The
               return value must be a non-negative int.

          HASH_meanchain, int meanchain
               Specifies the mean collision  chain  length.   The
               hash  table  is  automatically  resized  when this
               value is exceeded.  The default mean chain  length
               is 2.

          HASH_name, char* name
               Associates name with  the  hash  table.   Used  by
               hashdump).

          HASH_namesize, int namesize
               The fixed size in bytes for keys in the table.  If
               namesize  is  0  (the  default)  then the keys are
               interpreted as null-terminated strings.

          HASH_set, int flags
               Changes the hash table flags by  oring  in  flags.
               The flags, which may be ored together, are:

               HASH_ALLOCATE
                    Keys for new hash table  entries  are  to  be
                    copied to data areas obtained from malloc(3).

               HASH_FIXED
                    Fixes the  hash  table  size,  disabling  any
                    automatic table resizing.

SunOS 5.10                Last change:                          3

Introduction to Library Functions                         HASH(3)

               HASH_SCOPE
                    The new hash table is a scope that is  to  be
                    pushed on top of ref.  ref must be non-NULL.

          HASH_va_list, va_list ap
               ap is a va_list  variable  argument  list  pointer
               (see <stdarg.h>).

     Hash_table_t* hashfree(Hash_table_t* tab)
          The hash table tab is freed.  The scope  covered  table
          pointer is returned, NULL if tab is not a scope.

value)
     char* hashlook(Hash_table_t* tab, char* name,  int  flags,  char*
          Operates  on the key name in the hash table tab accord-
          ing to flags and value.   A  Hash_bucket_t  pointer  is
          returned unless otherwise noted.  There are three basic
          lookup operations:

          HASH_CREATE
               name is entered into the top  level  scope  if  it
               does not already exist.  If name also appears in a
               lower scope and HASH_ALLOC is set  for  the  table
               then  the  new  bucket  will  share the name field
               value with the lower scope.

          HASH_DELETE
               name is deleted from the top  level  scope  if  it
               exists.  NULL is returned.

          HASH_LOOKUP
               The scopes are searched in order from top to  bot-
               tom  for  name.   The bucket pointer for the first
               occurrence is returned.  NULL is returned if  name
               is not found.
     The basic operations may be qualified by the following  (the
     qualifiers  are  restricted  to  the basic operations in the
     parenthesized list):

          HASH_BUCKET (HASH_CREATE,HASH_DELETE,HASH_LOOKUP)
               name is a pointer to a  bucket  that  has  already
               been entered into the table.

          HASH_FIXED (HASH_CREATE)
               value is taken to be the size of the  hash  bucket
               to  be  created  for  name in the top level scope.
               The minimum bucket size is silently restricted  to
               sizeof(Hash_header_t).

          HASH_INSTALL (HASH_CREATE)
               name is a pointer to a bucket that  has  not  been
               entered into the table.

SunOS 5.10                Last change:                          4

Introduction to Library Functions                         HASH(3)

          HASH_NOSCOPE (HASH_LOOKUP)
               The lookup is restricted to the top level scope.

          HASH_OPAQUE (HASH_CREATE,HASH_DELETE)
               Sets (HASH_CREATE)  or  clears  (HASH_DELETE)  the
               opaque  property for the bucket.  An opaque bucket
               is not visible in lower scopes.

          HASH_SCOPE (HASH_CREATE,HASH_DELETE)
               All scopes are searched for the  bucket.   If  the
               bucket  is  not  found  for HASH_CREATE then a new
               bucket is created in the lowest scope.

          HASH_VALUE (HASH_CREATE,HASH_LOOKUP)
               For HASH_CREATE the bucket value field is  set  to
               value  and the bucket name value is returned.  For
               HASH_LOOKUP the bucket value  field  is  returned,
               NULL if the bucket is not found.
     If name NULL then the name from the most  recent  hashlook()
     is used, avoiding recomputation of some internal parameters.

     char* hashget(Hash_table_t* tab, char* name)
          Returns the value associated with the key name  in  the
          hash table tab.  If name is NULL then the name from the
          most recent hashget() is used,  avoiding  recomputation
          of  some internal parameters.  NULL is returned if name
          is not in the table.   All  scope  covered  tables  are
          searched.

     Hash_bucket_t* hashlast(Hash_table_t* tab)
          Returns a pointer to the most recent  hash  bucket  for
          tab.   The  value  is set by hashlook(), hashscan() and
          hashwalk().

     char* hashput(Hash_table_t* tab, char* name, char* value)
          Set the value of the key name to value in the top level
          scope  of the hash table tab.  name is entered into the
          top  level  scope  if  necessary.   The  (possibly  re-
          allocated)   key   name   pointer   is   returned  (see
          HASH_ALLOCATE).  If name is  0  then  the  most  recent
          lookup  name  to hashlook() or hashget() is used.  This
          eliminates a re-hash and re-lookup of name.

char* handle)
     int hashwalk(Hash_table_t* tab,  int  flags,  (int(*)())  walker,
          The  function  walker  is  applied  to  each entry (not
          covered by a scope starting at tab) in the  hash  table
          tab.   If flags is HASH_NOSCOPE then only the top level
          hash table is used, otherwise  the  walk  includes  all
          scope  covered tables.  walker is called with char* key
          as the first argument, char* value as the second  argu-
          ment,  and  char* handle as the third argument.  handle

SunOS 5.10                Last change:                          5

Introduction to Library Functions                         HASH(3)

          may be 0.  The walk terminates after the last entry  or
          when walker returns a negative value.  The return value
          of the last call to walker is returned.  Only one  walk
          may be active within a collection of scoped tables.

     Hash_position_t* hashscan(Hash_table_t* tab, int flags)
          Returns a Hash_position_t pointer for a sequential scan
          on  the  hash table tab.  If flags is HASH_NOSCOPE then
          only the top level hash table is  used,  otherwise  the
          scan  includes all scope covered tables.  Only one scan
          may be active within a  collection  of  scoped  tables.
          hashdone()  must be called to terminate the scan.  0 is
          returned on error.

     Hash_bucket_t* hashnext(Hash_position_t* pos)
          Returnes a pointer to the next bucket in the sequential
          scan  set  up  by  hashscan()  on  pos.  If no elements
          remain then 0 is returned.

     void hashdone(Hash_position_t* pos)
          Completes a scan initiated by hashscan() on pos.

     int hashset(Hash_table_t* tab, int flags)
          Sets the flags for the  hash  table  tab  by  oring  in
          flags.  Only HASH_ALLOCATE and HASH_FIXED may be set.

     int hashclear(Hash_table_t* tab, int flags)
          Clears the flags for the hash table tab by masking  out
          flags.    Only  HASH_ALLOCATE  and  HASH_FIXED  may  be
          cleared.

     void hashdump(Hash_table_t* tab, int flags)
          Dumps hash table accounting info to standard error.  If
          tab  is NULL then all allocated hash tables are dumped,
          otherwise only information on tab is dumped.  If  flags
          is HASH_BUCKET then the hash bucket key-value pairs for
          each collision chain are also dumped.

     void hashsize(Hash_table_t* tab, int size)
          Changes the size of the hash table tab  to  size  where
          size must be a power of 2.  Explicit calls to this rou-
          tine are not necessary as hash tables are automatically
          resized.

     int strhash(char* name)
          Hashes the null terminated character string name  using
          a linear congruent pseudo-random number generator algo-
          rithm and returns a non-negative int hash value.

     int memhash(char* buf, int siz)
          Hashes the buffer buf  of  siz  bytes  using  a  linear
          congruent  pseudo-random number generator algorithm and

SunOS 5.10                Last change:                          6

Introduction to Library Functions                         HASH(3)

          returns a non-negative int hash value.

     long strsum(char* name, long sum)
          Returns a running 31-bit checksum of  the  string  name
          where  sum  is 0 on the first call and the return value
          from a previous memsum or strsum call  otherwise.   The
          checksum  value  is  consistent  across all implementa-
          tions.

     long memsum(char* buf, int siz, long sum)
          Returns a running 31-bit checksum of buffer buf of  siz
          bytes  where  sum is 0 on the first call and the return
          value from a previous memsum or strsum call  otherwise.
          The checksum value is consistent across all implementa-
          tions.

SEE ALSO
     sum(1)

SunOS 5.10                Last change:                          7


Generated by GNU enscript 1.6.4.

Tags:
Created by admin on 2009/10/26 12:14
Last modified by admin on 2009/10/26 12:14

Collectives

Project ksh93-integration Pages


XWiki Enterprise 2.7.1.34853 - Documentation