From: Frederic Suter Date: Tue, 7 Jan 2020 08:52:06 +0000 (+0100) Subject: [sonar] don't mix public/private issues in jedule X-Git-Tag: v3.25~154 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/e9994d33a883aa73468e38d54cf377f52b3fd950 [sonar] don't mix public/private issues in jedule --- diff --git a/include/simgrid/jedule/jedule.hpp b/include/simgrid/jedule/jedule.hpp index d8fc2e150e..55b84eba46 100644 --- a/include/simgrid/jedule/jedule.hpp +++ b/include/simgrid/jedule/jedule.hpp @@ -8,6 +8,7 @@ #include #include +#include #include @@ -15,20 +16,23 @@ namespace simgrid { namespace jedule{ class XBT_PUBLIC Jedule { -public: - explicit Jedule(const std::string& name) : root_container_(name) {} + std::unordered_map meta_info_; std::vector event_set_; Container root_container_; + +public: + explicit Jedule(const std::string& name) : root_container_(name) + { + root_container_.create_hierarchy(s4u::Engine::get_instance()->get_netzone_root()); + } void add_meta_info(char* key, char* value); + void add_event(const Event& event); void cleanup_output(); void write_output(FILE* file); - -private: - std::unordered_map meta_info_; }; -} -} +} // namespace jedule +} // namespace simgrid typedef simgrid::jedule::Jedule *jedule_t; diff --git a/include/simgrid/jedule/jedule_platform.hpp b/include/simgrid/jedule/jedule_platform.hpp index 9566380510..4d328cf6e2 100644 --- a/include/simgrid/jedule/jedule_platform.hpp +++ b/include/simgrid/jedule/jedule_platform.hpp @@ -16,20 +16,24 @@ namespace simgrid { namespace jedule{ class XBT_PUBLIC Container { + int last_id_ = 0; + std::string name; + std::unordered_map name2id; + Container* parent_ = nullptr; + std::vector> children_; + std::vector resource_list; + public: explicit Container(const std::string& name); Container(const Container&) = delete; Container& operator=(const Container&) = delete; -private: - int last_id_ = 0; + 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); + unsigned int get_id_by_name(const char* name) { return name2id.at(name); } -public: - std::string name; - std::unordered_map name2id; - Container *parent = nullptr; - std::vector> children; - std::vector resource_list; void add_child(Container* child); void add_resources(std::vector hosts); void create_hierarchy(const_sg_netzone_t from_as); @@ -47,8 +51,8 @@ public: Container *parent; }; -} -} +} // namespace jedule +} // namespace simgrid typedef simgrid::jedule::Container * jed_container_t; void get_resource_selection_by_hosts(std::vector& subset_list, const std::vector& host_list); diff --git a/src/instr/jedule/jedule.cpp b/src/instr/jedule/jedule.cpp index 876976a178..ced9110543 100644 --- a/src/instr/jedule/jedule.cpp +++ b/src/instr/jedule/jedule.cpp @@ -20,6 +20,11 @@ void Jedule::add_meta_info(char* key, char* value) this->meta_info_.insert({key, value}); } +void Jedule::add_event(const Event& event) +{ + event_set_.emplace_back(event); +} + void Jedule::write_output(FILE* file) { if (not this->event_set_.empty()) { @@ -45,6 +50,6 @@ void Jedule::write_output(FILE* file) } } -} -} +} // namespace jedule +} // namespace simgrid #endif diff --git a/src/instr/jedule/jedule_platform.cpp b/src/instr/jedule/jedule_platform.cpp index f7167ed4c3..53e657a3bc 100644 --- a/src/instr/jedule/jedule_platform.cpp +++ b/src/instr/jedule/jedule_platform.cpp @@ -31,14 +31,14 @@ Container::Container(const std::string& name) : name(name) void Container::add_child(jed_container_t child) { xbt_assert(child != nullptr); - this->children.emplace_back(child); - child->parent = this; + children_.emplace_back(child); + child->set_parent(this); } void Container::add_resources(std::vector hosts) { - this->children.clear(); - this->last_id_ = 0; + children_.clear(); + last_id_ = 0; for (auto const& host : hosts) { const char *host_name = sg_host_get_name(host); @@ -65,26 +65,32 @@ void Container::create_hierarchy(const_sg_netzone_t from_as) } } +int Container::get_child_position(Container* child) +{ + 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; +} + std::vector Container::get_hierarchy() { - if(this->parent != nullptr ) { - if (not this->parent->children.empty()) { + if (parent_ != nullptr) { + if (not parent_->has_children()) { // we are in the last level - return this->parent->get_hierarchy(); + return parent_->get_hierarchy(); } else { - unsigned int i =0; - int child_nb = -1; - - for (auto const& child : this->parent->children) { - if (child.get() == this) { - child_nb = i; - break; - } - i++; - } + int child_nb = parent_->get_child_position(this); xbt_assert( child_nb > - 1); - std::vector heir_list = this->parent->get_hierarchy(); + std::vector heir_list = parent_->get_hierarchy(); heir_list.insert(heir_list.begin(), child_nb); return heir_list; } @@ -136,8 +142,8 @@ void Container::print_resources(FILE* jed_file) void Container::print(FILE* jed_file) { fprintf(jed_file, " \n", this->name.c_str()); - if (not this->children.empty()) { - for (auto const& child : this->children) { + if (not children_.empty()) { + for (auto const& child : children_) { child->print(jed_file); } } else { @@ -164,7 +170,7 @@ static void add_subsets_to(std::vector& subset_list, st for (auto const& host_name : hostgroup) { xbt_assert( host_name != nullptr ); jed_container_t parent_cont = host2_simgrid_parent_container.at(host_name); - unsigned int id = parent_cont->name2id.at(host_name); + unsigned int id = parent_cont->get_id_by_name(host_name); id_list.push_back(id); } unsigned int nb_ids = id_list.size(); @@ -203,9 +209,9 @@ void get_resource_selection_by_hosts(std::vector& subse const simgrid::jedule::Container* parent = host2_simgrid_parent_container.at(host_name); xbt_assert( parent != nullptr ); - auto host_group = parent2hostgroup.find(parent->name.c_str()); + auto host_group = parent2hostgroup.find(parent->get_cname()); if (host_group == parent2hostgroup.end()) - parent2hostgroup.insert({parent->name.c_str(), std::vector(1,host_name)}); + parent2hostgroup.insert({parent->get_cname(), std::vector(1, host_name)}); else host_group->second.push_back(host_name); } diff --git a/src/instr/jedule/jedule_sd_binding.cpp b/src/instr/jedule/jedule_sd_binding.cpp index f34ef62144..4ca1e45820 100644 --- a/src/instr/jedule/jedule_sd_binding.cpp +++ b/src/instr/jedule/jedule_sd_binding.cpp @@ -22,7 +22,7 @@ void jedule_log_sd_event(const_SD_task_t task) simgrid::jedule::Event event(std::string(SD_task_get_name(task)), SD_task_get_start_time(task), SD_task_get_finish_time(task), "SD"); event.add_resources(*task->allocation); - my_jedule->event_set_.emplace_back(std::move(event)); + my_jedule->add_event(std::move(event)); } void jedule_sd_init() @@ -31,7 +31,6 @@ void jedule_sd_init() XBT_DEBUG("root name %s\n", root_comp->get_cname()); my_jedule = new simgrid::jedule::Jedule(root_comp->get_name()); - my_jedule->root_container_.create_hierarchy(root_comp); } void jedule_sd_exit()