Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MC: move the reversible_race logic to the Transition class
[simgrid.git] / src / mc / transition / TransitionActor.cpp
index 70608f1..16a17a3 100644 (file)
@@ -47,6 +47,19 @@ bool ActorJoinTransition::depends(const Transition* other) const
   return false;
 }
 
+bool ActorJoinTransition::reversible_race(const Transition* other) const
+{
+  switch (type_) {
+    case Type::ACTOR_JOIN:
+      // ActorJoin races with another event iff its target `T` is the same as
+      // the actor executing the other transition. Clearly, then, we could not join
+      // on that actor `T` and then run a transition by `T`, so no race is reversible
+      return false;
+    default:
+      xbt_die("Unexpected transition type %s", to_c_str(type_));
+  }
+}
+
 ActorSleepTransition::ActorSleepTransition(aid_t issuer, int times_considered, std::stringstream& stream)
     : Transition(Type::ACTOR_SLEEP, issuer, times_considered)
 {
@@ -66,4 +79,14 @@ bool ActorSleepTransition::depends(const Transition* other) const
   return false;
 }
 
+bool ActorSleepTransition::reversible_race(const Transition* other) const
+{
+  switch (type_) {
+    case Type::ACTOR_SLEEP:
+      return true; // Always enabled
+    default:
+      xbt_die("Unexpected transition type %s", to_c_str(type_));
+  }
+}
+
 } // namespace simgrid::mc