diff options
Diffstat (limited to 'nserver/src/hashmap.h')
-rw-r--r-- | nserver/src/hashmap.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/nserver/src/hashmap.h b/nserver/src/hashmap.h new file mode 100644 index 0000000..4717391 --- /dev/null +++ b/nserver/src/hashmap.h @@ -0,0 +1,39 @@ +#ifndef _lcthw_Hashmap_h +#define _lcthw_Hashmap_h + +#include <stdint.h> +#include <darray.h> + +#define DEFAULT_NUMBER_OF_BUCKETS 100 + +typedef int (*Hashmap_compare) (void *a, void *b); +typedef uint32_t(*Hashmap_hash) (void *key); + +typedef struct Hashmap { + DArray *buckets; + Hashmap_compare compare; + Hashmap_hash hash; + int salt; +} Hashmap; + + +typedef struct HashmapNode { + void *key; + void *data; + uint32_t hash; +} HashmapNode; + +typedef int (*Hashmap_traverse_cb) (HashmapNode *node); + +Hashmap *Hashmap_create(Hashmap_compare, Hashmap_hash); +void Hashmap_destroy(Hashmap *map); + +int Hashmap_set(Hashmap *map, void *key, void *data); +void *Hashmap_get(Hashmap *map, void *key); + +int Hashmap_traverse(Hashmap *map, Hashmap_traverse_cb travers_cb); + +void *Hashmap_delete(Hashmap *map, void *key); + +uint32_t fnv_hash(void *a); +#endif |