5 #include <stddef.h> /* for size_t type */
10 TAILQ_ENTRY(hnode
) hn_next
;
13 typedef struct htable
{
14 size_t ht_size
; /* size must be a power of 2 */
16 unsigned int ht_factor
;
17 unsigned int ht_limit
;
18 unsigned int (*ht_hashf
)(const void *key
);
19 int (*ht_cmpf
)(const void *arg1
, const void *arg2
);
20 void (*ht_printf
)(const void *key
, const void *data
);
21 TAILQ_HEAD(htablehead
, hnode
) *ht_table
;
24 typedef struct htablehead hhead_t
;
38 /* Function prototypes */
39 htret_t
htable_init(htable_t
*htable
, size_t size
, unsigned int factor
,
40 unsigned int (*myhashf
)(const void *key
),
41 int (*mycmpf
)(const void *arg1
, const void *arg2
),
42 void (*myprintf
)(const void *key
, const void *data
));
43 void htable_free(htable_t
*htable
);
44 htret_t
htable_free_obj(htable_t
*htable
, void *key
, htfree_t htfree
);
45 void htable_free_all_obj(htable_t
*htable
, htfree_t htfree
);
46 htret_t
htable_grow(htable_t
*htable
);
47 htret_t
htable_insert(htable_t
*htable
, void *key
, void *data
);
48 htret_t
htable_remove(htable_t
*htable
, const void *key
);
49 void *htable_search(const htable_t
*htable
, const void *key
);
50 void htable_print(const htable_t
*htable
);