From 108018e3e7326dabbbef568ab08bc5cebf5d427b Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 20 Jan 2020 23:00:39 +0100 Subject: Add arithmetic, implement hash map --- include/std/buffer.h | 4 +++- include/std/hash_map.h | 24 ++++++++++++++++++++++++ include/std/string_view.h | 11 +++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 include/std/hash_map.h create mode 100644 include/std/string_view.h (limited to 'include/std') diff --git a/include/std/buffer.h b/include/std/buffer.h index dea7dbd..db6474e 100644 --- a/include/std/buffer.h +++ b/include/std/buffer.h @@ -16,6 +16,8 @@ typedef struct { void tsl_buffer_init(TslBuffer *self); void tsl_buffer_deinit(TslBuffer *self); -int tsl_buffer_append(TslBuffer *self, void *data, size_t size); +int tsl_buffer_append(TslBuffer *self, const void *data, size_t size); +void* tsl_buffer_begin(TslBuffer *self); +void* tsl_buffer_end(TslBuffer *self); #endif /* TSL_BUFFER_H */ 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 + +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, 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 */ diff --git a/include/std/string_view.h b/include/std/string_view.h new file mode 100644 index 0000000..4f9552a --- /dev/null +++ b/include/std/string_view.h @@ -0,0 +1,11 @@ +#ifndef TSL_STRING_VIEW_H +#define TSL_STRING_VIEW_H + +#include + +typedef struct { + const char *data; + size_t size; +} TslStringView; + +#endif /* TSL_STRING_VIEW_H */ -- cgit v1.2.3