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),
        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;
 }
 
        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);
 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 <list>
 #include <vector>
+#include <set>
 #include <cstddef>
 #include "threads.h"
 #include "mymemory.h"
 
 class ModelAction;
 
 #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);
 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; }
 
        bool is_enabled(Thread *t);
        ModelAction * get_action() { return action; }
 
+       void add_read_from(ModelAction *act);
+
        void print();
 
        MEMALLOC
        void print();
 
        MEMALLOC
@@ -39,6 +44,10 @@ private:
        std::vector< bool, MyAlloc<bool> > explored_children;
        std::vector< bool, MyAlloc<bool> > backtrack;
        int numBacktracks;
        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;
 };
 
 typedef std::list<class Node *, MyAlloc< class Node * > > node_list_t;