action: support ATOMIC_INIT
[model-checker.git] / action.cc
index 6627714e1089b2ad16c85cc7ef4abe43d77b6f95..d5131f0b03dfc9c7c9b86c901ca4215fbfac8245 100644 (file)
--- a/action.cc
+++ b/action.cc
@@ -33,7 +33,7 @@ bool ModelAction::is_read() const
 
 bool ModelAction::is_write() const
 {
-       return type == ATOMIC_WRITE;
+       return type == ATOMIC_WRITE || type == ATOMIC_INIT;
 }
 
 bool ModelAction::is_rmw() const
@@ -41,6 +41,11 @@ bool ModelAction::is_rmw() const
        return type == ATOMIC_RMW;
 }
 
+bool ModelAction::is_initialization() const
+{
+       return type == ATOMIC_INIT;
+}
+
 bool ModelAction::is_acquire() const
 {
        switch (order) {
@@ -115,7 +120,7 @@ bool ModelAction::is_synchronizing(const ModelAction *act) const
        return false;
 }
 
-void ModelAction::create_cv(ModelAction *parent)
+void ModelAction::create_cv(const ModelAction *parent)
 {
        ASSERT(cv == NULL);
 
@@ -125,7 +130,7 @@ void ModelAction::create_cv(ModelAction *parent)
                cv = new ClockVector(NULL, this);
 }
 
-void ModelAction::read_from(ModelAction *act)
+void ModelAction::read_from(const ModelAction *act)
 {
        ASSERT(cv);
        if (act->is_release() && this->is_acquire())
@@ -139,7 +144,7 @@ void ModelAction::read_from(ModelAction *act)
  * @return true if this action's thread has synchronized with act's thread
  * since the execution of act, false otherwise.
  */
-bool ModelAction::happens_before(ModelAction *act)
+bool ModelAction::happens_before(const ModelAction *act) const
 {
        return act->cv->synchronized_since(this);
 }
@@ -166,6 +171,9 @@ void ModelAction::print(void) const
        case ATOMIC_RMW:
                type_str = "atomic rmw";
                break;
+       case ATOMIC_INIT:
+               type_str = "init atomic";
+               break;
        default:
                type_str = "unknown type";
        }