hash API
========

The hash API is a collection of simple hash table functions. Users are expected
to implement their own hashing.

Data Structures
---------------

`struct hash_table`::

	The hash table structure. The `array` member points to the hash table
	entries. The `size` member counts the total number of valid and invalid
	entries in the table. The `nr` member keeps track of the number of
	valid entries.

`struct hash_table_entry`::

	An opaque structure representing an entry in the hash table. The `hash`
	member is the entry's hash key and the `ptr` member is the entry's
	value.

Functions
---------

`init_hash`::

	Initialize the hash table.

`free_hash`::

	Release memory associated with the hash table.

`insert_hash`::

	Insert a pointer into the hash table. If an entry with that hash
	already exists, a pointer to the existing entry's value is returned.
	Otherwise NULL is returned.  This allows callers to implement
	chaining, etc.

`lookup_hash`::

	Lookup an entry in the hash table. If an entry with that hash exists
	the entry's value is returned. Otherwise NULL is returned.

`for_each_hash`::

	Call a function for each entry in the hash table. The function is
	expected to take the entry's value as its only argument and return an
	int. If the function returns a negative int the loop is aborted
	immediately.  Otherwise, the return value is accumulated and the sum
	returned upon completion of the loop.
