summaryrefslogtreecommitdiff
path: root/src/btree_naive.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2021-09-24 13:01:09 +0000
committer0scar <qgt268@alumni.ku.dk>2021-09-24 13:01:09 +0000
commit73ae3c781b6aa00cc8abed801b7ac4324074e04e (patch)
treebc3f45177016110a4b126cc84e8228a036bb3554 /src/btree_naive.c
parent7a768145aae6078bd3247d2dad3ad11864537484 (diff)
Move node functionality macros up
Also fix freeing non-allocated items
Diffstat (limited to 'src/btree_naive.c')
-rw-r--r--src/btree_naive.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/btree_naive.c b/src/btree_naive.c
index aaa9828..207475e 100644
--- a/src/btree_naive.c
+++ b/src/btree_naive.c
@@ -30,6 +30,19 @@ struct btree {
int (*cmp)(const void *a, const void *b);
};
+/* Node functionality */
+#define \
+node_leaf(node) (node->children == NULL)
+
+#define \
+node_maxdegree(t) (2 * t - 1)
+
+#define \
+node_mindegree(t) (t - 1)
+
+#define \
+node_full(degree, t) (t->n == 2 * degree - 1)
+
/* Node memory */
/* `node_new` allocates a new leaf node, children should be added and allocated
@@ -86,24 +99,12 @@ void node_free(struct node *node, size_t elem_size, void (*dealloc)(void*)) {
node_free((node->children)[i], elem_size, dealloc);
}
- dealloc(node->items);
+ if (!node_leaf(node))
+ dealloc(node->items);
free(node);
}
-/* Node functionality */
-#define \
-node_leaf(node) (node->children == NULL)
-
-#define \
-node_maxdegree(t) (2 * t - 1)
-
-#define \
-node_mindegree(t) (t - 1)
-
-#define \
-node_full(degree, t) (t->n == 2 * degree - 1)
-
/* Split a child of `nonfull` of index `i` */
void node_tree_split_child(const size_t t, const size_t elem_size, struct node *nonfull, size_t i) {
struct node *z = node_new(t, elem_size);