24typedef uint64_t (*cu_HashMap_HashFn)(
const void *key,
size_t key_size);
25typedef bool (*cu_HashMap_EqualsFn)(
26 const void *a,
const void *b,
size_t key_size);
45 CU_HASHMAP_ERROR_NONE = 0,
47 CU_HASHMAP_ERROR_INVALID_LAYOUT,
48 CU_HASHMAP_ERROR_INVALID,
68 Size_Optional initial_capacity, cu_HashMap_HashFn_Optional hash_fn,
69 cu_HashMap_EqualsFn_Optional equals_fn,
cu_State state);
86 const cu_HashMap *map,
size_t *index,
void **key,
void **value);
void cu_HashMap_destroy(cu_HashMap *map)
Definition hashmap.c:153
Ptr_Optional cu_HashMap_get(const cu_HashMap *map, const void *key)
Retrieve the value stored for key.
Definition hashmap.c:224
bool cu_HashMap_iter(const cu_HashMap *map, size_t *index, void **key, void **value)
Iterate over all stored pairs.
Definition hashmap.c:238
cu_HashMap_Error
Definition hashmap.h:44
cu_HashMap_Error_Optional cu_HashMap_insert(cu_HashMap *map, void *key, void *value)
Insert a new key-value pair.
Definition hashmap.c:173
cu_HashMap_Result cu_HashMap_create(cu_Allocator allocator, cu_Layout key_layout, cu_Layout value_layout, Size_Optional initial_capacity, cu_HashMap_HashFn_Optional hash_fn, cu_HashMap_EqualsFn_Optional equals_fn, cu_State state)
Create a new hashmap.
Definition hashmap.c:109
#define CU_OPTIONAL_DECL(NAME, T)
Definition optional.h:25
#define CU_RESULT_DECL(NAME, T, E)
Definition result.h:23
Definition allocator.h:24
void * key
Definition hashmap.h:20
void * value
Definition hashmap.h:21
bool used
Definition hashmap.h:17
bool deleted
Definition hashmap.h:18
uint64_t hash
Definition hashmap.h:19
cu_HashMap_HashFn hash_fn
Definition hashmap.h:38
cu_HashMap_EqualsFn equals_fn
Definition hashmap.h:39
size_t capacity
Definition hashmap.h:33
uint32_t seed
Definition hashmap.h:40
size_t length
Definition hashmap.h:34
cu_Layout value_layout
Definition hashmap.h:36
cu_Layout key_layout
Definition hashmap.h:35
cu_Allocator allocator
Definition hashmap.h:37
cu_HashMap_Bucket * buckets
Definition hashmap.h:32