diff options
| author | Carson Fleming <[email protected]> | 2026-02-05 23:21:44 -0500 |
|---|---|---|
| committer | Carson Fleming <[email protected]> | 2026-02-05 23:22:00 -0500 |
| commit | 7784a8cefb54a3c60207557f1c684d2b8e04cf0c (patch) | |
| tree | 041f2044ad5c0747ae1c555b7430abf1d6685082 /map.h | |
| parent | 76ffe6a90b284ab54a6f926ce0f1a299d9fac61b (diff) | |
| download | safec-7784a8cefb54a3c60207557f1c684d2b8e04cf0c.tar.gz | |
add sets which are faster and better + fix bug
Diffstat (limited to 'map.h')
| -rw-r--r-- | map.h | 45 |
1 files changed, 42 insertions, 3 deletions
@@ -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 |
