From 9802644a3c6f7d4de289b425eb5ac76a07a0f523 Mon Sep 17 00:00:00 2001 From: 0scar Date: Thu, 16 Sep 2021 20:55:43 +0200 Subject: Add template for btrees --- src/btree_naive.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/btree_naive.c (limited to 'src/btree_naive.c') 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 +#include + +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) {} -- cgit v1.3