/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright © 2010, Zed A. Shaw. * Copyright © 2020 rsiddharth */ #ifndef _lcthw_Hashmap_h #define _lcthw_Hashmap_h #include #include #define DEFAULT_NUMBER_OF_BUCKETS 100 #define DEFAULT_NUMBER_OF_KEYS 50 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); int Hashmap_set_fucked(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); DArray *Hashmap_keys(Hashmap *map); uint32_t fnv_hash(void *a); #endif