nodestack: add 'may_read_from' set
authorBrian Norris <banorris@uci.edu>
Thu, 21 Jun 2012 07:54:01 +0000 (00:54 -0700)
committerBrian Norris <banorris@uci.edu>
Thu, 21 Jun 2012 08:02:58 +0000 (01:02 -0700)
Each Node (at least, each Node that is a 'read') will be associated with a
may_read_from set - the set of all possible ModelActions to read from. For now,
this interface handles only actions that exist in the past. It won't properly
retain information from future actions.

nodestack.cc
nodestack.h

index 65afd7c..87b3ee5 100644 (file)
@@ -9,7 +9,8 @@ Node::Node(ModelAction *act, int nthreads)
        num_threads(nthreads),
        explored_children(num_threads),
        backtrack(num_threads),
-       numBacktracks(0)
+       numBacktracks(0),
+       may_read_from()
 {
 }
 
@@ -99,6 +100,15 @@ bool Node::is_enabled(Thread *t)
        return id_to_int(t->get_id()) < num_threads;
 }
 
+/**
+ * Add an action to the may_read_from set.
+ * @param act is the action to add
+ */
+void Node::add_read_from(ModelAction *act)
+{
+       may_read_from.insert(act);
+}
+
 void Node::explore(thread_id_t tid)
 {
        int i = id_to_int(tid);
index a73ce44..74ac245 100644 (file)
@@ -7,12 +7,15 @@
 
 #include <list>
 #include <vector>
+#include <set>
 #include <cstddef>
 #include "threads.h"
 #include "mymemory.h"
 
 class ModelAction;
 
+typedef std::set< ModelAction *, std::less< ModelAction *>, MyAlloc< ModelAction * > > action_set_t;
+
 class Node {
 public:
        Node(ModelAction *act = NULL, int nthreads = 1);
@@ -28,6 +31,8 @@ public:
        bool is_enabled(Thread *t);
        ModelAction * get_action() { return action; }
 
+       void add_read_from(ModelAction *act);
+
        void print();
 
        MEMALLOC
@@ -39,6 +44,10 @@ private:
        std::vector< bool, MyAlloc<bool> > explored_children;
        std::vector< bool, MyAlloc<bool> > backtrack;
        int numBacktracks;
+
+       /** The set of ModelActions that this the action at this Node may read
+        *  from. Only meaningful if this Node represents a 'read' action. */
+       action_set_t may_read_from;
 };
 
 typedef std::list<class Node *, MyAlloc< class Node * > > node_list_t;