tree: add class TreeNode
[c11tester.git] / tree.cc
1 #include "tree.h"
2
3 int TreeNode::totalNodes = 0;
4
5 TreeNode::TreeNode(TreeNode *par)
6 {
7         TreeNode::totalNodes++;
8         this->parent = par;
9 }
10
11 TreeNode::~TreeNode() {
12         std::map<tree_t, class TreeNode *>::iterator it;
13
14         for (it = children.begin(); it != children.end(); it++)
15                 delete it->second;
16         delete &children;
17 }
18
19 TreeNode *TreeNode::exploreChild(tree_t id)
20 {
21         TreeNode *n;
22         std::set<tree_t >::iterator it;
23
24         if (!hasBeenExplored(id)) {
25                 n = new TreeNode(this);
26                 children[id] = n;
27         } else {
28                 n = children[id];
29         }
30         if ((it = backtrack.find(id)) != backtrack.end())
31                 backtrack.erase(it);
32
33         return n;
34 }
35
36 int TreeNode::setBacktrack(tree_t id)
37 {
38         if (backtrack.find(id) == backtrack.end())
39                 return 1;
40         backtrack.insert(id);
41         return 0;
42 }
43
44 tree_t TreeNode::getNextBacktrack()
45 {
46         if (backtrack.empty())
47                 return NULL;
48         return *backtrack.begin();
49 }
50
51 TreeNode *TreeNode::getRoot()
52 {
53         if (parent)
54                 return parent->getRoot();
55         return this;
56 }