From 24664d37168f5a0573d68e7da10e3ff9a9cc124e Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 8 Jan 2020 10:35:02 +0100 Subject: [PATCH] Const + simplification for jedule::Container::get_child_position. --- include/simgrid/jedule/jedule_platform.hpp | 2 +- src/instr/jedule/jedule_platform.cpp | 39 ++++++++-------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/include/simgrid/jedule/jedule_platform.hpp b/include/simgrid/jedule/jedule_platform.hpp index 4d328cf6e2..9079e9e9ad 100644 --- a/include/simgrid/jedule/jedule_platform.hpp +++ b/include/simgrid/jedule/jedule_platform.hpp @@ -31,7 +31,7 @@ public: const char* get_cname() const { return name.c_str(); } void set_parent(Container* parent) { parent_ = parent; } bool has_children() { return not children_.empty(); } - int get_child_position(Container* child); + int get_child_position(const Container* child) const; unsigned int get_id_by_name(const char* name) { return name2id.at(name); } void add_child(Container* child); diff --git a/src/instr/jedule/jedule_platform.cpp b/src/instr/jedule/jedule_platform.cpp index 53e657a3bc..c53f3dd5f2 100644 --- a/src/instr/jedule/jedule_platform.cpp +++ b/src/instr/jedule/jedule_platform.cpp @@ -65,39 +65,28 @@ void Container::create_hierarchy(const_sg_netzone_t from_as) } } -int Container::get_child_position(Container* child) +int Container::get_child_position(const Container* child) const { - unsigned int i = 0; - int child_nb = -1; - - for (auto const& c : children_) { - if (c.get() == child) { - child_nb = i; - break; - } - i++; - } - return child_nb; + auto it = std::find_if(begin(children_), end(children_), + [&child](const std::unique_ptr& c) { return c.get() == child; }); + return it == end(children_) ? -1 : std::distance(begin(children_), it); } std::vector Container::get_hierarchy() { - if (parent_ != nullptr) { - if (not parent_->has_children()) { - // we are in the last level - return parent_->get_hierarchy(); - } else { - int child_nb = parent_->get_child_position(this); - - xbt_assert( child_nb > - 1); - std::vector heir_list = parent_->get_hierarchy(); - heir_list.insert(heir_list.begin(), child_nb); - return heir_list; - } - } else { + if (parent_ == nullptr) { int top_level = 0; std::vector heir_list = {top_level}; return heir_list; + } else if (parent_->has_children()) { + int child_nb = parent_->get_child_position(this); + xbt_assert(child_nb > -1); + std::vector heir_list = parent_->get_hierarchy(); + heir_list.insert(heir_list.begin(), child_nb); + return heir_list; + } else { + // we are in the last level + return parent_->get_hierarchy(); } } -- 2.20.1