diff options
| -rw-r--r-- | src/btree_naive.c | 29 |
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); |
