4223
|
1 #ifndef HASH_H_
|
|
2 #define HASH_H_
|
|
3
|
|
4 #include <stddef.h>
|
|
5
|
|
6 typedef struct {
|
|
7 size_t entries, size, newsize;
|
|
8 size_t brk;
|
|
9 size_t seed;
|
|
10 size_t iter;
|
|
11 struct h_node *iterptr;
|
|
12 struct h_node **table;
|
|
13 size_t (*hash)(const void *, size_t);
|
|
14 int (*cmp)(const void *, const void *);
|
|
15 void (*delk)(void *);
|
|
16 void (*delv)(void *);
|
|
17 } Hash;
|
|
18
|
|
19 enum {
|
|
20 H_OK,
|
|
21 H_EXIST,
|
|
22 H_NOENT
|
|
23 };
|
|
24
|
|
25 void h_init(
|
|
26 Hash *,
|
|
27 size_t (*)(const void *, size_t),
|
|
28 int (*)(const void *, const void *),
|
|
29 void (*)(void *),
|
|
30 void (*)(void *)
|
|
31 );
|
|
32 void h_end(Hash *);
|
|
33 int h_get(Hash *, const void *, void **);
|
|
34 int h_del(Hash *, const void *);
|
|
35 #if 0
|
|
36 void h_push(Hash *, void *, void *);
|
|
37 #endif
|
|
38 int h_put(Hash *, void *, void *, int);
|
|
39 void h_reset(Hash *);
|
|
40 int h_nextkv(Hash *, void **, void **);
|
|
41
|
|
42 #if 0
|
|
43 size_t h_entries(const Hash *);
|
|
44 #define h_entries(h) ((h)->entries + 0)
|
|
45 #endif
|
|
46
|
|
47 #endif /* HASH_H_ */
|