remove unused #define
[c11tester.git] / tree.cc
1 #include "tree.h"
2 #include "action.h"
3
4 int TreeNode::totalNodes = 0;
5
6 TreeNode::TreeNode(TreeNode *par, ModelAction *act)
7 {
8         TreeNode::totalNodes++;
9         this->parent = par;
10         if (!parent) {
11                 num_threads = 1;
12         } else {
13                 num_threads = parent->num_threads;
14                 if (act && act->get_type() == THREAD_CREATE)
15                         num_threads++;
16         }
17 }
18
19 TreeNode::~TreeNode() {
20         std::map<int, class TreeNode *, std::less< int >, MyAlloc< std::pair< const int, class TreeNode * > > >::iterator it;
21
22         for (it = children.begin(); it != children.end(); it++)
23                 delete it->second;
24 }
25
26 TreeNode * TreeNode::explore_child(ModelAction *act)
27 {
28         TreeNode *n;
29         std::set<int, std::less< int >, MyAlloc< int > >::iterator it;
30         thread_id_t id = act->get_tid();
31         int i = id_to_int(id);
32
33         if (!hasBeenExplored(id)) {
34                 n = new TreeNode(this, act);
35                 children[i] = n;
36         } else {
37                 n = children[i];
38         }
39         if ((it = backtrack.find(i)) != backtrack.end())
40                 backtrack.erase(it);
41
42         return n;
43 }
44
45 int TreeNode::setBacktrack(thread_id_t id)
46 {
47         int i = id_to_int(id);
48         if (backtrack.find(i) != backtrack.end())
49                 return 1;
50         backtrack.insert(i);
51         return 0;
52 }
53
54 thread_id_t TreeNode::getNextBacktrack()
55 {
56         if (backtrack.empty())
57                 return THREAD_ID_T_NONE;
58         return int_to_id(*backtrack.begin());
59 }
60
61 TreeNode * TreeNode::getRoot()
62 {
63         if (parent)
64                 return parent->getRoot();
65         return this;
66 }
67
68 bool TreeNode::is_enabled(Thread *t)
69 {
70         return id_to_int(t->get_id()) < num_threads;
71 }