+bool ModelAction::is_mutex_op() const
+{
+ return type == ATOMIC_LOCK || type == ATOMIC_TRYLOCK || type == ATOMIC_UNLOCK || type == ATOMIC_WAIT || type == ATOMIC_NOTIFY_ONE || type == ATOMIC_NOTIFY_ALL;
+}
+
+bool ModelAction::is_lock() const
+{
+ return type == ATOMIC_LOCK;
+}
+
+bool ModelAction::is_wait() const {
+ return type == ATOMIC_WAIT;
+}
+
+bool ModelAction::is_notify() const {
+ return type==ATOMIC_NOTIFY_ONE || type==ATOMIC_NOTIFY_ALL;
+}
+
+bool ModelAction::is_notify_one() const {
+ return type==ATOMIC_NOTIFY_ONE;
+}
+
+bool ModelAction::is_unlock() const
+{
+ return type == ATOMIC_UNLOCK;
+}
+
+bool ModelAction::is_trylock() const
+{
+ return type == ATOMIC_TRYLOCK;
+}
+
+bool ModelAction::is_success_lock() const
+{
+ return type == ATOMIC_LOCK || (type == ATOMIC_TRYLOCK && value == VALUE_TRYSUCCESS);
+}
+
+bool ModelAction::is_failed_trylock() const
+{
+ return (type == ATOMIC_TRYLOCK && value == VALUE_TRYFAILED);
+}
+
+bool ModelAction::is_read() const
+{
+ return type == ATOMIC_READ || type == ATOMIC_RMWR || type == ATOMIC_RMW;
+}
+
+bool ModelAction::is_write() const
+{
+ return type == ATOMIC_WRITE || type == ATOMIC_RMW || type == ATOMIC_INIT;
+}
+
+bool ModelAction::could_be_write() const
+{
+ return is_write() || is_rmwr();
+}
+
+bool ModelAction::is_rmwr() const
+{
+ return type == ATOMIC_RMWR;
+}
+
+bool ModelAction::is_rmw() const
+{
+ return type == ATOMIC_RMW;
+}
+
+bool ModelAction::is_rmwc() const
+{
+ return type == ATOMIC_RMWC;
+}
+
+bool ModelAction::is_fence() const
+{
+ return type == ATOMIC_FENCE;
+}
+
+bool ModelAction::is_initialization() const
+{
+ return type == ATOMIC_INIT;
+}
+
+bool ModelAction::is_relaxed() const
+{
+ return order == std::memory_order_relaxed;
+}
+
+bool ModelAction::is_acquire() const