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