1226035Sgabor/* $FreeBSD$ */ 2226035Sgabor 3226035Sgabor#ifndef HASHTABLE_H 4226035Sgabor#define HASHTABLE_H 1 5226035Sgabor 6226035Sgabor#include <sys/types.h> 7226035Sgabor 8226035Sgabor#define HASH_OK 0 9226035Sgabor#define HASH_UPDATED 1 10226035Sgabor#define HASH_FAIL 2 11226035Sgabor#define HASH_FULL 3 12226035Sgabor#define HASH_NOTFOUND 4 13226035Sgabor 14226035Sgabor#define HASHSTEP(x,c) (((x << 5) + x) + (c)) 15226035Sgabor 16226035Sgabortypedef struct { 17226035Sgabor void *key; 18226035Sgabor void *value; 19226035Sgabor} hashtable_entry; 20226035Sgabor 21226035Sgabortypedef struct { 22226035Sgabor size_t key_size; 23226035Sgabor size_t table_size; 24226035Sgabor size_t usage; 25226035Sgabor size_t value_size; 26226035Sgabor hashtable_entry **entries; 27226035Sgabor} hashtable; 28226035Sgabor 29226035Sgaborvoid hashtable_free(hashtable *); 30226035Sgaborint hashtable_get(hashtable *, const void *, void *); 31226035Sgaborhashtable *hashtable_init(size_t, size_t, size_t); 32226035Sgaborint hashtable_put(hashtable *, const void *, const void *); 33226035Sgaborint hashtable_remove(hashtable *, const void *); 34226035Sgabor 35226035Sgabor#endif /* HASHTABLE.H */ 36