Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rename the plugins from the command line, and document it
[simgrid.git] / src / xbt / xbt_replay.cpp
index 23be2f5..b889434 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, 2012-2015, 2017. The SimGrid Team.
+/* Copyright (c) 2010-2018. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -17,6 +17,7 @@ namespace xbt {
 
 std::ifstream* action_fs = nullptr;
 std::unordered_map<std::string, action_fun> action_funs;
 
 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)
 {
 
 static void read_and_trim_line(std::ifstream* fs, std::string* line)
 {
@@ -39,6 +40,7 @@ public:
     xbt_assert(fs->is_open(), "Cannot read replay file '%s'", filename);
   }
   ReplayReader(const ReplayReader&) = delete;
     xbt_assert(fs->is_open(), "Cannot read replay file '%s'", filename);
   }
   ReplayReader(const ReplayReader&) = delete;
+  ReplayReader& operator=(const ReplayReader&) = delete;
   ~ReplayReader()
   {
     delete fs;
   ~ReplayReader()
   {
     delete fs;
@@ -54,7 +56,7 @@ bool ReplayReader::get(ReplayAction* action)
   return not fs->eof();
 }
 
   return not fs->eof();
 }
 
-static ReplayAction get_action(char* name)
+static ReplayAction* get_action(char* name)
 {
   ReplayAction* action;
 
 {
   ReplayAction* action;
 
@@ -75,7 +77,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) {
       // 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;
       } else {
         // Else, I have to store it for the relevant colleague
         std::queue<ReplayAction*>* otherqueue = nullptr;
@@ -94,10 +96,10 @@ static ReplayAction get_action(char* name)
     // Get something from my queue and return it
     action = myqueue->front();
     myqueue->pop();
     // 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)
 }
 
 static void handle_action(ReplayAction& action)
@@ -120,10 +122,11 @@ int replay_runner(int argc, char* argv[])
 {
   if (simgrid::xbt::action_fs) { // A unique trace file
     while (true) {
 {
   if (simgrid::xbt::action_fs) { // A unique trace file
     while (true) {
-      simgrid::xbt::ReplayAction evt(simgrid::xbt::get_action(argv[0]));
-      if (evt.empty())
+      simgrid::xbt::ReplayAction* evt = simgrid::xbt::get_action(argv[0]);
+      if (!evt)
         break;
         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]));
     }
     if (action_queues.find(std::string(argv[0])) != action_queues.end()) {
       std::queue<ReplayAction*>* myqueue = action_queues.at(std::string(argv[0]));
@@ -155,7 +158,7 @@ int replay_runner(int argc, char* argv[])
  * \brief Registers a function to handle a kind of action
  *
  * Registers a function to handle a kind of action
  * \brief Registers a function to handle a kind of action
  *
  * Registers a function to handle a kind of action
- * This table is then used by \ref xbt_replay_action_runner
+ * This table is then used by \ref simgrid::xbt::replay_runner
  *
  * The argument of the function is the line describing the action, fields separated by spaces.
  *
  *
  * The argument of the function is the line describing the action, fields separated by spaces.
  *