Mercurial > libjeffpc
changeset 639:3907bebf3a4f
tree: wrap node extra field getting & setting
This will later allow us to compact the node to 3*sizeof(void *).
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon, 31 Dec 2018 15:26:40 -0500 |
parents | 900a50ed37e8 |
children | 0737d17f4959 |
files | include/jeffpc/tree_private.h rbtree.c tree.c tree_impl.h |
diffstat | 4 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/include/jeffpc/tree_private.h Mon Dec 31 15:23:47 2018 -0500 +++ b/include/jeffpc/tree_private.h Mon Dec 31 15:26:40 2018 -0500 @@ -30,7 +30,7 @@ struct tree_node { struct tree_node *children[2]; struct tree_node *_parent; - bool extra; + bool _extra; }; struct tree_tree {
--- a/rbtree.c Mon Dec 31 15:23:47 2018 -0500 +++ b/rbtree.c Mon Dec 31 15:26:40 2018 -0500 @@ -30,13 +30,13 @@ static inline void set_red(struct tree_node *node, bool red) { if (node) - node->extra = red; + set_extra(node, red); } static inline bool is_red(struct tree_node *node) { /* NB: NULLs are black by definition */ - return node && node->extra; + return node && get_extra(node); } void rb_create(struct rb_tree *tree,
--- a/tree.c Mon Dec 31 15:23:47 2018 -0500 +++ b/tree.c Mon Dec 31 15:26:40 2018 -0500 @@ -230,9 +230,9 @@ } /* swap the extra data */ - tmp = x->extra; - x->extra = y->extra; - y->extra = tmp; + tmp = get_extra(x); + set_extra(x, get_extra(y)); + set_extra(y, tmp); } static inline void __promote_node_child(struct tree_tree *tree,
--- a/tree_impl.h Mon Dec 31 15:23:47 2018 -0500 +++ b/tree_impl.h Mon Dec 31 15:26:40 2018 -0500 @@ -51,6 +51,16 @@ node->_parent = parent; } +static inline bool get_extra(struct tree_node *node) +{ + return node->_extra; +} + +static inline void set_extra(struct tree_node *node, bool extra) +{ + node->_extra = extra; +} + static inline enum tree_dir which_dir(struct tree_node *parent, struct tree_node *tgt) {