Blame src/lib/libast/man/hash.3

Packit Service a8c26c
.fp 5 CW
Packit Service a8c26c
.de Af
Packit Service a8c26c
.ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
Packit Service a8c26c
.if !?\\$4?? .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
Packit Service a8c26c
..
Packit Service a8c26c
.de aF
Packit Service a8c26c
.ie ?\\$3?? .ft \\$1
Packit Service a8c26c
.el \{\
Packit Service a8c26c
.ds ;G \&
Packit Service a8c26c
.nr ;G \\n(.f
Packit Service a8c26c
.Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
Packit Service a8c26c
\\*(;G
Packit Service a8c26c
.ft \\n(;G \}
Packit Service a8c26c
..
Packit Service a8c26c
.de L
Packit Service a8c26c
.aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
Packit Service a8c26c
..
Packit Service a8c26c
.de LR
Packit Service a8c26c
.aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
Packit Service a8c26c
..
Packit Service a8c26c
.de RL
Packit Service a8c26c
.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
Packit Service a8c26c
..
Packit Service a8c26c
.de EX		\" start example
Packit Service a8c26c
.ta 1i 2i 3i 4i 5i 6i
Packit Service a8c26c
.PP
Packit Service a8c26c
.RS 
Packit Service a8c26c
.PD 0
Packit Service a8c26c
.ft 5
Packit Service a8c26c
.nf
Packit Service a8c26c
..
Packit Service a8c26c
.de EE		\" end example
Packit Service a8c26c
.fi
Packit Service a8c26c
.ft
Packit Service a8c26c
.PD
Packit Service a8c26c
.RE
Packit Service a8c26c
.PP
Packit Service a8c26c
..
Packit Service a8c26c
.TH HASH 3
Packit Service a8c26c
.SH NAME
Packit Service a8c26c
hash \- hash table support (obsolete: use \fBcdt\fP instead)
Packit Service a8c26c
.SH SYNOPSIS
Packit Service a8c26c
.L "#include <hash.h>"
Packit Service a8c26c
.SH DESCRIPTION
Packit Service a8c26c
The
Packit Service a8c26c
.I hash
Packit Service a8c26c
routines manipulate collections of dynamic, scoped hash tables.
Packit Service a8c26c
.PP
Packit Service a8c26c
A hash table provides an association between a
Packit Service a8c26c
.I key
Packit Service a8c26c
and its
Packit Service a8c26c
.IR value .
Packit Service a8c26c
A
Packit Service a8c26c
.I key
Packit Service a8c26c
is a sequence of 
Packit Service a8c26c
.L char
Packit Service a8c26c
elements and a
Packit Service a8c26c
.I value
Packit Service a8c26c
is a user supplied pointer to the value.
Packit Service a8c26c
Each hash table has a dynamic number of slots,
Packit Service a8c26c
each pointing to the head of a forward linked
Packit Service a8c26c
.IR "collision chain" .
Packit Service a8c26c
.PP
Packit Service a8c26c
Hashing occurs as follows:
Packit Service a8c26c
a
Packit Service a8c26c
.I "hash function"
Packit Service a8c26c
takes a
Packit Service a8c26c
.I key
Packit Service a8c26c
as an argument and returns a non-negative index.
Packit Service a8c26c
The index modulo the table size produces a
Packit Service a8c26c
slot that points to a
Packit Service a8c26c
.IR "collision chain" .
Packit Service a8c26c
The collision chain is sequentially searched until a match is found for
Packit Service a8c26c
.IR key .
Packit Service a8c26c
The hash tables are automatically resized as new entries are added.
Packit Service a8c26c
.PP
Packit Service a8c26c
Each hash table has one key type.
Packit Service a8c26c
The default key type is a pointer to a null-terminated string.
Packit Service a8c26c
The alternate key type is a pointer to a fixed length byte buffer,
Packit Service a8c26c
declared for a given table by the
Packit Service a8c26c
.L hashalloc()
Packit Service a8c26c
function described below.
Packit Service a8c26c
.PP
Packit Service a8c26c
Hash table information is partitioned into two parts for efficient scoping.
Packit Service a8c26c
The
Packit Service a8c26c
.I root
Packit Service a8c26c
part contains fixed information that is shared among a set of related
Packit Service a8c26c
hash tables.
Packit Service a8c26c
The remaining information is maintained on a per-table basis.
Packit Service a8c26c
.PP
Packit Service a8c26c
These basic types are defined in the header file
Packit Service a8c26c
.B hash.h
Packit Service a8c26c
(alternate names are listed in parenthesis):
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_table_t (HASHTABLE)"
Packit Service a8c26c
The per-table information.
Packit Service a8c26c
The readonly public elements are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int buckets"
Packit Service a8c26c
The number of table entries.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* name"
Packit Service a8c26c
The hash table name.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "root"
Packit Service a8c26c
The root information.
Packit Service a8c26c
The public elements are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int root->accesses"
Packit Service a8c26c
The number of lookups.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int root->collisions"
Packit Service a8c26c
The number of lookup collisions.
Packit Service a8c26c
.RE
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_table_t* scope"
Packit Service a8c26c
The table that this scope covers, 
Packit Service a8c26c
.L NULL
Packit Service a8c26c
if the table is not a scope.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int size"
Packit Service a8c26c
The current hash table size.
Packit Service a8c26c
.RE
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_bucket_t (HASHBUCKET)"
Packit Service a8c26c
A collision chain hash bucket.
Packit Service a8c26c
The public structure elements are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* hashname(Hash_bucket_t*)"
Packit Service a8c26c
Returns a pointer to the hash bucket key given the bucket pointer.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* value"
Packit Service a8c26c
The value associated with the key.
Packit Service a8c26c
.RE
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_header_t (HASHHEADER)"
Packit Service a8c26c
The hash bucket header that must be the first element in all user defined
Packit Service a8c26c
buckets.
Packit Service a8c26c
.L HASH_VALUE
Packit Service a8c26c
may not be used with user defined buckets.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_position_t (HASHPOSITION)"
Packit Service a8c26c
Stores the hash table position for
Packit Service a8c26c
.LR hashscan .
Packit Service a8c26c
The public elements are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_bucket_t* bucket"
Packit Service a8c26c
The current hash bucket pointer.
Packit Service a8c26c
.RE
Packit Service a8c26c
.PP
Packit Service a8c26c
The routines are:
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_table_t* hashalloc(Hash_table_t* ref, int op, ...)"
Packit Service a8c26c
Creates a new hash table and returns a pointer to the table.
Packit Service a8c26c
.IR malloc (3)
Packit Service a8c26c
is used to allocate space for the table.
Packit Service a8c26c
.L NULL
Packit Service a8c26c
is returned if the table cannot be created.
Packit Service a8c26c
.L ref
Packit Service a8c26c
is a pointer to a reference hash table that provides
Packit Service a8c26c
default values for unspecified information.
Packit Service a8c26c
The new hash table and
Packit Service a8c26c
.L ref
Packit Service a8c26c
share the same root information.
Packit Service a8c26c
If
Packit Service a8c26c
.L ref
Packit Service a8c26c
is
Packit Service a8c26c
.L NULL
Packit Service a8c26c
then new root information is created for the new table.
Packit Service a8c26c
The remaining arguments appear in
Packit Service a8c26c
.I op-arg
Packit Service a8c26c
pairs, followed by a final
Packit Service a8c26c
.L 0
Packit Service a8c26c
argument.
Packit Service a8c26c
The
Packit Service a8c26c
.I op-arg
Packit Service a8c26c
pairs are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_alloc, (char(*)()) alloc"
Packit Service a8c26c
.L alloc
Packit Service a8c26c
is a function that is called to process
Packit Service a8c26c
.L Hash_bucket_t
Packit Service a8c26c
.L value
Packit Service a8c26c
assignments.
Packit Service a8c26c
The single argument is
Packit Service a8c26c
.L "char* value"
Packit Service a8c26c
and the processed
Packit Service a8c26c
.L char*
Packit Service a8c26c
value is returned.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_clear, int flags"
Packit Service a8c26c
.L flags
Packit Service a8c26c
are the
Packit Service a8c26c
.L ref
Packit Service a8c26c
flags to be cleared in the new hash table.
Packit Service a8c26c
See
Packit Service a8c26c
.L HASH_set
Packit Service a8c26c
below.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_compare, (int(*)()) compare"
Packit Service a8c26c
Specifies an alternate
Packit Service a8c26c
.I key
Packit Service a8c26c
comparison function.
Packit Service a8c26c
The arguments and return value for
Packit Service a8c26c
.L compare
Packit Service a8c26c
are the same as for
Packit Service a8c26c
.IR strncmp (3)
Packit Service a8c26c
if
Packit Service a8c26c
.L HASH_namesize
Packit Service a8c26c
is specified and
Packit Service a8c26c
.IR strcmp (3)
Packit Service a8c26c
otherwise.
Packit Service a8c26c
The first argument is the 
Packit Service a8c26c
.I key
Packit Service a8c26c
from the current hash bucket on the 
Packit Service a8c26c
.I "collision chain"
Packit Service a8c26c
and the second argument is the user supplied 
Packit Service a8c26c
.IR key .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_free, (int(*)()) free"
Packit Service a8c26c
.L free
Packit Service a8c26c
is a function that is called when a hash bucket is freed.
Packit Service a8c26c
If
Packit Service a8c26c
.L HASH_BUCKET
Packit Service a8c26c
was set in
Packit Service a8c26c
.L hashalloc
Packit Service a8c26c
then the hash bucket pointer is passed, otherwise the bucket
Packit Service a8c26c
.L value 
Packit Service a8c26c
pointer is passed.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_hash, (int(*)()) hash"
Packit Service a8c26c
Specifies an alternate
Packit Service a8c26c
.I key
Packit Service a8c26c
hash function.
Packit Service a8c26c
A
Packit Service a8c26c
.L char*
Packit Service a8c26c
key argument (and, if
Packit Service a8c26c
.L HASH_namesize
Packit Service a8c26c
is specified, an
Packit Service a8c26c
.L int
Packit Service a8c26c
key size argument) is passed to
Packit Service a8c26c
.LR hash .
Packit Service a8c26c
The return value must be a non-negative
Packit Service a8c26c
.LR int .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_meanchain, int meanchain"
Packit Service a8c26c
Specifies the mean collision chain length.
Packit Service a8c26c
The hash table is automatically resized when this value is exceeded.
Packit Service a8c26c
The default mean chain length is 2.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_name, char* name"
Packit Service a8c26c
Associates
Packit Service a8c26c
.L name
Packit Service a8c26c
with the hash table.
Packit Service a8c26c
Used by
Packit Service a8c26c
.LR hashdump) .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_namesize, int namesize"
Packit Service a8c26c
The fixed size in bytes for
Packit Service a8c26c
.I keys
Packit Service a8c26c
in the table.
Packit Service a8c26c
If
Packit Service a8c26c
.L namesize
Packit Service a8c26c
is 0 (the default) then the
Packit Service a8c26c
.I keys
Packit Service a8c26c
are interpreted as null-terminated strings.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_set, int flags"
Packit Service a8c26c
Changes the hash table flags by
Packit Service a8c26c
.IR or ing
Packit Service a8c26c
in
Packit Service a8c26c
.LR flags .
Packit Service a8c26c
The flags, which may be 
Packit Service a8c26c
.IR or ed
Packit Service a8c26c
together, are:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_ALLOCATE
Packit Service a8c26c
Keys for new hash table entries are to be copied to data areas obtained from
Packit Service a8c26c
.IR malloc (3).
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_FIXED
Packit Service a8c26c
Fixes the hash table size, disabling any automatic table resizing.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_SCOPE
Packit Service a8c26c
The new hash table is a scope that is to be pushed on top of
Packit Service a8c26c
.LR ref .
Packit Service a8c26c
.L ref
Packit Service a8c26c
must be
Packit Service a8c26c
.RL non- NULL .
Packit Service a8c26c
.RE
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_va_list, va_list ap"
Packit Service a8c26c
.L ap
Packit Service a8c26c
is a
Packit Service a8c26c
.L va_list
Packit Service a8c26c
variable argument list pointer
Packit Service a8c26c
(see
Packit Service a8c26c
.LR <stdarg.h> ).
Packit Service a8c26c
.RE
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_table_t* hashfree(Hash_table_t* tab)"
Packit Service a8c26c
The hash table
Packit Service a8c26c
.L tab
Packit Service a8c26c
is freed.
Packit Service a8c26c
The scope covered table pointer is returned,
Packit Service a8c26c
.L NULL
Packit Service a8c26c
if
Packit Service a8c26c
.L tab
Packit Service a8c26c
is not a scope.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* hashlook(Hash_table_t* tab, char* name, int flags, char* value)"
Packit Service a8c26c
Operates on the key
Packit Service a8c26c
.L name
Packit Service a8c26c
in the hash table
Packit Service a8c26c
.L tab
Packit Service a8c26c
according to
Packit Service a8c26c
.L flags
Packit Service a8c26c
and 
Packit Service a8c26c
.LR value .
Packit Service a8c26c
A
Packit Service a8c26c
.L Hash_bucket_t
Packit Service a8c26c
pointer is returned unless otherwise noted.
Packit Service a8c26c
There are three basic lookup operations:
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_CREATE
Packit Service a8c26c
.L name
Packit Service a8c26c
is entered into the top level scope if it does not already exist.
Packit Service a8c26c
If
Packit Service a8c26c
.L name
Packit Service a8c26c
also appears in a lower scope and
Packit Service a8c26c
.L HASH_ALLOC
Packit Service a8c26c
is set for the table then the new bucket will share the
Packit Service a8c26c
.L name
Packit Service a8c26c
field value with the lower scope.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_DELETE
Packit Service a8c26c
.L name
Packit Service a8c26c
is deleted from the top level scope if it exists.
Packit Service a8c26c
.L NULL
Packit Service a8c26c
is returned.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L HASH_LOOKUP
Packit Service a8c26c
The scopes are searched in order from top to bottom for
Packit Service a8c26c
.L name .
Packit Service a8c26c
The bucket pointer for the first occurrence is returned.
Packit Service a8c26c
.L NULL
Packit Service a8c26c
is returned if
Packit Service a8c26c
.L name
Packit Service a8c26c
is not found.
Packit Service a8c26c
.RE
Packit Service a8c26c
The basic operations may be qualified by the following
Packit Service a8c26c
(the qualifiers are restricted to the basic operations in
Packit Service a8c26c
the parenthesized list):
Packit Service a8c26c
.RS
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_BUCKET (HASH_CREATE,HASH_DELETE,HASH_LOOKUP)"
Packit Service a8c26c
.L name
Packit Service a8c26c
is a pointer to a bucket that has already been entered into the table.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_FIXED (HASH_CREATE)"
Packit Service a8c26c
.L value
Packit Service a8c26c
is taken to be the size of the hash bucket to be created for
Packit Service a8c26c
.L name
Packit Service a8c26c
in the top level scope.
Packit Service a8c26c
The minimum bucket size is silently restricted to
Packit Service a8c26c
.LR sizeof(Hash_header_t) .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_INSTALL (HASH_CREATE)"
Packit Service a8c26c
.L name
Packit Service a8c26c
is a pointer to a bucket that has not been entered into the table.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_NOSCOPE (HASH_LOOKUP)"
Packit Service a8c26c
The lookup is restricted to the top level scope.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_OPAQUE (HASH_CREATE,HASH_DELETE)"
Packit Service a8c26c
Sets
Packit Service a8c26c
.L (HASH_CREATE)
Packit Service a8c26c
or clears
Packit Service a8c26c
.L (HASH_DELETE)
Packit Service a8c26c
the
Packit Service a8c26c
.I opaque
Packit Service a8c26c
property for the bucket.
Packit Service a8c26c
An opaque bucket is not visible in lower scopes.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_SCOPE (HASH_CREATE,HASH_DELETE)"
Packit Service a8c26c
All scopes are searched for the bucket.
Packit Service a8c26c
If the bucket is not found for
Packit Service a8c26c
.L HASH_CREATE
Packit Service a8c26c
then a new bucket is created in the lowest scope.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "HASH_VALUE (HASH_CREATE,HASH_LOOKUP)"
Packit Service a8c26c
For
Packit Service a8c26c
.L HASH_CREATE
Packit Service a8c26c
the bucket
Packit Service a8c26c
.L value
Packit Service a8c26c
field is set to
Packit Service a8c26c
.L value
Packit Service a8c26c
and the bucket
Packit Service a8c26c
.L name
Packit Service a8c26c
value is returned.
Packit Service a8c26c
For
Packit Service a8c26c
.L HASH_LOOKUP
Packit Service a8c26c
the bucket
Packit Service a8c26c
.L value 
Packit Service a8c26c
field is returned,
Packit Service a8c26c
.L NULL
Packit Service a8c26c
if the bucket is not found.
Packit Service a8c26c
.RE
Packit Service a8c26c
If
Packit Service a8c26c
.L name
Packit Service a8c26c
.L NULL
Packit Service a8c26c
then the name from the most recent
Packit Service a8c26c
.L hashlook()
Packit Service a8c26c
is used, avoiding recomputation of some internal parameters.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* hashget(Hash_table_t* tab, char* name)"
Packit Service a8c26c
Returns the value
Packit Service a8c26c
associated with the key
Packit Service a8c26c
.L name
Packit Service a8c26c
in the hash table
Packit Service a8c26c
.LR tab .
Packit Service a8c26c
If
Packit Service a8c26c
.L name
Packit Service a8c26c
is
Packit Service a8c26c
.L NULL
Packit Service a8c26c
then the name from the most recent
Packit Service a8c26c
.L hashget()
Packit Service a8c26c
is used, avoiding recomputation of some internal parameters.
Packit Service a8c26c
.L NULL
Packit Service a8c26c
is returned if
Packit Service a8c26c
.L name
Packit Service a8c26c
is not in the table.
Packit Service a8c26c
All scope covered tables are searched.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_bucket_t* hashlast(Hash_table_t* tab)"
Packit Service a8c26c
Returns a pointer to the most recent hash bucket for
Packit Service a8c26c
.LR tab .
Packit Service a8c26c
The value is set by
Packit Service a8c26c
.LR hashlook() ,
Packit Service a8c26c
.L hashscan()
Packit Service a8c26c
and
Packit Service a8c26c
.LR hashwalk() .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "char* hashput(Hash_table_t* tab, char* name, char* value)"
Packit Service a8c26c
Set the value of the key
Packit Service a8c26c
.L name
Packit Service a8c26c
to
Packit Service a8c26c
.L value
Packit Service a8c26c
in the top level scope of the hash table
Packit Service a8c26c
.LR tab .
Packit Service a8c26c
.L name
Packit Service a8c26c
is entered into the top level scope if necessary.
Packit Service a8c26c
The (possibly re-allocated) key name pointer is returned
Packit Service a8c26c
(see
Packit Service a8c26c
.LR HASH_ALLOCATE ).
Packit Service a8c26c
If
Packit Service a8c26c
.L name
Packit Service a8c26c
is 0 then the most recent lookup
Packit Service a8c26c
.L name
Packit Service a8c26c
to
Packit Service a8c26c
.L hashlook()
Packit Service a8c26c
or
Packit Service a8c26c
.L hashget()
Packit Service a8c26c
is used.
Packit Service a8c26c
This eliminates a re-hash and re-lookup of
Packit Service a8c26c
.LR name .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int hashwalk(Hash_table_t* tab, int flags, (int(*)()) walker, char* handle)"
Packit Service a8c26c
The function
Packit Service a8c26c
.L walker
Packit Service a8c26c
is applied to each entry (not covered by a scope starting at
Packit Service a8c26c
.LR tab )
Packit Service a8c26c
in the hash table
Packit Service a8c26c
.LR tab .
Packit Service a8c26c
If
Packit Service a8c26c
.L flags
Packit Service a8c26c
is 
Packit Service a8c26c
.L HASH_NOSCOPE
Packit Service a8c26c
then only the top level hash table is used, otherwise the walk includes
Packit Service a8c26c
all scope covered tables.
Packit Service a8c26c
.L walker
Packit Service a8c26c
is called with
Packit Service a8c26c
.L char*
Packit Service a8c26c
.I key
Packit Service a8c26c
as the first argument,
Packit Service a8c26c
.L char*
Packit Service a8c26c
.I value
Packit Service a8c26c
as the second argument, and
Packit Service a8c26c
.L char*
Packit Service a8c26c
.I handle
Packit Service a8c26c
as the third argument.
Packit Service a8c26c
.I handle
Packit Service a8c26c
may be
Packit Service a8c26c
.LR 0 .
Packit Service a8c26c
The walk terminates after the last entry or when
Packit Service a8c26c
.L walker
Packit Service a8c26c
returns a negative value.
Packit Service a8c26c
The return value of the last call to
Packit Service a8c26c
.L walker
Packit Service a8c26c
is returned.
Packit Service a8c26c
Only one walk may be active within a collection of scoped tables.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_position_t* hashscan(Hash_table_t* tab, int flags)"
Packit Service a8c26c
Returns a
Packit Service a8c26c
.L Hash_position_t
Packit Service a8c26c
pointer for a sequential scan on the hash table
Packit Service a8c26c
.LR tab .
Packit Service a8c26c
If
Packit Service a8c26c
.L flags
Packit Service a8c26c
is 
Packit Service a8c26c
.L HASH_NOSCOPE
Packit Service a8c26c
then only the top level hash table is used, otherwise the scan includes
Packit Service a8c26c
all scope covered tables.
Packit Service a8c26c
Only one scan may be active within a collection of scoped tables.
Packit Service a8c26c
.L hashdone()
Packit Service a8c26c
must be called to terminate the scan.
Packit Service a8c26c
.L 0
Packit Service a8c26c
is returned on error.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "Hash_bucket_t* hashnext(Hash_position_t* pos)"
Packit Service a8c26c
Returnes a pointer to the next bucket in the sequential scan set up by
Packit Service a8c26c
.L hashscan()
Packit Service a8c26c
on
Packit Service a8c26c
.LR pos .
Packit Service a8c26c
If no elements remain then
Packit Service a8c26c
.L 0
Packit Service a8c26c
is returned.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "void hashdone(Hash_position_t* pos)"
Packit Service a8c26c
Completes a scan initiated by 
Packit Service a8c26c
.L hashscan()
Packit Service a8c26c
on 
Packit Service a8c26c
.LR pos .
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int hashset(Hash_table_t* tab, int flags)"
Packit Service a8c26c
Sets the flags for the hash table
Packit Service a8c26c
.L tab
Packit Service a8c26c
by
Packit Service a8c26c
.IR or ing
Packit Service a8c26c
in
Packit Service a8c26c
.LR flags .
Packit Service a8c26c
Only
Packit Service a8c26c
.L HASH_ALLOCATE
Packit Service a8c26c
and
Packit Service a8c26c
.L HASH_FIXED
Packit Service a8c26c
may be set.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int hashclear(Hash_table_t* tab, int flags)"
Packit Service a8c26c
Clears the flags for the hash table
Packit Service a8c26c
.L tab
Packit Service a8c26c
by masking out
Packit Service a8c26c
.LR flags .
Packit Service a8c26c
Only
Packit Service a8c26c
.L HASH_ALLOCATE
Packit Service a8c26c
and
Packit Service a8c26c
.L HASH_FIXED
Packit Service a8c26c
may be cleared.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "void hashdump(Hash_table_t* tab, int flags)"
Packit Service a8c26c
Dumps hash table accounting info to standard error.
Packit Service a8c26c
If
Packit Service a8c26c
.L tab
Packit Service a8c26c
is 
Packit Service a8c26c
.L NULL
Packit Service a8c26c
then all allocated hash tables are dumped, otherwise only information on
Packit Service a8c26c
.L tab
Packit Service a8c26c
is dumped.
Packit Service a8c26c
If
Packit Service a8c26c
.L flags
Packit Service a8c26c
is 
Packit Service a8c26c
.L HASH_BUCKET
Packit Service a8c26c
then the hash bucket
Packit Service a8c26c
.I key-value
Packit Service a8c26c
pairs for each collision chain are also dumped.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "void hashsize(Hash_table_t* tab, int size)"
Packit Service a8c26c
Changes the size of the hash table
Packit Service a8c26c
.L tab
Packit Service a8c26c
to
Packit Service a8c26c
.L size
Packit Service a8c26c
where
Packit Service a8c26c
.L size
Packit Service a8c26c
must be a power of 2.
Packit Service a8c26c
Explicit calls to this routine are not necessary as hash tables
Packit Service a8c26c
are automatically resized.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int strhash(char* name)"
Packit Service a8c26c
Hashes the null terminated character string
Packit Service a8c26c
.L name
Packit Service a8c26c
using a linear congruent pseudo-random number generator algorithm
Packit Service a8c26c
and returns a non-negative
Packit Service a8c26c
.L int
Packit Service a8c26c
hash value.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "int memhash(char* buf, int siz)"
Packit Service a8c26c
Hashes the buffer
Packit Service a8c26c
.L buf
Packit Service a8c26c
of
Packit Service a8c26c
.L siz
Packit Service a8c26c
bytes using a linear congruent pseudo-random number generator algorithm
Packit Service a8c26c
and returns a non-negative
Packit Service a8c26c
.L int
Packit Service a8c26c
hash value.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "long strsum(char* name, long sum)"
Packit Service a8c26c
Returns a running 31-bit checksum of the string
Packit Service a8c26c
.L name
Packit Service a8c26c
where
Packit Service a8c26c
.L sum
Packit Service a8c26c
is
Packit Service a8c26c
.L 0
Packit Service a8c26c
on the first call and
Packit Service a8c26c
the return value from a previous
Packit Service a8c26c
.L memsum
Packit Service a8c26c
or
Packit Service a8c26c
.L strsum
Packit Service a8c26c
call otherwise.
Packit Service a8c26c
The checksum value is consistent across all implementations.
Packit Service a8c26c
.TP
Packit Service a8c26c
.L "long memsum(char* buf, int siz, long sum)"
Packit Service a8c26c
Returns a running 31-bit checksum of buffer
Packit Service a8c26c
.L buf
Packit Service a8c26c
of
Packit Service a8c26c
.L siz
Packit Service a8c26c
bytes where
Packit Service a8c26c
.L sum
Packit Service a8c26c
is
Packit Service a8c26c
.L 0
Packit Service a8c26c
on the first call and
Packit Service a8c26c
the return value from a previous
Packit Service a8c26c
.L memsum
Packit Service a8c26c
or
Packit Service a8c26c
.L strsum
Packit Service a8c26c
call otherwise.
Packit Service a8c26c
The checksum value is consistent across all implementations.
Packit Service a8c26c
.SH "SEE ALSO"
Packit Service a8c26c
sum(1)