Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Move variable definition in cpp file.
[simgrid.git] / src / xbt / xbt_replay.cpp
index b022e52..a266f7e 100644 (file)
@@ -17,6 +17,7 @@ namespace xbt {
 
 std::ifstream* action_fs = nullptr;
 std::unordered_map<std::string, action_fun> action_funs;
+static std::unordered_map<std::string, std::queue<ReplayAction*>*> action_queues;
 
 static void read_and_trim_line(std::ifstream* fs, std::string* line)
 {
@@ -54,7 +55,7 @@ bool ReplayReader::get(ReplayAction* action)
   return not fs->eof();
 }
 
-static ReplayAction get_action(char* name)
+static ReplayAction* get_action(char* name)
 {
   ReplayAction* action;
 
@@ -75,7 +76,7 @@ static ReplayAction get_action(char* name)
       // if it's for me, I'm done
       std::string evtname = action->front();
       if (evtname.compare(name) == 0) {
-        return *action;
+        return action;
       } else {
         // Else, I have to store it for the relevant colleague
         std::queue<ReplayAction*>* otherqueue = nullptr;
@@ -94,10 +95,10 @@ static ReplayAction get_action(char* name)
     // Get something from my queue and return it
     action = myqueue->front();
     myqueue->pop();
-    return *action;
+    return action;
   }
 
-  return ReplayAction();
+  return nullptr;
 }
 
 static void handle_action(ReplayAction& action)
@@ -120,10 +121,11 @@ int replay_runner(int argc, char* argv[])
 {
   if (simgrid::xbt::action_fs) { // A unique trace file
     while (true) {
-      simgrid::xbt::ReplayAction evt(std::move(simgrid::xbt::get_action(argv[0])));
-      if (evt.empty())
+      simgrid::xbt::ReplayAction* evt = simgrid::xbt::get_action(argv[0]);
+      if (!evt)
         break;
-      simgrid::xbt::handle_action(evt);
+      simgrid::xbt::handle_action(*evt);
+      delete evt;
     }
     if (action_queues.find(std::string(argv[0])) != action_queues.end()) {
       std::queue<ReplayAction*>* myqueue = action_queues.at(std::string(argv[0]));