My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
rbtree_iterator.c
Go to the documentation of this file.
1 #include <3ds/util/rbtree.h>
2 #include "rbtree_internal.h"
3 
4 static inline rbtree_node_t*
5 do_iterate(const rbtree_node_t *node,
6  int next)
7 {
8  rbtree_node_t *it = (rbtree_node_t*)node;
9 
10  if(it->child[next] != NULL)
11  {
12  it = it->child[next];
13  while(it->child[!next] != NULL)
14  it = it->child[!next];
15  }
16  else
17  {
18  rbtree_node_t *parent = get_parent(node);
19  while(parent != NULL && it == parent->child[next])
20  {
21  it = parent;
22  parent = get_parent(it);
23  }
24 
25  it = parent;
26  }
27 
28  return it;
29 }
30 
33 {
34  return do_iterate(node, RIGHT);
35 }
36 
39 {
40  return do_iterate(node, LEFT);
41 }
rbtree_node_t * rbtree_node_prev(const rbtree_node_t *node)
rbtree_node_t * node
Definition: rbtree.h:45
#define RIGHT
rbtree_node_t * rbtree_node_next(const rbtree_node_t *node)
#define LEFT
rbtree_node_t * child[2]
Definition: rbtree.h:18