#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 */
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;
/** 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;
/** 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
ClockVector *cv;
};
-typedef std::list<class ModelAction *> action_list_t;
+typedef std::list<ModelAction *> action_list_t;
#endif /* __ACTION_H__ */