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)
 {