diff options
Diffstat (limited to 'include/inn/hashtab.h')
-rw-r--r-- | include/inn/hashtab.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/include/inn/hashtab.h b/include/inn/hashtab.h new file mode 100644 index 0000000..8d9f31e --- /dev/null +++ b/include/inn/hashtab.h @@ -0,0 +1,60 @@ +/* $Id: hashtab.h 5944 2002-12-08 02:33:08Z rra $ +** +** Generic hash table interface. +** +** Written by Russ Allbery <rra@stanford.edu> +** This work is hereby placed in the public domain by its author. +** +** A hash table takes a hash function that acts on keys, a function to +** extract the key from a data item stored in a hash, a function that takes +** a key and a data item and returns true if the key matches, and a +** function to be called on any data item being deleted from the hash. +** +** hash_create creates a hash and hash_free frees all the space allocated +** by one. hash_insert, hash_replace, and hash_delete modify it, and +** hash_lookup extracts values. hash_traverse can be used to walk the +** hash, and hash_count returns the number of elements currently stored in +** the hash. hash_searches, hash_collisions, and hash_expansions extract +** performance and debugging statistics. +*/ + +#ifndef INN_HASHTAB_H +#define INN_HASHTAB_H 1 + +#include <inn/defines.h> + +BEGIN_DECLS + +/* The layout of this struct is entirely internal to the implementation. */ +struct hash; + +/* Data types for function pointers used by the hash table interface. */ +typedef unsigned long (*hash_func)(const void *); +typedef const void * (*hash_key_func)(const void *); +typedef bool (*hash_equal_func)(const void *, const void *); +typedef void (*hash_delete_func)(void *); +typedef void (*hash_traverse_func)(void *, void *); + +/* Generic hash table interface. */ +struct hash * hash_create(size_t, hash_func, hash_key_func, + hash_equal_func, hash_delete_func); +void hash_free(struct hash *); +void * hash_lookup(struct hash *, const void *key); +bool hash_insert(struct hash *, const void *key, void *datum); +bool hash_replace(struct hash *, const void *key, void *datum); +bool hash_delete(struct hash *, const void *key); +void hash_traverse(struct hash *, hash_traverse_func, void *); +unsigned long hash_count(struct hash *); +unsigned long hash_searches(struct hash *); +unsigned long hash_collisions(struct hash *); +unsigned long hash_expansions(struct hash *); + +/* Hash functions available for callers. */ +unsigned long hash_string(const void *); + +/* Functions useful for constructing new hashes. */ +unsigned long hash_lookup2(const char *, size_t, unsigned long partial); + +END_DECLS + +#endif /* INN_HASHTAB_H */ |