From 73ae3c781b6aa00cc8abed801b7ac4324074e04e Mon Sep 17 00:00:00 2001 From: 0scar Date: Fri, 24 Sep 2021 15:01:09 +0200 Subject: Move node functionality macros up Also fix freeing non-allocated items --- src/btree_naive.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'src/btree_naive.c') 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); -- cgit v1.3