4 int TreeNode::totalNodes = 0;
6 TreeNode::TreeNode(TreeNode *par, ModelAction *act)
8 TreeNode::totalNodes++;
13 num_threads = parent->num_threads;
14 if (act && act->get_type() == THREAD_CREATE)
19 TreeNode::~TreeNode() {
20 std::map<int, class TreeNode *, std::less< int >, MyAlloc< std::pair< const int, class TreeNode * > > >::iterator it;
22 for (it = children.begin(); it != children.end(); it++)
26 TreeNode * TreeNode::explore_child(ModelAction *act)
29 std::set<int>::iterator it;
30 thread_id_t id = act->get_tid();
31 int i = id_to_int(id);
33 if (!hasBeenExplored(id)) {
34 n = new TreeNode(this, act);
39 if ((it = backtrack.find(i)) != backtrack.end())
45 int TreeNode::setBacktrack(thread_id_t id)
47 int i = id_to_int(id);
48 if (backtrack.find(i) != backtrack.end())
54 thread_id_t TreeNode::getNextBacktrack()
56 if (backtrack.empty())
57 return THREAD_ID_T_NONE;
58 return int_to_id(*backtrack.begin());
61 TreeNode * TreeNode::getRoot()
64 return parent->getRoot();
68 bool TreeNode::is_enabled(Thread *t)
70 return id_to_int(t->get_id()) < num_threads;