summaryrefslogtreecommitdiff
path: root/src/btree_naive.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2021-09-16 18:55:43 +0000
committer0scar <qgt268@alumni.ku.dk>2021-09-16 18:55:43 +0000
commit9802644a3c6f7d4de289b425eb5ac76a07a0f523 (patch)
tree361ad24ffbe96586ea230c73f066f978e7f80e12 /src/btree_naive.c
parent04783746a8160b2bdacbc5eda065a56293fc2248 (diff)
Add template for btrees
Diffstat (limited to 'src/btree_naive.c')
-rw-r--r--src/btree_naive.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/btree_naive.c b/src/btree_naive.c
new file mode 100644
index 0000000..bc881f1
--- /dev/null
+++ b/src/btree_naive.c
@@ -0,0 +1,58 @@
+#include "btree.h"
+
+#include <stdlib.h>
+#include <stdbool.h>
+
+typedef unsigned char byte;
+
+struct node {
+ size_t n; /* number of items */
+ bool leaf;
+ byte *items;
+ struct node *children;
+};
+
+struct btree {
+ /* Memory stuffs */
+ void *(*alloc)(size_t);
+ void (*dealloc)(void*);
+
+ /* Size stuffs */
+ size_t elem_size;
+ size_t degree;
+
+ /* comparison */
+ int (*cmp)(const void *a, const void *b);
+};
+
+struct btree *btree_new(size_t elem_size,
+ size_t t,
+ int(*cmp)(const void *a, const void *b)) {
+ return btree_new_with_allocator(elem_size, t, cmp, malloc, free);
+}
+
+struct btree *btree_new_with_allocator(size_t elem_size,
+ size_t t,
+ int(*cmp)(const void *a, const void *b),
+ void *(*alloc)(size_t),
+ void (*dealloc)(void*)) {
+ struct btree *new_tree = malloc(sizeof(struct btree));
+
+ new_tree->alloc = alloc;
+ new_tree->dealloc = dealloc;
+
+ new_tree->elem_size = elem_size;
+ new_tree->degree = t;
+
+ new_tree->cmp = cmp;
+}
+
+void btree_free(struct btree *btree) {
+ /*btree->dealloc(btree->root);*/
+ free(btree);
+ btree = NULL;
+}
+
+void *btree_search(struct btree *btree, void *elem) {}
+void *btree_insert(struct btree *btree, void *elem) {}
+void *btree_delete(struct btree *btree, void *elem) {}