summaryrefslogtreecommitdiff
path: root/map.h
diff options
context:
space:
mode:
authorCarson Fleming <[email protected]>2026-02-05 23:21:44 -0500
committerCarson Fleming <[email protected]>2026-02-05 23:22:00 -0500
commit7784a8cefb54a3c60207557f1c684d2b8e04cf0c (patch)
tree041f2044ad5c0747ae1c555b7430abf1d6685082 /map.h
parent76ffe6a90b284ab54a6f926ce0f1a299d9fac61b (diff)
downloadsafec-7784a8cefb54a3c60207557f1c684d2b8e04cf0c.tar.gz
add sets which are faster and better + fix bug
Diffstat (limited to 'map.h')
-rw-r--r--map.h45
1 files changed, 42 insertions, 3 deletions
diff --git a/map.h b/map.h
index 1ec17cb..6519d0d 100644
--- a/map.h
+++ b/map.h
@@ -5,7 +5,8 @@ size_t hash_bytes(const void* start, size_t size);
typedef size_t (*hash_func_t)(const void* key);
typedef bool (*eq_func_t)(const void* key1, const void* key2);
-typedef void (*foreach_func_t)(void* key, void* val, void* data);
+typedef void (*map_foreach_func_t)(void* key, void* val, void* data);
+typedef void (*set_foreach_func_t)(void* key, void* data);
struct __map_entry {
void* key;
@@ -43,7 +44,45 @@ void* map_get_or_default(const map_t* map, const void* key, void* default_val);
void* map_compute_if_absent(map_t* map, void* key, void* default_val);
void map_put(map_t* map, void* key, void* val);
void* map_remove(map_t* map, const void* key);
-void map_foreach_readonly(map_t* map, foreach_func_t foreach_func, void* data);
-void map_foreach_readwrite(map_t* map, foreach_func_t foreach_func, void* data);
+void map_foreach_readonly(
+ map_t* map,
+ map_foreach_func_t foreach_func,
+ void* data);
+void map_foreach_readwrite(
+ map_t* map,
+ map_foreach_func_t foreach_func,
+ void* data);
+
+typedef struct {
+ hash_func_t hash_func;
+ eq_func_t eq_func;
+ double load_limit;
+
+ size_t size;
+
+ size_t __num_buckets;
+ void** __buckets;
+} set_t;
+
+void set_init(
+ set_t* set,
+ hash_func_t hash_func,
+ eq_func_t eq_func,
+ double load_limit);
+void set_init_capacity(
+ set_t* set,
+ hash_func_t hash_func,
+ eq_func_t eq_func,
+ double load_limit,
+ size_t capacity);
+void set_destroy(set_t* set);
+
+bool set_contains(const set_t* set, const void* key);
+void* set_get(const set_t* set, const void* key);
+void* set_get_or_default(const set_t* set, const void* key, void* default_key);
+void* set_add(set_t* set, void* key);
+void set_put(set_t* set, void* key);
+void* set_remove(set_t* set, const void* key);
+void set_foreach(set_t* set, set_foreach_func_t foreach_func, void* data);
#endif