using std::memory_order_acquire;
using std::memory_order_release;
using std::memory_order_acq_rel;
using std::memory_order_acquire;
using std::memory_order_release;
using std::memory_order_acq_rel;
THREAD_YIELD, /**< A thread yield action */
THREAD_JOIN, /**< A thread join action */
THREAD_FINISH, /**< A thread completion action */
THREAD_YIELD, /**< A thread yield action */
THREAD_JOIN, /**< A thread join action */
THREAD_FINISH, /**< A thread completion action */
ATOMIC_UNINIT, /**< Represents an uninitialized atomic */
ATOMIC_READ, /**< An atomic read action */
ATOMIC_WRITE, /**< An atomic write action */
ATOMIC_UNINIT, /**< Represents an uninitialized atomic */
ATOMIC_READ, /**< An atomic read action */
ATOMIC_WRITE, /**< An atomic write action */
ATOMIC_UNLOCK, /**< An unlock action */
ATOMIC_NOTIFY_ONE, /**< A notify_one action */
ATOMIC_NOTIFY_ALL, /**< A notify all action */
ATOMIC_UNLOCK, /**< An unlock action */
ATOMIC_NOTIFY_ONE, /**< A notify_one action */
ATOMIC_NOTIFY_ALL, /**< A notify all action */
thread_id_t get_tid() const { return tid; }
action_type get_type() const { return type; }
memory_order get_mo() const { return order; }
thread_id_t get_tid() const { return tid; }
action_type get_type() const { return type; }
memory_order get_mo() const { return order; }
void * get_location() const { return location; }
modelclock_t get_seq_number() const { return seq_number; }
uint64_t get_value() const { return value; }
void * get_location() const { return location; }
modelclock_t get_seq_number() const { return seq_number; }
uint64_t get_value() const { return value; }
uint64_t get_return_value() const;
const ModelAction * get_reads_from() const { return reads_from; }
Promise * get_reads_from_promise() const { return reads_from_promise; }
uint64_t get_return_value() const;
const ModelAction * get_reads_from() const { return reads_from; }
Promise * get_reads_from_promise() const { return reads_from_promise; }
bool may_read_from(const ModelAction *write) const;
bool may_read_from(const Promise *promise) const;
MEMALLOC
bool may_read_from(const ModelAction *write) const;
bool may_read_from(const Promise *promise) const;
MEMALLOC
/** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
action_type type;
/** @brief The memory order for this operation. */
memory_order order;
/** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
action_type type;
/** @brief The memory order for this operation. */
memory_order order;