+static void read_and_trim_line(std::ifstream* fs, std::string* line)
+{
+ std::getline(*fs, *line);
+ boost::trim(*line);
+ XBT_DEBUG("got from trace: %s", line->c_str());
+}
+
+static void handle_action(ReplayAction* action)
+{
+ XBT_DEBUG("%s replays a %s action", action->at(0).c_str(), action->at(1).c_str());
+ char** c_action = new char*[action->size() + 1];
+ action_fun function = xbt_action_funs.at(action->at(1));
+ int i = 0;
+ for (auto arg : *action) {
+ c_action[i] = xbt_strdup(arg.c_str());
+ i++;
+ }
+ c_action[i] = nullptr;
+ try {
+ function(c_action);
+ } catch (xbt_ex& e) {
+ for (unsigned int j = 0; j < action->size(); j++)
+ xbt_free(c_action[j]);
+ delete[] c_action;
+ action->clear();
+ xbt_die("Replay error:\n %s", e.what());
+ }
+ for (unsigned int j = 0; j < action->size(); j++)
+ xbt_free(c_action[j]);
+ delete[] c_action;
+}
+