summaryrefslogtreecommitdiff
path: root/kernel/hashmap/hashmap.h
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-10-30 22:12:14 +0100
committerAnton Kling <anton@kling.gg>2023-10-31 00:18:38 +0100
commit8a9208612eec8ddae4c418485d848ecfa0613699 (patch)
tree2f4b29200c2f0c19ae52f45bdb9b38a41b356e30 /kernel/hashmap/hashmap.h
parentca76600acc8bf7a02346efa5bd8f17072210ec01 (diff)
Meta: Move kernel and userland to their own folders.
This is to allow both the kernel and the userland to share certain header files and to make the folder structure a bit more clear.
Diffstat (limited to 'kernel/hashmap/hashmap.h')
-rw-r--r--kernel/hashmap/hashmap.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/kernel/hashmap/hashmap.h b/kernel/hashmap/hashmap.h
new file mode 100644
index 0000000..40f146a
--- /dev/null
+++ b/kernel/hashmap/hashmap.h
@@ -0,0 +1,39 @@
+//
+// Copyright (C) 2022 by Anton Kling <anton@kling.gg>
+//
+// SPDX-License-Identifier: BSD-2-Clause
+//
+#ifndef HASHMAP_H
+#define HASHMAP_H
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct LinkedList {
+ const char *key;
+ int key_allocated;
+ void *value;
+ void (*upon_deletion)(const char *, void *);
+ struct LinkedList *next;
+} LinkedList;
+
+typedef struct HashMap {
+ LinkedList **entries;
+ size_t size;
+ size_t num_entries;
+ uint32_t (*hash_function)(const uint8_t *data, size_t len);
+} HashMap;
+
+HashMap *hashmap_create(size_t size);
+void hashmap_free(HashMap *m);
+
+// hashmap_add_entry()
+// -------------------
+// This function adds a entry to the hashmap. The "key" passed to the
+// hashmap will be allocated by default unless (do_not_allocate_key) is
+// set to 1.
+int hashmap_add_entry(HashMap *m, const char *key, void *value,
+ void (*upon_deletion)(const char *, void *),
+ int do_not_allocate_key);
+void *hashmap_get_entry(HashMap *m, const char *key);
+int hashmap_delete_entry(HashMap *m, const char *key);
+#endif