aboutsummaryrefslogtreecommitdiff
path: root/src/ds
diff options
context:
space:
mode:
authorMosder <git@mosder.eu>2026-09-12 16:46:09 +0200
committerMosder <git@mosder.eu>2026-09-12 16:46:09 +0200
commitd5af4d7bf8f654539f504ed79ca7ed2e4f85fda7 (patch)
treeb0bc9c1108df33eca5d1868e05582d71081c3208 /src/ds
parent0ef02ddf28c626916da9d5c7081a01ab707be8ce (diff)
feat: added hm_size; fix: fixed MOS_HM_LOAD_FACTOR not doing anything lol
Diffstat (limited to 'src/ds')
-rw-r--r--src/ds/hashmap.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ds/hashmap.c b/src/ds/hashmap.c
index ca9ce62..9b92302 100644
--- a/src/ds/hashmap.c
+++ b/src/ds/hashmap.c
@@ -1,4 +1,3 @@
-#include <stddef.h>
#define MOS_FORCE_PREFIXES
#include "moslib/ds/hashmap.h"
@@ -172,7 +171,7 @@ static void expand(void *p_hm, size_t entry_size, size_t key_size, size_t key_of
*(void **)p_hm = new_hm;
}
-void mos_hm_put_fn(void *p_hm, void *key, size_t entry_size, size_t key_size) {
+void mos_hm_put_fn(void *p_hm, void *key, size_t entry_size, size_t key_size, uint8_t load_factor) {
size_t key_off = (char *)key - *(char **)p_hm;
Header *hdr = hm2hdr(*(void **)p_hm);
@@ -184,7 +183,7 @@ void mos_hm_put_fn(void *p_hm, void *key, size_t entry_size, size_t key_size) {
fill(hm, i);
}
- if (hdr->size * 100 > hdr->cap * MOS_HM_LOAD_FACTOR)
+ if (hdr->size * 100 >= hdr->cap * load_factor)
expand(p_hm, entry_size, key_size, key_off);
}
@@ -243,6 +242,12 @@ void *mos_hm_next_fn(void *hm, void *curr, size_t entry_size) {
return NULL;
}
+size_t mos_hm_size(void *hm) {
+ if (!hm)
+ return 0;
+ return hm2hdr(hm)->size;
+}
+
void mos_hm_free(void *hm) {
if (!hm)
return;