Merge branch 'master' into brian
[model-checker.git] / action.h
index 4504fd8c089c71eaa60e10d25ecbbba61c26ec5f..30c8a35b80ed7681ce74bc5388c0667b9b4e4fec 100644 (file)
--- a/action.h
+++ b/action.h
@@ -19,6 +19,7 @@
  * ModelAction */
 typedef enum action_type {
        THREAD_CREATE,        /**< A thread creation action */
+       THREAD_START,         /**< First action in each thread */
        THREAD_YIELD,         /**< A thread yield action */
        THREAD_JOIN,          /**< A thread join action */
        ATOMIC_READ,          /**< An atomic read action */
@@ -47,6 +48,7 @@ public:
        void * get_location() const { return location; }
        modelclock_t get_seq_number() const { return seq_number; }
        int get_value() const { return value; }
+       const ModelAction * get_reads_from() const { return reads_from; }
 
        Node * get_node() const { return node; }
        void set_node(Node *n) { node = n; }
@@ -89,15 +91,18 @@ private:
 
        /** The thread id that performed this action. */
        thread_id_t tid;
-       
+
        /** The value read or written (if RMW, then the value written). This
         * should probably be something longer. */
        int value;
 
+       /** The action that this action reads from. Only valid for reads */
+       const ModelAction *reads_from;
+
        /** A back reference to a Node in NodeStack, if this ModelAction is
         * saved on the NodeStack. */
        Node *node;
-       
+
        modelclock_t seq_number;
 
        /** The clock vector stored with this action; only needed if this