summaryrefslogtreecommitdiff
path: root/src/hashm.h
diff options
context:
space:
mode:
authorFabrice <fabrice@schaub-dev.xyz>2026-02-10 10:08:28 +0100
committerFabrice <fabrice@schaub-dev.xyz>2026-02-10 10:08:28 +0100
commit80dcfa99fef3684d506ee8f96298563433b10e74 (patch)
treed33867022198bfbec69b96dac40d21d882db3475 /src/hashm.h
parentccab86b21825ebc41f0887ea633ea28906b32a8e (diff)
idk
Diffstat (limited to 'src/hashm.h')
-rw-r--r--src/hashm.h47
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