malloc: add exception info to function header
[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 }
17
18 TreeNode * TreeNode::exploreChild(tree_t id)
19 {
20         TreeNode *n;
21         std::set<tree_t >::iterator it;
22
23         if (!hasBeenExplored(id)) {
24                 n = new TreeNode(this);
25                 children[id] = n;
26         } else {
27                 n = children[id];
28         }
29         if ((it = backtrack.find(id)) != backtrack.end())
30                 backtrack.erase(it);
31
32         return n;
33 }
34
35 int TreeNode::setBacktrack(tree_t id)
36 {
37         if (backtrack.find(id) != backtrack.end())
38                 return 1;
39         backtrack.insert(id);
40         return 0;
41 }
42
43 tree_t TreeNode::getNextBacktrack()
44 {
45         if (backtrack.empty())
46                 return TREE_T_NONE;
47         return *backtrack.begin();
48 }
49
50 TreeNode * TreeNode::getRoot()
51 {
52         if (parent)
53                 return parent->getRoot();
54         return this;
55 }