X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eb760c3924df061993292531c656a00e01e8945c..3f4f5e63dadc0023c0a02a08af8e9e9801b38e8e:/src/xbt/xbt_replay.cpp diff --git a/src/xbt/xbt_replay.cpp b/src/xbt/xbt_replay.cpp index 4c10514a8a..d58bab1efc 100644 --- a/src/xbt/xbt_replay.cpp +++ b/src/xbt/xbt_replay.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -11,13 +11,12 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(replay,xbt,"Replay trace reader"); -namespace simgrid { -namespace xbt { +namespace simgrid::xbt { static std::ifstream action_fs; std::unordered_map action_funs; -static std::unordered_map> action_queues; +static std::unordered_map>> action_queues; static void read_and_trim_line(std::ifstream& fs, std::string* line) { @@ -51,12 +50,12 @@ bool ReplayReader::get(ReplayAction* action) return not fs.eof(); } -static ReplayAction* get_action(const char* name) +static std::unique_ptr get_action(const char* name) { - if (auto queue_elt = action_queues.find(std::string(name)); queue_elt != action_queues.end()) { + if (auto queue_elt = action_queues.find(name); queue_elt != action_queues.end()) { if (auto& my_queue = queue_elt->second; not my_queue.empty()) { // Get something from my queue and return it - ReplayAction* action = my_queue.front(); + auto action = std::move(my_queue.front()); my_queue.pop(); return action; } @@ -70,7 +69,7 @@ static ReplayAction* get_action(const char* name) if (action_fs.eof()) break; /* we cannot split in place here because we parse&store several lines for the colleagues... */ - auto* action = new ReplayAction(); + auto action = std::make_unique(); boost::split(*action, action_line, boost::is_any_of(" \t"), boost::token_compress_on); // if it's for me, I'm done @@ -79,7 +78,7 @@ static ReplayAction* get_action(const char* name) return action; // else, I have to store it for the relevant colleague - action_queues[evtname].push(action); + action_queues[evtname].emplace(std::move(action)); } // end of file reached while searching in vain for more work @@ -115,11 +114,10 @@ int replay_runner(const char* actor_name, const char* trace_filename) "Passing nullptr to replay_runner() means that you want to use a shared trace, but you did not provide " "any. Please use xbt_replay_set_tracefile()."); while (true) { - simgrid::xbt::ReplayAction* evt = simgrid::xbt::get_action(actor_name); + auto evt = simgrid::xbt::get_action(actor_name); if (not evt) break; simgrid::xbt::handle_action(*evt); - delete evt; } action_queues.erase(actor_name_string); } else { // Should have got my trace file in argument @@ -130,7 +128,7 @@ int replay_runner(const char* actor_name, const char* trace_filename) simgrid::xbt::ReplayAction evt; simgrid::xbt::ReplayReader reader(trace_filename); while (reader.get(&evt)) { - if (evt.front().compare(actor_name) == 0) { + if (evt.front() == actor_name) { simgrid::xbt::handle_action(evt); } else { XBT_WARN("Ignore trace element not for me (target='%s', I am '%s')", evt.front().c_str(), actor_name); @@ -140,8 +138,7 @@ int replay_runner(const char* actor_name, const char* trace_filename) } return 0; } -} -} +} // namespace simgrid::xbt /** * @ingroup XBT_replay @@ -153,11 +150,11 @@ int replay_runner(const char* actor_name, const char* trace_filename) * The argument of the function is the line describing the action, fields separated by spaces. * * @param action_name the reference name of the action. - * @param function prototype given by the type: void...(const char** action) + * @param function prototype given by the type: void...(simgrid::xbt::ReplayAction& action) */ void xbt_replay_action_register(const char* action_name, const action_fun& function) { - simgrid::xbt::action_funs[std::string(action_name)] = function; + simgrid::xbt::action_funs[action_name] = function; } /** @@ -168,7 +165,7 @@ void xbt_replay_action_register(const char* action_name, const action_fun& funct */ action_fun xbt_replay_action_get(const char* action_name) { - return simgrid::xbt::action_funs.at(std::string(action_name)); + return simgrid::xbt::action_funs.at(action_name); } void xbt_replay_set_tracefile(const std::string& filename)