tree: add is_enabled(Thread *)
authorBrian Norris <banorris@uci.edu>
Fri, 4 May 2012 06:30:28 +0000 (23:30 -0700)
committerBrian Norris <banorris@uci.edu>
Tue, 8 May 2012 17:35:33 +0000 (10:35 -0700)
Determine "enabled" by: was the thread created at this point. Checking against
num_threads is a naive way to do this...

tree.cc
tree.h

diff --git a/tree.cc b/tree.cc
index 57e0c13f69902f071cb336d3a155a15db38f4c08..c161ca838de4947fbfc1ca486aaaf0400ca1475e 100644 (file)
--- a/tree.cc
+++ b/tree.cc
@@ -7,6 +7,13 @@ TreeNode::TreeNode(TreeNode *par, ModelAction *act)
 {
        TreeNode::totalNodes++;
        this->parent = par;
+       if (!parent) {
+               num_threads = 1;
+       } else {
+               num_threads = parent->num_threads;
+               if (act && act->get_type() == THREAD_CREATE)
+                       num_threads++;
+       }
 }
 
 TreeNode::~TreeNode() {
@@ -57,3 +64,8 @@ TreeNode * TreeNode::getRoot()
                return parent->getRoot();
        return this;
 }
+
+bool TreeNode::is_enabled(Thread *t)
+{
+       return id_to_int(t->get_id()) < num_threads;
+}
diff --git a/tree.h b/tree.h
index 1752d3fe57cdd9535a32a2b18c1e9ddaedf28e30..d45fd83fad60d5fd910e74c057d4f6388c0fac83 100644 (file)
--- a/tree.h
+++ b/tree.h
@@ -25,11 +25,14 @@ public:
        int setBacktrack(thread_id_t id);
        TreeNode * getRoot();
        static int getTotalNodes() { return TreeNode::totalNodes; }
+
+       bool is_enabled(Thread *t);
 private:
        TreeNode *parent;
        std::map<int, class TreeNode *> children;
        std::set<int> backtrack;
        static int totalNodes;
+       int num_threads;
 };
 
 #endif /* __TREE_H__ */