From 27718f093689dbd3decd7021eaa97327f578c8f3 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 7 Mar 2019 22:19:57 +0100 Subject: Add hash map --- include/std/hash_map.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 include/std/hash_map.h (limited to 'include/std/hash_map.h') diff --git a/include/std/hash_map.h b/include/std/hash_map.h new file mode 100644 index 0000000..c36ecc4 --- /dev/null +++ b/include/std/hash_map.h @@ -0,0 +1,38 @@ +#ifndef AMALGAM_HASH_MAP_H +#define AMALGAM_HASH_MAP_H + +#include "defs.h" +#include "misc.h" +#include "types.h" +#include "buffer.h" +#include "buffer_view.h" + +typedef struct HashMap HashMap; + +typedef int(*HashMapCompare)(const void *a, const void *b); +typedef usize(*HashMapHash)(const u8 *data, usize size); + +struct HashMap { + ScopedAllocator *allocator; /* borrowed */ + Buffer/*HashMapBucket*/ buckets; + usize type_size; + usize num_elements; + HashMapCompare compare_func; + HashMapHash hash_func; +}; + +CHECK_RESULT int hash_map_init(HashMap *self, ScopedAllocator *allocator, usize type_size, HashMapCompare compare_func, HashMapHash hash_func); +/* +Not thread-safe. +Expected @value size to be @self->type_size. +*/ +CHECK_RESULT int hash_map_insert(HashMap *self, BufferView key, void *value); +/* +Thread-safe unless @hash_map_insert is used in another thread at the same time. +Expected @value size to be @self->type_size. +*/ +CHECK_RESULT bool hash_map_get(HashMap *self, BufferView key, void *value); + +int hash_compare_string(const void *a, const void *b); + +#endif -- cgit v1.2.3