X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/29a3b2869c0075fc75e8ccc66fc1d9c4c8bf6a85..23c4a29b7df1ed680b62ad1f2f868219adba0158:/src/kernel/routing/RoutedZone.cpp diff --git a/src/kernel/routing/RoutedZone.cpp b/src/kernel/routing/RoutedZone.cpp index 9ff45720de..40a7851af7 100644 --- a/src/kernel/routing/RoutedZone.cpp +++ b/src/kernel/routing/RoutedZone.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2020. 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. */ @@ -17,15 +17,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_routing_generic, surf_route, "Generic imple /* ***************************************************************** */ /* *********************** GENERIC METHODS ************************* */ -static const char* instr_node_name(xbt_node_t node) +xbt_node_t new_xbt_graph_node(const s_xbt_graph_t* graph, const char* name, std::map* nodes) { - void* data = xbt_graph_node_get_data(node); - return static_cast(data); -} - -xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, std::map* nodes) -{ - auto elm = nodes->find(name); if (elm == nodes->end()) { xbt_node_t ret = xbt_graph_new_node(graph, xbt_strdup(name)); @@ -35,10 +28,11 @@ xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, std::mapsecond; } -xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, std::map* edges) +xbt_edge_t new_xbt_graph_edge(const s_xbt_graph_t* graph, xbt_node_t s, xbt_node_t d, + std::map* edges) { - const char* sn = instr_node_name(s); - const char* dn = instr_node_name(d); + const auto* sn = static_cast(xbt_graph_node_get_data(s)); + const auto* dn = static_cast(xbt_graph_node_get_data(d)); std::string name = std::string(sn) + dn; auto elm = edges->find(name); @@ -59,22 +53,22 @@ namespace simgrid { namespace kernel { namespace routing { -RoutedZone::RoutedZone(NetZoneImpl* father, std::string name, resource::NetworkModel* netmodel) +RoutedZone::RoutedZone(NetZoneImpl* father, const std::string& name, resource::NetworkModel* netmodel) : NetZoneImpl(father, name, netmodel) { } -void RoutedZone::get_graph(xbt_graph_t graph, std::map* nodes, +void RoutedZone::get_graph(const s_xbt_graph_t* graph, std::map* nodes, std::map* edges) { - std::vector vertices = get_vertices(); + std::vector vertices = get_vertices(); for (auto const& my_src : vertices) { for (auto const& my_dst : vertices) { if (my_src == my_dst) continue; - RouteCreationArgs* route = new RouteCreationArgs(); + auto* route = new RouteCreationArgs(); get_local_route(my_src, my_dst, route, nullptr); @@ -121,11 +115,11 @@ void RoutedZone::get_graph(xbt_graph_t graph, std::map* /* ************************************************************************** */ /* ************************* GENERIC AUX FUNCTIONS ************************** */ /* change a route containing link names into a route containing link entities */ -RouteCreationArgs* RoutedZone::new_extended_route(RoutingMode hierarchy, NetPoint* src, NetPoint* dst, NetPoint* gw_src, - NetPoint* gw_dst, std::vector& link_list, - bool symmetrical, bool change_order) +RouteCreationArgs* RoutedZone::new_extended_route(RoutingMode hierarchy, NetPoint* gw_src, NetPoint* gw_dst, + const std::vector& link_list, + bool preserve_order) { - RouteCreationArgs* result = new RouteCreationArgs(); + auto* result = new RouteCreationArgs(); xbt_assert(hierarchy == RoutingMode::base || hierarchy == RoutingMode::recursive, "The hierarchy of this netzone is neither BASIC nor RECURSIVE, I'm lost here."); @@ -137,24 +131,22 @@ RouteCreationArgs* RoutedZone::new_extended_route(RoutingMode hierarchy, NetPoin result->gw_dst = gw_dst; } - for (auto const& link : link_list) { - if (change_order) - result->link_list.push_back(link); - else - result->link_list.insert(result->link_list.begin(), link); - } + if (preserve_order) + result->link_list = link_list; + else + result->link_list.assign(link_list.rbegin(), link_list.rend()); // reversed result->link_list.shrink_to_fit(); return result; } -void RoutedZone::get_route_check_params(NetPoint* src, NetPoint* dst) +void RoutedZone::get_route_check_params(NetPoint* src, NetPoint* dst) const { xbt_assert(src, "Cannot find a route from nullptr to %s", dst->get_cname()); xbt_assert(dst, "Cannot find a route from %s to nullptr", src->get_cname()); - NetZoneImpl* src_as = src->get_englobing_zone(); - NetZoneImpl* dst_as = dst->get_englobing_zone(); + const NetZoneImpl* src_as = src->get_englobing_zone(); + const NetZoneImpl* dst_as = dst->get_englobing_zone(); xbt_assert(src_as == dst_as, "Internal error: %s@%s and %s@%s are not in the same netzone as expected. Please report that bug.", @@ -166,7 +158,7 @@ void RoutedZone::get_route_check_params(NetPoint* src, NetPoint* dst) src->get_cname(), dst->get_cname(), src_as->get_cname(), dst_as->get_cname(), get_cname()); } void RoutedZone::add_route_check_params(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, - std::vector& link_list, bool symmetrical) + const std::vector& link_list, bool symmetrical) const { const char* srcName = src->get_cname(); const char* dstName = dst->get_cname(); @@ -182,15 +174,16 @@ void RoutedZone::add_route_check_params(NetPoint* src, NetPoint* dst, NetPoint* xbt_assert(not dst->is_netzone(), "When defining a route, dst cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?", dstName); + s4u::NetZone::on_route_creation(symmetrical, src, dst, gw_src, gw_dst, link_list); } else { XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", srcName, gw_src->get_cname(), dstName, gw_dst->get_cname()); xbt_assert(src->is_netzone(), "When defining a NetzoneRoute, src must be a netzone but '%s' is not", srcName); xbt_assert(dst->is_netzone(), "When defining a NetzoneRoute, dst must be a netzone but '%s' is not", dstName); xbt_assert(gw_src->is_host() || gw_src->is_router(), - "When defining a NetzoneRoute, gw_src must be an host or a router but '%s' is not.", srcName); + "When defining a NetzoneRoute, gw_src must be a host or a router but '%s' is not.", srcName); xbt_assert(gw_dst->is_host() || gw_dst->is_router(), - "When defining a NetzoneRoute, gw_dst must be an host or a router but '%s' is not.", dstName); + "When defining a NetzoneRoute, gw_dst must be a host or a router but '%s' is not.", dstName); xbt_assert(gw_src != gw_dst, "Cannot define an NetzoneRoute from '%s' to itself", gw_src->get_cname()); @@ -200,10 +193,9 @@ void RoutedZone::add_route_check_params(NetPoint* src, NetPoint* dst, NetPoint* gw_dst->get_cname(), dstName); xbt_assert(not link_list.empty(), "Empty route (between %s@%s and %s@%s) forbidden.", srcName, gw_src->get_cname(), dstName, gw_dst->get_cname()); + s4u::NetZone::on_route_creation(symmetrical, gw_src, gw_dst, gw_src, gw_dst, link_list); } - - get_iface()->on_route_creation(symmetrical, src, dst, gw_src, gw_dst, link_list); -} -} -} } +} // namespace routing +} // namespace kernel +} // namespace simgrid