Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
better name
[simgrid.git] / src / mc / api / TransitionComm.cpp
index 259accc44ae7adb94e833319c07758123a366691..ff2b352597fd8e91fb08bd7eae3585120f9d26db 100644 (file)
@@ -177,12 +177,13 @@ std::string CommSendTransition::to_string(bool verbose = false) const
   return res;
 }
 TestAnyTransition::TestAnyTransition(aid_t issuer, int times_considered, std::stringstream& stream)
+    : Transition(Type::TESTANY, issuer, times_considered)
 {
   int size;
   stream >> size;
   for (int i = 0; i < size; i++) {
 
-    Transition* t = recv_transition(issuer, 0, stream);
+    Transition* t = deserialize_transition(issuer, 0, stream);
     transitions_.push_back(t);
   }
 }
@@ -235,11 +236,14 @@ bool CommSendTransition::depends(const Transition* other) const
   return true;
 }
 
-Transition* recv_transition(aid_t issuer, int times_considered, std::stringstream& stream)
+Transition* deserialize_transition(aid_t issuer, int times_considered, std::stringstream& stream)
 {
   short type;
   stream >> type;
-  Transition::Type simcall = static_cast<Transition::Type>(type);
+  xbt_assert(type >= 0 && type <= static_cast<short>(Transition::Type::UNKNOWN), "Invalid transition type %d received",
+             type);
+
+  auto simcall = static_cast<Transition::Type>(type);
 
   switch (simcall) {
     case Transition::Type::COMM_RECV:
@@ -259,9 +263,8 @@ Transition* recv_transition(aid_t issuer, int times_considered, std::stringstrea
 
     case Transition::Type::UNKNOWN:
       return new Transition(Transition::Type::UNKNOWN, issuer, times_considered);
-    default:
-      xbt_die("recv_transition of type %s unimplemented", Transition::to_c_str(simcall));
   }
+  THROW_IMPOSSIBLE; // Some compilers don't detect that each branch of the above switch has a return
 }
 
 } // namespace mc