1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#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;
} 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, or NULL if it doesn't exist */
void* tsl_hash_map_get(TslHashMap *self, const TslStringView *key, TslHashFunc hash_func);
/* Get a reference to the value by key @key, or insert a new value for the key with a size of @size */
int tsl_hash_map_get_or_create(TslHashMap *self, const TslStringView *key, size_t size, TslHashFunc hash_func, void **output);
#endif /* TSL_HASH_MAP_H */
|