Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
5d4c94977cec5bb58a2824e0be5215d8d41a653e
[simgrid.git] / src / instr / jedule / jedule_events.cpp
1 /* Copyright (c) 2010-2016. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include "simgrid/jedule/jedule_events.hpp"
8 #include "simgrid/jedule/jedule.hpp"
9
10 #include "xbt/asserts.h"
11
12 #if HAVE_JEDULE
13 namespace simgrid{
14 namespace jedule{
15
16 Event::~Event(){
17   while (!this->resource_subsets.empty()){
18     xbt_free(this->resource_subsets.back());
19     this->resource_subsets.pop_back();
20   }
21 }
22
23 void Event::addResources(std::vector<sg_host_t> *host_selection) {
24   xbt_dynar_t resource_subset_list;
25   jed_res_subset_t res_set;
26   unsigned int i;
27
28   resource_subset_list = xbt_dynar_new(sizeof(jed_res_subset_t), nullptr);
29
30   jed_simgrid_get_resource_selection_by_hosts(resource_subset_list, host_selection);
31   xbt_dynar_foreach(resource_subset_list, i, res_set)  {
32     this->resource_subsets.push_back(res_set);
33   }
34
35   xbt_dynar_free_container(&resource_subset_list);
36 }
37
38 void Event::addCharacteristic(char *characteristic) {
39   xbt_assert( characteristic != nullptr );
40   this->characteristics_list.push_back(characteristic);
41 }
42
43 void Event::addInfo(char* key, char *value) {
44   xbt_assert((key != nullptr) && value != nullptr);
45   this->info_map.insert({key, value});
46 }
47
48 void Event::print(FILE *jed_file){
49   fprintf(jed_file, "    <event>\n");
50   fprintf(jed_file, "      <prop key=\"name\" value=\"%s\" />\n", this->name.c_str());
51   fprintf(jed_file, "      <prop key=\"start\" value=\"%g\" />\n", this->start_time);
52   fprintf(jed_file, "      <prop key=\"end\" value=\"%g\" />\n", this->end_time);
53   fprintf(jed_file, "      <prop key=\"type\" value=\"%s\" />\n", this->type.c_str());
54
55   xbt_assert(!this->resource_subsets.empty());
56   fprintf(jed_file, "      <res_util>\n");
57   for (auto subset: this->resource_subsets) {
58     fprintf(jed_file, "        <select resources=\"");
59     fprintf(jed_file, "%s", subset->parent->getHierarchyAsString().c_str());
60     fprintf(jed_file, ".[%d-%d]", subset->start_idx, subset->start_idx + subset->nres - 1);
61     fprintf(jed_file, "\" />\n");
62   }
63   fprintf(jed_file, "      </res_util>\n");
64
65   if (!this->characteristics_list.empty()){
66     fprintf(jed_file, "      <characteristics>\n");
67     for (auto ch: this->characteristics_list)
68       fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch);
69     fprintf(jed_file, "      </characteristics>\n");
70   }
71
72   if (!this->info_map.empty()){
73     fprintf(jed_file, "      <info>\n");
74     for (auto elm: this->info_map)
75       fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
76     fprintf(jed_file, "      </info>\n");
77   }
78
79   fprintf(jed_file, "    </event>\n");
80 }
81
82 }
83 }
84 #endif