Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove a level of indirection, and custom destructors for instr/jedule.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 18 Apr 2019 13:41:45 +0000 (15:41 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 18 Apr 2019 20:38:25 +0000 (22:38 +0200)
include/simgrid/jedule/jedule.hpp
include/simgrid/jedule/jedule_events.hpp
include/simgrid/jedule/jedule_platform.hpp
src/instr/jedule/jedule.cpp
src/instr/jedule/jedule_events.cpp
src/instr/jedule/jedule_platform.cpp
src/instr/jedule/jedule_sd_binding.cpp

index a6a54ea..d742137 100644 (file)
@@ -16,12 +16,9 @@ namespace jedule{
 
 class XBT_PUBLIC Jedule {
 public:
-  Jedule()=default;
-  Jedule(const Jedule&) = delete;
-  Jedule& operator=(const Jedule&) = delete;
-  ~Jedule();
-  std::vector<Event*> event_set_;
-  Container* root_container_ = nullptr;
+  Jedule(const std::string& name) : root_container_(name) {}
+  std::vector<Event> event_set_;
+  Container root_container_;
   void add_meta_info(char* key, char* value);
   void cleanup_output();
   void write_output(FILE* file);
index a3d4326..5af7f4e 100644 (file)
@@ -19,23 +19,23 @@ namespace jedule{
 
 class XBT_PUBLIC Event {
 public:
-  Event(const std::string& name, double start_time, double end_time, const std::string& type);
-  Event(const Event&) = delete;
-  Event& operator=(const Event&) = delete;
-  ~Event();
+  Event(const std::string& name, double start_time, double end_time, const std::string& type)
+      : name_(name), start_time_(start_time), end_time_(end_time), type_(type)
+  {
+  }
   void add_characteristic(char* characteristic);
-  void add_resources(std::vector<sg_host_t>* host_selection);
+  void add_resources(const std::vector<sg_host_t>& host_selection);
   void add_info(char* key, char* value);
-  void print(FILE* file);
+  void print(FILE* file) const;
 
 private:
   std::string name_;
   double start_time_;
   double end_time_;
   std::string type_;
-  std::vector<jed_subset_t>* resource_subsets_;
-  std::vector<char*> characteristics_list_;   /* just a list of names */
-  std::unordered_map<char*, char*> info_map_; /* key/value pairs */
+  std::vector<Subset> resource_subsets_;
+  std::vector<std::string> characteristics_list_;         /* just a list of names */
+  std::unordered_map<std::string, std::string> info_map_; /* key/value pairs */
 };
 }
 }
index aede587..a7f7439 100644 (file)
@@ -18,9 +18,8 @@ namespace jedule{
 class XBT_PUBLIC Container {
 public:
   explicit Container(const std::string& name);
-  Container(const Container&) = delete;
-  Container& operator=(const Container&) = delete;
-  virtual ~Container();
+  ~Container();
+
 private:
   int last_id_;
   int is_lowest_ = 0;
@@ -43,7 +42,6 @@ public:
 class XBT_PUBLIC Subset {
 public:
   Subset(int s, int n, Container* p);
-  virtual ~Subset()=default;
   int start_idx; // start idx in resource_list of container
   int nres;      // number of resources spanning starting at start_idx
   Container *parent;
@@ -52,7 +50,7 @@ public:
 }
 }
 typedef simgrid::jedule::Container * jed_container_t;
-typedef simgrid::jedule::Subset * jed_subset_t;
-void get_resource_selection_by_hosts(std::vector<jed_subset_t>* subset_list, std::vector<sg_host_t> *host_list);
+void get_resource_selection_by_hosts(std::vector<simgrid::jedule::Subset>& subset_list,
+                                     const std::vector<sg_host_t>& host_list);
 
 #endif /* JED_SIMGRID_PLATFORM_H_ */
index e548f74..ddbecb0 100644 (file)
 namespace simgrid{
 namespace jedule {
 
-Jedule::~Jedule() {
-  delete this->root_container_;
-  for (auto const& evt : this->event_set_)
-    delete evt;
-  this->event_set_.clear();
-}
-
 void Jedule::add_meta_info(char* key, char* value)
 {
   xbt_assert(key != nullptr);
@@ -40,12 +33,12 @@ void Jedule::write_output(FILE* file)
     }
 
     fprintf(file, "  <platform>\n");
-    this->root_container_->print(file);
+    this->root_container_.print(file);
     fprintf(file, "  </platform>\n");
 
     fprintf(file, "  <events>\n");
     for (auto const& event : this->event_set_)
-      event->print(file);
+      event.print(file);
     fprintf(file, "  </events>\n");
 
     fprintf(file, "</jedule>\n");
index c166df4..2744fcd 100644 (file)
 namespace simgrid{
 namespace jedule{
 
-Event::Event(const std::string& name, double start_time, double end_time, const std::string& type)
-    : name_(name), start_time_(start_time), end_time_(end_time), type_(type)
-{
-  this->resource_subsets_ = new std::vector<jed_subset_t>();
-}
-
-Event::~Event()
-{
-  if (not this->resource_subsets_->empty()) {
-    for (auto const& subset : *this->resource_subsets_)
-      delete subset;
-    delete this->resource_subsets_;
-  }
-}
-
-void Event::add_resources(std::vector<sg_host_t>* host_selection)
+void Event::add_resources(const std::vector<sg_host_t>& host_selection)
 {
   get_resource_selection_by_hosts(this->resource_subsets_, host_selection);
 }
@@ -44,7 +29,7 @@ void Event::add_info(char* key, char* value)
   this->info_map_.insert({key, value});
 }
 
-void Event::print(FILE *jed_file)
+void Event::print(FILE* jed_file) const
 {
   fprintf(jed_file, "    <event>\n");
   fprintf(jed_file, "      <prop key=\"name\" value=\"%s\" />\n", this->name_.c_str());
@@ -52,12 +37,12 @@ void Event::print(FILE *jed_file)
   fprintf(jed_file, "      <prop key=\"end\" value=\"%g\" />\n", this->end_time_);
   fprintf(jed_file, "      <prop key=\"type\" value=\"%s\" />\n", this->type_.c_str());
 
-  xbt_assert(not this->resource_subsets_->empty());
+  xbt_assert(not this->resource_subsets_.empty());
   fprintf(jed_file, "      <res_util>\n");
-  for (auto const& subset : *this->resource_subsets_) {
+  for (auto const& subset : this->resource_subsets_) {
     fprintf(jed_file, "        <select resources=\"");
-    fprintf(jed_file, "%s", subset->parent->get_hierarchy_as_string().c_str());
-    fprintf(jed_file, ".[%d-%d]", subset->start_idx, subset->start_idx + subset->nres-1);
+    fprintf(jed_file, "%s", subset.parent->get_hierarchy_as_string().c_str());
+    fprintf(jed_file, ".[%d-%d]", subset.start_idx, subset.start_idx + subset.nres - 1);
     fprintf(jed_file, "\" />\n");
   }
   fprintf(jed_file, "      </res_util>\n");
@@ -65,14 +50,14 @@ void Event::print(FILE *jed_file)
   if (not this->characteristics_list_.empty()) {
     fprintf(jed_file, "      <characteristics>\n");
     for (auto const& ch : this->characteristics_list_)
-      fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch);
+      fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch.c_str());
     fprintf(jed_file, "      </characteristics>\n");
   }
 
   if (not this->info_map_.empty()) {
     fprintf(jed_file, "      <info>\n");
     for (auto const& elm : this->info_map_)
-      fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
+      fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n", elm.first.c_str(), elm.second.c_str());
     fprintf(jed_file, "      </info>\n");
   }
 
index 372c9c2..13d1ef6 100644 (file)
@@ -31,9 +31,8 @@ Container::Container(const std::string& name) : name(name)
 
 Container::~Container()
 {
-  if (not this->children.empty())
-    for (auto const& child : this->children)
-      delete child;
+  for (auto const& child : this->children)
+    delete child;
 }
 
 void Container::add_child(jed_container_t child)
@@ -160,7 +159,8 @@ void Container::print(FILE* jed_file)
 }
 }
 
-static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<const char*> hostgroup, jed_container_t parent)
+static void add_subsets_to(std::vector<simgrid::jedule::Subset>& subset_list, std::vector<const char*> hostgroup,
+                           jed_container_t parent)
 {
   // get ids for each host
   // sort ids
@@ -185,15 +185,15 @@ static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<c
     int pos = start;
     for(unsigned int i=0; i<nb_ids; i++) {
       if( id_list[i] - id_list[pos] > 1 ) {
-        subset_list->push_back(new simgrid::jedule::Subset(id_list[start], id_list[pos], parent));
+        subset_list.emplace_back(id_list[start], id_list[pos], parent);
         start = i;
 
         if( i == nb_ids-1 ) {
-         subset_list->push_back(new simgrid::jedule::Subset(id_list[i], id_list[i], parent));
+          subset_list.emplace_back(id_list[i], id_list[i], parent);
         }
       } else {
         if( i == nb_ids-1 ) {
-          subset_list->push_back(new simgrid::jedule::Subset(id_list[start], id_list[i], parent));
+          subset_list.emplace_back(id_list[start], id_list[i], parent);
         }
       }
       pos = i;
@@ -202,14 +202,14 @@ static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<c
 
 }
 
-void get_resource_selection_by_hosts(std::vector<jed_subset_t> *subset_list, std::vector<sg_host_t> *host_list)
+void get_resource_selection_by_hosts(std::vector<simgrid::jedule::Subset>& subset_list,
+                                     const std::vector<sg_host_t>& host_list)
 {
-  xbt_assert( host_list != nullptr );
   // for each host name
   //  find parent container
   //  group by parent container
   std::unordered_map<const char*, std::vector<const char*>> parent2hostgroup;
-  for (auto const& host : *host_list) {
+  for (auto const& host : host_list) {
     const char *host_name = sg_host_get_name(host);
     jed_container_t parent = host2_simgrid_parent_container.at(host_name);
     xbt_assert( parent != nullptr );
index 1541655..5819009 100644 (file)
@@ -20,10 +20,10 @@ void jedule_log_sd_event(SD_task_t task)
 {
   xbt_assert(task != nullptr);
 
-  jed_event_t event = new simgrid::jedule::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_.push_back(event);
+  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));
 }
 
 void jedule_sd_init()
@@ -31,11 +31,8 @@ void jedule_sd_init()
   sg_netzone_t root_comp = simgrid::s4u::Engine::get_instance()->get_netzone_root();
   XBT_DEBUG("root name %s\n", root_comp->get_cname());
 
-  my_jedule = new simgrid::jedule::Jedule();
-
-  jed_container_t root_container = new simgrid::jedule::Container(root_comp->get_name());
-  root_container->create_hierarchy(root_comp);
-  my_jedule->root_container_ = root_container;
+  my_jedule = new simgrid::jedule::Jedule(root_comp->get_name());
+  my_jedule->root_container_.create_hierarchy(root_comp);
 }
 
 void jedule_sd_exit()