]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: ebtree/scope: add a function to find next node from a parent
authorWilly Tarreau <w@1wt.eu>
Mon, 13 Nov 2017 18:13:06 +0000 (19:13 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 13 Nov 2017 18:34:09 +0000 (19:34 +0100)
Several parts of the code need to access the next node but don't start
from a node but a tagged parent link. Even eb32sc_next() does this.
Let's provide this function to prepare a cleanup for the lookup function.

ebtree/eb32sctree.h

index 8a8dcf10210f0b071c74b05def44e8ba6fa641ca..be469baa66bbcb80dbf8e6b591b296768694a412 100644 (file)
@@ -108,22 +108,25 @@ static inline struct eb32sc_node *eb32sc_walk_down_left(eb_troot_t *start, unsig
        }
 }
 
-/* Return next node in the tree, or NULL if none */
-static inline struct eb32sc_node *eb32sc_next(struct eb32sc_node *eb32, unsigned long scope)
+/* Return next node in the tree, starting with tagged parent <start>, or NULL if none */
+static inline struct eb32sc_node *eb32sc_next_with_parent(eb_troot_t *start, unsigned long scope)
 {
-       struct eb_node *node = &eb32->node;
-       eb_troot_t *t = node->leaf_p;
-
-       while (eb_gettag(t) != EB_LEFT)
+       while (eb_gettag(start) != EB_LEFT)
                /* Walking up from right branch, so we cannot be below root */
-               t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p;
+               start = (eb_root_to_node(eb_untag(start, EB_RGHT)))->node_p;
 
        /* Note that <t> cannot be NULL at this stage */
-       t = (eb_untag(t, EB_LEFT))->b[EB_RGHT];
-       if (eb_clrtag(t) == NULL)
+       start = (eb_untag(start, EB_LEFT))->b[EB_RGHT];
+       if (eb_clrtag(start) == NULL)
                return NULL;
 
-       return eb32sc_walk_down_left(t, scope);
+       return eb32sc_walk_down_left(start, scope);
+}
+
+/* Return next node in the tree, or NULL if none */
+static inline struct eb32sc_node *eb32sc_next(struct eb32sc_node *eb32, unsigned long scope)
+{
+       return eb32sc_next_with_parent(eb32->node.leaf_p, scope);
 }
 
 /* Return leftmost node in the tree, or NULL if none */