diff options
| author | 0scar <qgt268@alumni.ku.dk> | 2021-09-24 13:01:09 +0000 |
|---|---|---|
| committer | 0scar <qgt268@alumni.ku.dk> | 2021-09-24 13:01:09 +0000 |
| commit | 73ae3c781b6aa00cc8abed801b7ac4324074e04e (patch) | |
| tree | bc3f45177016110a4b126cc84e8228a036bb3554 | |
| parent | 7a768145aae6078bd3247d2dad3ad11864537484 (diff) | |
Move node functionality macros up
Also fix freeing non-allocated items
| -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); |
