diff options
Diffstat (limited to 'include/std/hash_map.h')
-rw-r--r-- | include/std/hash_map.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/include/std/hash_map.h b/include/std/hash_map.h new file mode 100644 index 0000000..f3a3a6d --- /dev/null +++ b/include/std/hash_map.h @@ -0,0 +1,24 @@ +#ifndef TSL_HASH_MAP_H +#define TSL_HASH_MAP_H + +#include "string_view.h" +#include <stdint.h> + +typedef uint64_t (*TslHashFunc)(const void *data, size_t size); + +/* TODO: Optimize small hash map by using the members of the struct instead of allocating on heap */ +typedef struct { + void *buckets_data; /* value=TslHashMapNode<void*>, data=|hash(uint64_t) + key_size(size_t) + key_data(...) data_size(size_t) + data_data(...)| */ + size_t buckets_size; + size_t buckets_capacity; + size_t num_items; +} TslHashMap; + +void tsl_hash_map_init(TslHashMap *self); +void tsl_hash_map_deinit(TslHashMap *self); + +int tsl_hash_map_insert(TslHashMap *self, const TslStringView *key, const void *data, size_t size, TslHashFunc hash_func); +/* Get a reference to the value by key @key */ +void* tsl_hash_map_get(TslHashMap *self, const TslStringView *key, TslHashFunc hash_func); + +#endif /* TSL_HASH_MAP_H */ |