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);
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 */
};
}
}
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;
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;
}
}
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_ */
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);
}
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");
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);
}
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());
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");
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");
}
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)
}
}
-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
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;
}
-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 );
{
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()
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()