taskrambler  0.1.9
Web server and task management solution.
walk.c
Go to the documentation of this file.
1 /**
2  * \file
3  *
4  * \author Georg Hopp
5  *
6  * \copyright
7  * Copyright © 2012 Georg Hopp
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 #include "tree.h"
24 
25 void
26 treeWalk(Tree this, TreeAction action)
27 {
28  Tree previous = this;
29  Tree node = this;
30  int depth = 1;
31 
32  while (NULL != node) {
33  if (previous == TREE_RIGHT(node)) {
34  previous = node;
35  node = node->parent;
36  depth--;
37  continue;
38  }
39 
40  if (NULL == TREE_LEFT(node) || previous == TREE_LEFT(node)) {
41  action(node->data, depth);
42  previous = node;
43 
44  if (NULL != TREE_RIGHT(node)) {
45  node = TREE_RIGHT(node);
46  depth++;
47  } else {
48  node = TREE_PARENT(node);
49  depth--;
50  }
51  } else {
52  previous = node;
53  node = TREE_LEFT(node);
54  depth++;
55  }
56  }
57 }
58 
59 // vim: set ts=4 sw=4:
#define TREE_RIGHT(node)
Definition: tree.h:28
#define TREE_PARENT(node)
Definition: tree.h:30
void treeWalk(Tree this, TreeAction action)
Definition: walk.c:26
#define TREE_LEFT(node)
Definition: tree.h:29
void(* TreeAction)(const void *, const int)
Definition: tree.h:128