Alexandre Julliard : rbtree.h: Add a wine_rb_prev iteration helper function.

Alexandre Julliard julliard at winehq.org
Thu Sep 7 15:44:57 CDT 2017


Module: wine
Branch: master
Commit: c1d46149e0bdaf59aa2251fc6b9c692b8c2f52e3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c1d46149e0bdaf59aa2251fc6b9c692b8c2f52e3

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Sep  7 19:31:26 2017 +0200

rbtree.h: Add a wine_rb_prev iteration helper function.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 include/wine/rbtree.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/include/wine/rbtree.h b/include/wine/rbtree.h
index 65d9a90..bb4edf5 100644
--- a/include/wine/rbtree.h
+++ b/include/wine/rbtree.h
@@ -101,6 +101,13 @@ static inline struct wine_rb_entry *wine_rb_head(struct wine_rb_entry *iter)
     return iter;
 }
 
+static inline struct wine_rb_entry *wine_rb_tail(struct wine_rb_entry *iter)
+{
+    if (!iter) return NULL;
+    while (iter->right) iter = iter->right;
+    return iter;
+}
+
 static inline struct wine_rb_entry *wine_rb_next(struct wine_rb_entry *iter)
 {
     if (iter->right) return wine_rb_head(iter->right);
@@ -108,6 +115,13 @@ static inline struct wine_rb_entry *wine_rb_next(struct wine_rb_entry *iter)
     return iter->parent;
 }
 
+static inline struct wine_rb_entry *wine_rb_prev(struct wine_rb_entry *iter)
+{
+    if (iter->left) return wine_rb_tail(iter->left);
+    while (iter->parent && iter->parent->left == iter) iter = iter->parent;
+    return iter->parent;
+}
+
 static inline struct wine_rb_entry *wine_rb_postorder_head(struct wine_rb_entry *iter)
 {
     if (!iter) return NULL;




More information about the wine-cvs mailing list