tree: remove tree_t, map thread ids via int, not thread_id_t
[model-checker.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<int, class TreeNode *>::iterator it;
13
14         for (it = children.begin(); it != children.end(); it++)
15                 delete it->second;
16 }
17
18 TreeNode * TreeNode::exploreChild(thread_id_t id)
19 {
20         TreeNode *n;
21         std::set<int>::iterator it;
22         int i = id_to_int(id);
23
24         if (!hasBeenExplored(id)) {
25                 n = new TreeNode(this);
26                 children[i] = n;
27         } else {
28                 n = children[i];
29         }
30         if ((it = backtrack.find(i)) != backtrack.end())
31                 backtrack.erase(it);
32
33         return n;
34 }
35
36 int TreeNode::setBacktrack(thread_id_t id)
37 {
38         int i = id_to_int(id);
39         if (backtrack.find(i) != backtrack.end())
40                 return 1;
41         backtrack.insert(i);
42         return 0;
43 }
44
45 thread_id_t TreeNode::getNextBacktrack()
46 {
47         if (backtrack.empty())
48                 return THREAD_ID_T_NONE;
49         return int_to_id(*backtrack.begin());
50 }
51
52 TreeNode * TreeNode::getRoot()
53 {
54         if (parent)
55                 return parent->getRoot();
56         return this;
57 }