X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=action.h;h=30c8a35b80ed7681ce74bc5388c0667b9b4e4fec;hb=b7907204c39d4f4d006c62e779f2c0bc20028dba;hp=4903f37b7720c4116943f5c542bcfa06ae92c8a8;hpb=1667e1f8017bd3f4bf5b1ef5712e3156577f99a2;p=c11tester.git diff --git a/action.h b/action.h index 4903f37b..30c8a35b 100644 --- a/action.h +++ b/action.h @@ -15,13 +15,18 @@ #define VALUE_NONE -1 +/** @brief Represents an action type, identifying one of several types of + * ModelAction */ typedef enum action_type { - THREAD_CREATE, - THREAD_YIELD, - THREAD_JOIN, - ATOMIC_READ, - ATOMIC_WRITE, - ATOMIC_RMW + 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 */ + ATOMIC_WRITE, /**< An atomic write action */ + ATOMIC_RMW, /**< An atomic read-modify-write action */ + ATOMIC_INIT /**< Initialization of an atomic object (e.g., + * atomic_init()) */ } action_type_t; /* Forward declaration */ @@ -43,14 +48,15 @@ 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; } - void set_value(int val) { value = val; } bool is_read() const; bool is_write() const; bool is_rmw() const; + bool is_initialization() const; bool is_acquire() const; bool is_release() const; bool is_seqcst() const; @@ -85,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