]> git.kaiwu.me - nginx.git/commitdiff
Core: introduced ngx_rbtree_next().
authorMaxim Dounin <mdounin@mdounin.ru>
Tue, 7 Mar 2017 15:51:13 +0000 (18:51 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Tue, 7 Mar 2017 15:51:13 +0000 (18:51 +0300)
src/core/ngx_rbtree.c
src/core/ngx_rbtree.h

index 331254c6f949af125935aaa69f0566bff55a5a22..969d549c857790d7538dd1f0b5385d18f73ee80f 100644 (file)
@@ -378,3 +378,32 @@ ngx_rbtree_right_rotate(ngx_rbtree_node_t **root, ngx_rbtree_node_t *sentinel,
     temp->right = node;
     node->parent = temp;
 }
+
+
+ngx_rbtree_node_t *
+ngx_rbtree_next(ngx_rbtree_t *tree, ngx_rbtree_node_t *node)
+{
+    ngx_rbtree_node_t  *root, *sentinel, *parent;
+
+    sentinel = tree->sentinel;
+
+    if (node->right != sentinel) {
+        return ngx_rbtree_min(node->right, sentinel);
+    }
+
+    root = tree->root;
+
+    for ( ;; ) {
+        parent = node->parent;
+
+        if (node == root) {
+            return NULL;
+        }
+
+        if (node == parent->left) {
+            return parent;
+        }
+
+        node = parent;
+    }
+}
index 1d33e3f6e066570b28ec955a509ebf38b8a075ef..97f0e3e1183b336cc8b9d4089af8507a42ceef51 100644 (file)
@@ -54,6 +54,8 @@ void ngx_rbtree_insert_value(ngx_rbtree_node_t *root, ngx_rbtree_node_t *node,
     ngx_rbtree_node_t *sentinel);
 void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
     ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
+ngx_rbtree_node_t *ngx_rbtree_next(ngx_rbtree_t *tree,
+    ngx_rbtree_node_t *node);
 
 
 #define ngx_rbt_red(node)               ((node)->color = 1)