From 7d144d9053e54c5c1df04d383e96aac4ee9064bb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Jun 2024 08:46:26 -0300 Subject: src/set.c: v0 for set_add() --- src/set.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/set.c b/src/set.c index 978115e..e2baaed 100644 --- a/src/set.c +++ b/src/set.c @@ -8,6 +8,7 @@ #include #include +#include #include #include "hash.h" @@ -85,3 +86,26 @@ set_free(const struct Set **const s) { vector_free(&table); freeit((void *)s); } + +int +set_add(const struct Set *const s, const void *const value) { + int rc = -1; + + uint8_t hash_bytes[HASH_OUTPUT_LENGTH]; + hash(s->value_size, value, hash_bytes); + + const uint64_t hash_value = endiannessbs_from_le64(hash_bytes); + const size_t idx = hash_value % vector_capacity(s->table); + + const struct Tree *slot; + assert(vector_nth(s->table, idx, (void *)&slot) == 0); + + if (tree_add(slot, value)) { + logerr("tree_add()"); + goto out; + } + + rc = 0; +out: + return rc; +} -- cgit v1.2.3