hashmap.h: compare function has access to a data field
[gitweb.git] / hashmap.h
index de6022a3a916605d8e3330b23259110dd3522c7d..aaf09e047e3f7a6907718392ca4f303c04d9c74a 100644 (file)
--- a/hashmap.h
+++ b/hashmap.h
@@ -32,12 +32,14 @@ struct hashmap_entry {
        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;
 };
@@ -50,8 +52,10 @@ struct hashmap_iter {
 
 /* 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 */