unsigned int hash;
};
-typedef int (*hashmap_cmp_fn)(const void *entry, const void *entry_or_key,
- const void *keydata);
+typedef int (*hashmap_cmp_fn)(const void *hashmap_cmp_fn_data,
+ const void *entry, const void *entry_or_key,
+ const void *keydata);
struct hashmap {
struct hashmap_entry **table;
hashmap_cmp_fn cmpfn;
+ const void *cmpfn_data;
unsigned int size, tablesize, grow_at, shrink_at;
unsigned disallow_rehash : 1;
};
/* hashmap functions */
-extern void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function,
- size_t initial_size);
+extern void hashmap_init(struct hashmap *map,
+ hashmap_cmp_fn equals_function,
+ const void *equals_function_data,
+ size_t initial_size);
extern void hashmap_free(struct hashmap *map, int free_entries);
/* hashmap_entry functions */