50 typedef unsigned int (*cfuhash_function_t)(
const void *key,
size_t length);
53 typedef void (*cfuhash_free_fn_t)(
void *data);
58 typedef int (*cfuhash_remove_fn_t)(
void *key,
size_t key_size,
void *data,
size_t data_size,
65 typedef int (*cfuhash_foreach_fn_t)(
void *key,
size_t key_size,
void *data,
size_t data_size,
69 cfuhash_table_t * cfuhash_new(
void);
74 cfuhash_table_t * cfuhash_new_with_initial_size(
size_t size);
79 cfuhash_table_t * cfuhash_new_with_flags(
unsigned int flags);
82 cfuhash_table_t * cfuhash_new_with_free_fn(cfuhash_free_fn_t ff);
85 int cfuhash_copy(cfuhash_table_t *src, cfuhash_table_t *dst);
90 cfuhash_table_t * cfuhash_merge(cfuhash_table_t *ht1, cfuhash_table_t *ht2,
97 int cfuhash_set_hash_function(cfuhash_table_t *ht, cfuhash_function_t hf);
104 int cfuhash_set_thresholds(cfuhash_table_t *ht,
float low,
float high);
111 int cfuhash_set_free_function(cfuhash_table_t * ht, cfuhash_free_fn_t ff);
114 unsigned int cfuhash_get_flags(cfuhash_table_t *ht);
117 unsigned int cfuhash_set_flag(cfuhash_table_t *ht,
unsigned int flag);
120 unsigned int cfuhash_clear_flag(cfuhash_table_t *ht,
unsigned int new_flag);
126 int cfuhash_get_data(cfuhash_table_t *ht,
const void *key,
size_t key_size,
127 void **data,
size_t *data_size);
130 int cfuhash_exists_data(cfuhash_table_t *ht,
const void *key,
size_t key_size);
139 int cfuhash_put_data(cfuhash_table_t *ht,
const void *key,
size_t key_size,
void *data,
140 size_t data_size,
void **r);
143 void cfuhash_clear(cfuhash_table_t *ht);
148 void * cfuhash_delete_data(cfuhash_table_t *ht,
const void *key,
size_t key_size);
156 void **cfuhash_keys_data(cfuhash_table_t *ht,
size_t *num_keys,
size_t **key_sizes,
164 int cfuhash_each_data(cfuhash_table_t *ht,
void **key,
size_t *key_size,
void **data,
172 int cfuhash_next_data(cfuhash_table_t *ht,
void **key,
size_t *key_size,
void **data,
180 size_t cfuhash_foreach_remove(cfuhash_table_t *ht, cfuhash_remove_fn_t r_fn,
181 cfuhash_free_fn_t ff,
void *arg);
189 size_t cfuhash_foreach(cfuhash_table_t *ht, cfuhash_foreach_fn_t fe_fn,
void *arg);
196 int cfuhash_destroy(cfuhash_table_t *ht);
198 int cfuhash_destroy_with_free_fn(cfuhash_table_t *ht, cfuhash_free_fn_t ff);
203 int cfuhash_rehash(cfuhash_table_t *ht);
206 size_t cfuhash_num_entries(cfuhash_table_t *ht);
209 size_t cfuhash_num_buckets(cfuhash_table_t *ht);
214 size_t cfuhash_num_buckets_used(cfuhash_table_t *ht);
220 char * cfuhash_bencode_strings(cfuhash_table_t *ht);
228 int cfuhash_lock(cfuhash_table_t *ht);
234 int cfuhash_unlock(cfuhash_table_t *ht);
239 int cfuhash_pretty_print(cfuhash_table_t *ht, FILE *fp);
247 void * cfuhash_get(cfuhash_table_t *ht,
const char *key);
248 int cfuhash_exists(cfuhash_table_t *ht,
const char *key);
249 void * cfuhash_put(cfuhash_table_t *ht,
const char *key,
void *data);
250 void * cfuhash_delete(cfuhash_table_t *ht,
const char *key);
251 int cfuhash_each(cfuhash_table_t *ht,
char **key,
void **data);
252 int cfuhash_next(cfuhash_table_t *ht,
char **key,
void **data);
253 void **cfuhash_keys(cfuhash_table_t *ht,
size_t *num_keys,
int fast);
257 #define CFUHASH_NOCOPY_KEYS 1
258 #define CFUHASH_NO_LOCKING (1 << 1)
259 #define CFUHASH_FROZEN (1 << 2)
260 #define CFUHASH_FROZEN_UNTIL_GROWS (1 << 3)
261 #define CFUHASH_FREE_DATA (1 << 4)
262 #define CFUHASH_IGNORE_CASE (1 << 5)