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 65afd7c89c1071e1abadf304cbf461a2c9923ec4..87b3ee531fbe2d10a7b52f229f23e7ea90196e9d 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 a73ce44034fba9bc44d76ebe27f8912c21132c83..74ac245f3b3b00331a3328482d7c21c47bdc7cdb 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;