diff options
| author | Fabrice <fabrice@schaub-dev.xyz> | 2026-02-10 10:08:28 +0100 |
|---|---|---|
| committer | Fabrice <fabrice@schaub-dev.xyz> | 2026-02-10 10:08:28 +0100 |
| commit | 80dcfa99fef3684d506ee8f96298563433b10e74 (patch) | |
| tree | d33867022198bfbec69b96dac40d21d882db3475 /src | |
| parent | ccab86b21825ebc41f0887ea633ea28906b32a8e (diff) | |
idk
Diffstat (limited to 'src')
| -rw-r--r-- | src/hashm.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/hashm.h b/src/hashm.h new file mode 100644 index 0000000..67bb3e0 --- /dev/null +++ b/src/hashm.h @@ -0,0 +1,47 @@ +#pragma once + +#include "hashmap.h" +#include "utils.h" +#include <cstring> +#include <mimalloc.h> + +#define WAYC_HASHMAP_SEED 0 +#define WAYC_HASHMAP_CAP 16 + +template <typename T> struct hashmap_s { + struct hashmap *inner; +}; + +template <typename T> +static inline i32 wayc_hashmap_hash(const void *item, uint64_t seed0, + uint64_t seed1) { + wayc_notnull(item); + return hashmap_xxhash3(item, sizeof(T), seed0, seed1); +} + +template <typename T> +static inline bool wayc_hashmap_compare(const void *a, const void *b, + void *udata) { + (void)udata; + + wayc_notnull(a); + wayc_notnull(b); + return memcmp(a, b, sizeof(T)) == 0; +} + +template <typename T> inline hashmap_s<T> wayc_hashmap_init(void) { + struct hashmap *map = hashmap_new_with_allocator( + mi_malloc, mi_realloc, mi_free, sizeof(T), WAYC_HASHMAP_CAP, + WAYC_HASHMAP_SEED, WAYC_HASHMAP_SEED, wayc_hashmap_hash<T>, + wayc_hashmap_compare<T>, nullptr, nullptr); + + hashmap_s<T> result; + result.inner = map; + + return result; +} + +template <typename T> inline void wayc_hashmap_deinit(hashmap_s<T> *map) { + hashmap_free(map->inner); + map->inner = nullptr; +}
\ No newline at end of file |
