Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[simgrid.git] / src / surf / xml / surfxml_sax_cb.cpp
index dfcc8c9..13de767 100644 (file)
@@ -118,9 +118,12 @@ int surf_parse_get_int(std::string s)
     return -1;
   }
 }
+}
+
+namespace {
 
 /* Turn something like "1-4,6,9-11" into the vector {1,2,3,4,6,9,10,11} */
-static std::vector<int>* explodesRadical(std::string radicals)
+std::vector<int>* explodesRadical(std::string radicals)
 {
   std::vector<int>* exploded = new std::vector<int>();
 
@@ -151,7 +154,6 @@ static std::vector<int>* explodesRadical(std::string radicals)
   return exploded;
 }
 
-namespace {
 class unit_scale : public std::unordered_map<std::string, double> {
 public:
   using std::unordered_map<std::string, double>::unordered_map;
@@ -189,11 +191,10 @@ unit_scale::unit_scale(std::initializer_list<std::tuple<const std::string, doubl
     }
   }
 }
-}
 
 /* Note: field `unit' for the last element of parameter `units' should be nullptr. */
-static double surf_parse_get_value_with_unit(const char* string, const unit_scale& units, const char* entity_kind,
-                                             std::string name, const char* error_msg, const char* default_unit)
+double surf_parse_get_value_with_unit(const char* string, const unit_scale& units, const char* entity_kind,
+                                      std::string name, const char* error_msg, const char* default_unit)
 {
   char* ptr;
   errno = 0;
@@ -214,41 +215,44 @@ static double surf_parse_get_value_with_unit(const char* string, const unit_scal
     surf_parse_error(std::string("unknown unit: ") + ptr);
   return res * u->second;
 }
+}
+
+extern "C" {
 
 double surf_parse_get_time(const char* string, const char* entity_kind, std::string name)
 {
-  static const unit_scale units{{"w", 7 * 24 * 60 * 60},
-                                {"d", 24 * 60 * 60},
-                                {"h", 60 * 60},
-                                {"m", 60},
-                                {"s", 1.0},
-                                {"ms", 1e-3},
-                                {"us", 1e-6},
-                                {"ns", 1e-9},
-                                {"ps", 1e-12}};
+  static const unit_scale units{std::make_pair("w", 7 * 24 * 60 * 60),
+                                std::make_pair("d", 24 * 60 * 60),
+                                std::make_pair("h", 60 * 60),
+                                std::make_pair("m", 60),
+                                std::make_pair("s", 1.0),
+                                std::make_pair("ms", 1e-3),
+                                std::make_pair("us", 1e-6),
+                                std::make_pair("ns", 1e-9),
+                                std::make_pair("ps", 1e-12)};
   return surf_parse_get_value_with_unit(string, units, entity_kind, name,
       "Append 's' to your time to get seconds", "s");
 }
 
 double surf_parse_get_size(const char* string, const char* entity_kind, std::string name)
 {
-  static const unit_scale units{
-      {"b", 0.125, 2, true}, {"b", 0.125, 10, true}, {"B", 1.0, 2, true}, {"B", 1.0, 10, true}};
+  static const unit_scale units{std::make_tuple("b", 0.125, 2, true), std::make_tuple("b", 0.125, 10, true),
+                                std::make_tuple("B", 1.0, 2, true), std::make_tuple("B", 1.0, 10, true)};
   return surf_parse_get_value_with_unit(string, units, entity_kind, name,
       "Append 'B' to get bytes (or 'b' for bits but 1B = 8b).", "B");
 }
 
 double surf_parse_get_bandwidth(const char* string, const char* entity_kind, std::string name)
 {
-  static const unit_scale units{
-      {"bps", 0.125, 2, true}, {"bps", 0.125, 10, true}, {"Bps", 1.0, 2, true}, {"Bps", 1.0, 10, true}};
+  static const unit_scale units{std::make_tuple("bps", 0.125, 2, true), std::make_tuple("bps", 0.125, 10, true),
+                                std::make_tuple("Bps", 1.0, 2, true), std::make_tuple("Bps", 1.0, 10, true)};
   return surf_parse_get_value_with_unit(string, units, entity_kind, name,
       "Append 'Bps' to get bytes per second (or 'bps' for bits but 1Bps = 8bps)", "Bps");
 }
 
 double surf_parse_get_speed(const char* string, const char* entity_kind, std::string name)
 {
-  static const unit_scale units{{"f", 1.0, 10, true}, {"flops", 1.0, 10, false}};
+  static const unit_scale units{std::make_tuple("f", 1.0, 10, true), std::make_tuple("flops", 1.0, 10, false)};
   return surf_parse_get_value_with_unit(string, units, entity_kind, name,
       "Append 'f' or 'flops' to your speed to get flop per second", "f");
 }