X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/acac7aa68c0c8fb3a534e04fecf11f6e143678c5..c97cae03adbd2e3159e5e909b050183dbcf49d60:/src/surf/xml/surfxml_sax_cb.cpp diff --git a/src/surf/xml/surfxml_sax_cb.cpp b/src/surf/xml/surfxml_sax_cb.cpp index 6aef8bbe3b..43f712cf97 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -1,5 +1,4 @@ - /* 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. */ @@ -19,9 +18,12 @@ #include "xbt/log.h" #include "xbt/misc.h" #include "xbt/str.h" -#include #include "src/surf/xml/platf_private.hpp" +#include +#include +#include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_parse, surf, "Logging specific to the SURF parsing module"); @@ -91,35 +93,30 @@ int surf_parse_get_int(const char *string) { static std::vector* explodesRadical(const char* radicals) { std::vector* exploded = new std::vector(); - 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 radical_elements; + boost::split(radical_elements, radicals, boost::is_any_of(",")); + for (auto group : radical_elements) { + std::vector 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; } @@ -278,16 +275,14 @@ static std::vector surf_parse_get_all_speeds(char* speeds, const char* e 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 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; } @@ -301,7 +296,7 @@ static std::vector surf_parse_get_all_speeds(char* speeds, const char* e /* 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* 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 */ @@ -489,7 +484,7 @@ void STag_surfxml_prop() 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) @@ -989,9 +984,10 @@ void STag_surfxml_argument(){ 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(); - 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 */} @@ -1014,8 +1010,9 @@ void surf_parse_open(const char *file) 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); @@ -1027,9 +1024,7 @@ void surf_parse_open(const char *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);