From 9c129fa5ca61da479507d2598951f3fdacc1e143 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 5 Sep 2011 15:56:02 +0000 Subject: Separate tree functions into a separate header. Add tree iterator functions. git-svn-id: http://svn.drobilla.net/zix/trunk@2 df6676b4-ccc9-40e5-b5d6-7c4628a128e3 --- src/tree.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'src') diff --git a/src/tree.c b/src/tree.c index 5d09680..d319f1d 100644 --- a/src/tree.c +++ b/src/tree.c @@ -722,3 +722,56 @@ zix_tree_get_data(ZixTreeIter ti) { return ti->data; } + +ZIX_API +ZixTreeIter +zix_tree_begin(ZixTree* t) +{ + if (!t->root) { + return NULL; + } + + ZixTreeNode* n = t->root; + while (n->left) { + n = n->left; + } + return n; +} + +ZIX_API +ZixTreeIter +zix_tree_end(ZixTree* t) +{ + return NULL; +} + +ZIX_API +bool +zix_tree_iter_is_end(ZixTreeIter i) +{ + return !i; +} + +ZIX_API +ZixTreeIter +zix_tree_iter_next(ZixTreeIter i) +{ + if (!i) { + return NULL; + } + + if (i->right) { + i = i->right; + while (i->left) { + i = i->left; + } + } else { + while (i->parent && i->parent->right == i) { // i is a right child + i = i->parent; + } + + i = i->parent; + } + + return i; +} -- cgit v1.2.1