X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0fa053f89a0b5f34a050f4790925d9d63ac11073..8a0e2b82a1c0981a84e67f1bb4afb6e16fbf8c3a:/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 db18b6343f..ebc12b7e40 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -58,13 +58,14 @@ void surf_parse_assert_netpoint(std::string hostname, std::string pre, std::stri std::string msg = pre + hostname + post + " Existing netpoints: \n"; - std::vector list; - simgrid::s4u::Engine::getInstance()->getNetpointList(&list); - std::sort(list.begin(), list.end(), [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { - return a->get_name() < b->get_name(); - }); + std::vector netpoints = + simgrid::s4u::Engine::get_instance()->get_all_netpoints(); + std::sort(netpoints.begin(), netpoints.end(), + [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { + return a->get_name() < b->get_name(); + }); bool first = true; - for (auto const& np : list) { + for (auto const& np : netpoints) { if (np->is_netzone()) continue; @@ -265,8 +266,8 @@ static std::vector surf_parse_get_all_speeds(char* speeds, const char* e /* make sure these symbols are defined as strong ones in this file so that the linker can resolve them */ /* The default current property receiver. Setup in the corresponding opening callbacks. */ -std::map* current_property_set = nullptr; -std::map* current_model_property_set = nullptr; +std::unordered_map* current_property_set = nullptr; +std::unordered_map* current_model_property_set = nullptr; int ZONE_TAG = 0; // Whether we just opened a zone tag (to see what to do with the properties) FILE *surf_file_to_parse = nullptr; @@ -389,11 +390,9 @@ void STag_surfxml_platform() { "The most recent formalism that this version of SimGrid understands is v4.1.\n" "Please update your code, or use another, more adapted, file.", surf_parsed_filename, version); - - sg_platf_begin(); } void ETag_surfxml_platform(){ - sg_platf_end(); + simgrid::s4u::on_platform_created(); } void STag_surfxml_host(){ @@ -405,12 +404,12 @@ void STag_surfxml_prop() { if (ZONE_TAG) { // We need to retrieve the most recently opened zone XBT_DEBUG("Set zone property %s -> %s", A_surfxml_prop_id, A_surfxml_prop_value); - simgrid::s4u::NetZone* netzone = simgrid::s4u::Engine::getInstance()->getNetzoneByNameOrNull(A_surfxml_zone_id); + simgrid::s4u::NetZone* netzone = simgrid::s4u::Engine::get_instance()->netzone_by_name_or_null(A_surfxml_zone_id); - netzone->setProperty(A_surfxml_prop_id, A_surfxml_prop_value); + netzone->set_property(A_surfxml_prop_id, A_surfxml_prop_value); } else { if (not current_property_set) - current_property_set = new std::map; // Maybe, it should raise an error + current_property_set = new std::unordered_map; // Maybe, it should raise an error current_property_set->insert({A_surfxml_prop_id, A_surfxml_prop_value}); XBT_DEBUG("add prop %s=%s into current property set %p", A_surfxml_prop_id, A_surfxml_prop_value, current_property_set); @@ -497,17 +496,17 @@ void ETag_surfxml_cluster(){ switch (AX_surfxml_cluster_sharing___policy) { case A_surfxml_cluster_sharing___policy_SHARED: - cluster.sharing_policy = SURF_LINK_SHARED; + cluster.sharing_policy = simgrid::s4u::Link::SharingPolicy::SHARED; break; case A_surfxml_cluster_sharing___policy_FULLDUPLEX: XBT_WARN("FULLDUPLEX is now deprecated. Please update your platform file to use SPLITDUPLEX instead."); - cluster.sharing_policy = SURF_LINK_SPLITDUPLEX; + cluster.sharing_policy = simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX; break; case A_surfxml_cluster_sharing___policy_SPLITDUPLEX: - cluster.sharing_policy = SURF_LINK_SPLITDUPLEX; + cluster.sharing_policy = simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX; break; case A_surfxml_cluster_sharing___policy_FATPIPE: - cluster.sharing_policy = SURF_LINK_FATPIPE; + cluster.sharing_policy = simgrid::s4u::Link::SharingPolicy::FATPIPE; break; default: surf_parse_error(std::string("Invalid cluster sharing policy for cluster ") + cluster.id); @@ -515,10 +514,10 @@ void ETag_surfxml_cluster(){ } switch (AX_surfxml_cluster_bb___sharing___policy) { case A_surfxml_cluster_bb___sharing___policy_FATPIPE: - cluster.bb_sharing_policy = SURF_LINK_FATPIPE; + cluster.bb_sharing_policy = simgrid::s4u::Link::SharingPolicy::FATPIPE; break; case A_surfxml_cluster_bb___sharing___policy_SHARED: - cluster.bb_sharing_policy = SURF_LINK_SHARED; + cluster.bb_sharing_policy = simgrid::s4u::Link::SharingPolicy::SHARED; break; default: surf_parse_error(std::string("Invalid bb sharing policy in cluster ") + cluster.id); @@ -530,12 +529,10 @@ void ETag_surfxml_cluster(){ void STag_surfxml_cluster(){ ZONE_TAG = 0; - parse_after_config(); xbt_assert(current_property_set == nullptr, "Someone forgot to reset the property set to nullptr in its closing tag (or XML malformed)"); } void STag_surfxml_cabinet(){ - parse_after_config(); simgrid::kernel::routing::CabinetCreationArgs cabinet; cabinet.id = A_surfxml_cabinet_id; cabinet.prefix = A_surfxml_cabinet_prefix; @@ -549,7 +546,6 @@ void STag_surfxml_cabinet(){ } void STag_surfxml_peer(){ - parse_after_config(); simgrid::kernel::routing::PeerCreationArgs peer; peer.id = std::string(A_surfxml_peer_id); @@ -587,17 +583,17 @@ void ETag_surfxml_link(){ switch (A_surfxml_link_sharing___policy) { case A_surfxml_link_sharing___policy_SHARED: - link.policy = SURF_LINK_SHARED; + link.policy = simgrid::s4u::Link::SharingPolicy::SHARED; break; case A_surfxml_link_sharing___policy_FATPIPE: - link.policy = SURF_LINK_FATPIPE; - break; + link.policy = simgrid::s4u::Link::SharingPolicy::FATPIPE; + break; case A_surfxml_link_sharing___policy_FULLDUPLEX: XBT_WARN("FULLDUPLEX is now deprecated. Please update your platform file to use SPLITDUPLEX instead."); - link.policy = SURF_LINK_SPLITDUPLEX; + link.policy = simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX; break; case A_surfxml_link_sharing___policy_SPLITDUPLEX: - link.policy = SURF_LINK_SPLITDUPLEX; + link.policy = simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX; break; default: surf_parse_error(std::string("Invalid sharing policy in link ") + link.id); @@ -613,13 +609,13 @@ void STag_surfxml_link___ctn() switch (A_surfxml_link___ctn_direction) { case AU_surfxml_link___ctn_direction: case A_surfxml_link___ctn_direction_NONE: - link = simgrid::kernel::resource::LinkImpl::byName(A_surfxml_link___ctn_id); + link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id))->get_impl(); break; case A_surfxml_link___ctn_direction_UP: - link = simgrid::kernel::resource::LinkImpl::byName(std::string(A_surfxml_link___ctn_id) + "_UP"); + link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id) + "_UP")->get_impl(); break; case A_surfxml_link___ctn_direction_DOWN: - link = simgrid::kernel::resource::LinkImpl::byName(std::string(A_surfxml_link___ctn_id) + "_DOWN"); + link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id) + "_DOWN")->get_impl(); break; default: surf_parse_error(std::string("Invalid direction for link ") + A_surfxml_link___ctn_id); @@ -648,10 +644,10 @@ void ETag_surfxml_backbone(){ link.id = std::string(A_surfxml_backbone_id); link.bandwidth = surf_parse_get_bandwidth(A_surfxml_backbone_bandwidth, "bandwidth of backbone", link.id.c_str()); link.latency = surf_parse_get_time(A_surfxml_backbone_latency, "latency of backbone", link.id.c_str()); - link.policy = SURF_LINK_SHARED; + link.policy = simgrid::s4u::Link::SharingPolicy::SHARED; sg_platf_new_link(&link); - routing_cluster_add_backbone(simgrid::kernel::resource::LinkImpl::byName(A_surfxml_backbone_id)); + routing_cluster_add_backbone(simgrid::s4u::Link::by_name(std::string(A_surfxml_backbone_id))->get_impl()); } void STag_surfxml_route(){ @@ -792,7 +788,6 @@ void ETag_surfxml_trace(){ void STag_surfxml_trace___connect() { - parse_after_config(); simgrid::kernel::routing::TraceConnectCreationArgs trace_connect; trace_connect.element = A_surfxml_trace___connect_element; @@ -836,7 +831,6 @@ void ETag_surfxml_AS() void STag_surfxml_zone() { - parse_after_config(); ZONE_TAG = 1; simgrid::kernel::routing::ZoneCreationArgs zone; zone.id = A_surfxml_zone_id; @@ -864,12 +858,19 @@ void STag_surfxml_config() void ETag_surfxml_config() { - for (auto const& elm : *current_property_set) { - if (xbt_cfg_is_default_value(elm.first.c_str())) { - std::string cfg = elm.first + ":" + elm.second; - xbt_cfg_set_parse(cfg.c_str()); + // Sort config elements before applying. + // That's a little waste of time, but not doing so would break the tests + std::vector keys; + for (auto const& kv : *current_property_set) { + keys.push_back(kv.first); + } + std::sort(keys.begin(), keys.end()); + for (std::string key : keys) { + if (simgrid::config::is_default(key.c_str())) { + std::string cfg = key + ":" + current_property_set->at(key); + simgrid::config::set_parse(std::move(cfg)); } else - XBT_INFO("The custom configuration '%s' is already defined by user!", elm.first.c_str()); + XBT_INFO("The custom configuration '%s' is already defined by user!", key.c_str()); } XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); @@ -937,7 +938,7 @@ void STag_surfxml_argument(){ void STag_surfxml_model___prop(){ if (not current_model_property_set) - current_model_property_set = new std::map(); + current_model_property_set = new std::unordered_map(); current_model_property_set->insert({A_surfxml_model___prop_id, A_surfxml_model___prop_value}); } @@ -946,7 +947,9 @@ void ETag_surfxml_prop(){/* Nothing to do */} void STag_surfxml_random(){/* Nothing to do */} void ETag_surfxml_random(){/* Nothing to do */} void ETag_surfxml_trace___connect(){/* Nothing to do */} -void STag_surfxml_trace(){parse_after_config();} +void STag_surfxml_trace() +{ /* Nothing to do */ +} void ETag_surfxml_router(){/*Nothing to do*/} void ETag_surfxml_host___link(){/* Nothing to do */} void ETag_surfxml_cabinet(){/* Nothing to do */} @@ -964,7 +967,7 @@ 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 = file; - std::string dir = simgrid::xbt::Path(file).getDirname(); + std::string dir = simgrid::xbt::Path(file).get_dir_name(); surf_path.push_back(dir); surf_file_to_parse = surf_fopen(file, "r");