- /* Copyright (c) 2006-2015. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "xbt/log.h"
#include "xbt/misc.h"
#include "xbt/str.h"
-#include <string>
#include "src/surf/xml/platf_private.hpp"
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <string>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_parse, surf, "Logging specific to the SURF parsing module");
static std::vector<int>* explodesRadical(const char* radicals)
{
std::vector<int>* exploded = new std::vector<int>();
- char* groups;
- unsigned int iter;
// Make all hosts
- xbt_dynar_t radical_elements = xbt_str_split(radicals, ",");
- xbt_dynar_foreach (radical_elements, iter, groups) {
-
- xbt_dynar_t radical_ends = xbt_str_split(groups, "-");
- int start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char*));
+ std::vector<std::string> radical_elements;
+ boost::split(radical_elements, radicals, boost::is_any_of(","));
+ for (auto group : radical_elements) {
+ std::vector<std::string> radical_ends;
+ boost::split(radical_ends, group, boost::is_any_of("-"));
+ int start = surf_parse_get_int((radical_ends.front()).c_str());
int end = 0;
- switch (xbt_dynar_length(radical_ends)) {
+ switch (radical_ends.size()) {
case 1:
end = start;
break;
case 2:
- end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char*));
+ end = surf_parse_get_int((radical_ends.back()).c_str());
break;
default:
- surf_parse_error("Malformed radical: %s", groups);
+ surf_parse_error("Malformed radical: %s", group.c_str());
break;
}
-
for (int i = start; i <= end; i++)
exploded->push_back(i);
-
- xbt_dynar_free(&radical_ends);
}
- xbt_dynar_free(&radical_elements);
return exploded;
}
double speed = surf_parse_get_speed(speeds, entity_kind, id);
speed_per_pstate.push_back(speed);
} else {
- xbt_dynar_t pstate_list = xbt_str_split(speeds, ",");
- unsigned int i;
- char* speed_str;
- xbt_dynar_foreach(pstate_list, i, speed_str) {
- xbt_str_trim(speed_str, nullptr);
- double speed = surf_parse_get_speed(speed_str,entity_kind, id);
+ std::vector<std::string> pstate_list;
+ boost::split(pstate_list, speeds, boost::is_any_of(","));
+ for (auto speed_str : pstate_list) {
+ boost::trim(speed_str);
+ double speed = surf_parse_get_speed(speed_str.c_str(), entity_kind, id);
speed_per_pstate.push_back(speed);
XBT_DEBUG("Speed value: %f", speed);
}
- xbt_dynar_free(&pstate_list);
}
return speed_per_pstate;
}
/* The default current property receiver. Setup in the corresponding opening callbacks. */
xbt_dict_t current_property_set = nullptr;
-xbt_dict_t current_model_property_set = nullptr;
+std::map<std::string, std::string>* current_model_property_set = nullptr;
int AS_TAG = 0; // Whether we just opened an AS tag (to see what to do with the properties)
/* dictionary of random generator data */
XBT_DEBUG("Set AS property %s -> %s", A_surfxml_prop_id, A_surfxml_prop_value);
simgrid::s4u::NetZone* netzone = simgrid::s4u::Engine::instance()->netzoneByNameOrNull(A_surfxml_AS_id);
- netzone->setProperty(A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value));
+ netzone->setProperty(A_surfxml_prop_id, A_surfxml_prop_value);
}
else{
if (!current_property_set)
void STag_surfxml_model___prop(){
if (!current_model_property_set)
- current_model_property_set = xbt_dict_new_homogeneous(xbt_free_f);
+ current_model_property_set = new std::map<std::string, std::string>();
- xbt_dict_set(current_model_property_set, A_surfxml_model___prop_id, xbt_strdup(A_surfxml_model___prop_value), nullptr);
+ current_model_property_set->insert(
+ {std::string(A_surfxml_model___prop_id), std::string(A_surfxml_model___prop_value)});
}
void ETag_surfxml_prop(){/* Nothing to do */}
xbt_assert(file, "Cannot parse the nullptr file. Bypassing the parser is strongly deprecated nowadays.");
surf_parsed_filename = xbt_strdup(file);
- char *dir = xbt_dirname(file);
- xbt_dynar_push(surf_path, &dir);
+ char* dir = xbt_dirname(file);
+ surf_path.push_back(std::string(dir));
+ xbt_free(dir);
surf_file_to_parse = surf_fopen(file, "r");
xbt_assert((surf_file_to_parse), "Unable to open \"%s\"\n", file);
void surf_parse_close()
{
if (surf_parsed_filename) {
- char *dir = nullptr;
- xbt_dynar_pop(surf_path, &dir);
- free(dir);
+ surf_path.pop_back();
}
free(surf_parsed_filename);