From: Martin Quinson Date: Thu, 3 Nov 2016 21:49:17 +0000 (+0100) Subject: unPERLifies a bit the routing: use the object, not its name X-Git-Tag: v3_14~238^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4b8be43e2c03939bc780b6112d841d8b839a79bb unPERLifies a bit the routing: use the object, not its name --- diff --git a/include/simgrid/s4u/As.hpp b/include/simgrid/s4u/As.hpp index 35eb03bf6e..72921f9594 100644 --- a/include/simgrid/s4u/As.hpp +++ b/include/simgrid/s4u/As.hpp @@ -66,7 +66,7 @@ private: bool sealed_ = false; // We cannot add more content when sealed - std::map, std::vector*> bypassRoutes_; // src x dst -> route + std::map, std::vector*> bypassRoutes_; // src x dst -> route xbt_dict_t children_ = xbt_dict_new_homogeneous(nullptr); // sub-ASes }; diff --git a/src/kernel/routing/AsImpl.cpp b/src/kernel/routing/AsImpl.cpp index 1509825091..30fe08537a 100644 --- a/src/kernel/routing/AsImpl.cpp +++ b/src/kernel/routing/AsImpl.cpp @@ -158,8 +158,8 @@ namespace simgrid { /* Base case, no recursion is needed */ if (dst->containingAS() == this && src->containingAS() == this) { - if (bypassRoutes_.find({src->name(), dst->name()}) != bypassRoutes_.end()) { - std::vector* bypassedRoute = bypassRoutes_.at({src->name(), dst->name()}); + if (bypassRoutes_.find({src, dst}) != bypassRoutes_.end()) { + std::vector* bypassedRoute = bypassRoutes_.at({src, dst}); for (surf::Link* link : *bypassedRoute) { links->push_back(link); if (latency) @@ -176,17 +176,17 @@ namespace simgrid { std::vector* bypassedRoute = nullptr; /* (1) find the path to the root routing component */ - std::vector path_src; + std::vector path_src; As* current = src->containingAS(); while (current != nullptr) { - path_src.push_back(current); + path_src.push_back(static_cast(current)); current = current->father_; } - std::vector path_dst; + std::vector path_dst; current = dst->containingAS(); while (current != nullptr) { - path_dst.push_back(current); + path_dst.push_back(static_cast(current)); current = current->father_; } @@ -202,17 +202,18 @@ namespace simgrid { int max_index = std::max(max_index_src, max_index_dst); + std::pair key; for (int max = 0; max <= max_index; max++) { for (int i = 0; i < max; i++) { if (i <= max_index_src && max <= max_index_dst) { - const std::pair key = {path_src.at(i)->name(), path_dst.at(max)->name()}; + key = {path_src.at(i)->netcard_, path_dst.at(max)->netcard_}; if (bypassRoutes_.find(key) != bypassRoutes_.end()) { bypassedRoute = bypassRoutes_.at(key); break; } } if (max <= max_index_src && i <= max_index_dst) { - const std::pair key = {path_src.at(max)->name(), path_dst.at(i)->name()}; + key = {path_src.at(max)->netcard_, path_dst.at(i)->netcard_}; if (bypassRoutes_.find(key) != bypassRoutes_.end()) { bypassedRoute = bypassRoutes_.at(key); break; @@ -224,7 +225,7 @@ namespace simgrid { break; if (max <= max_index_src && max <= max_index_dst) { - const std::pair key = {path_src.at(max)->name(), path_dst.at(max)->name()}; + key = {path_src.at(max)->netcard_, path_dst.at(max)->netcard_}; if (bypassRoutes_.find(key) != bypassRoutes_.end()) { bypassedRoute = bypassRoutes_.at(key); break; diff --git a/src/s4u/s4u_as.cpp b/src/s4u/s4u_as.cpp index 6a6f4ca44f..0a14f8dd76 100644 --- a/src/s4u/s4u_as.cpp +++ b/src/s4u/s4u_as.cpp @@ -82,14 +82,14 @@ namespace simgrid { xbt_assert(!e_route->link_list->empty(), "Bypass route between %s@%s and %s@%s cannot be empty.", e_route->src->name().c_str(), e_route->gw_src->name().c_str(), e_route->dst->name().c_str(), e_route->gw_dst->name().c_str()); - xbt_assert(bypassRoutes_.find({e_route->src->name(), e_route->dst->name()}) == bypassRoutes_.end(), + xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(), "The bypass route between %s@%s and %s@%s already exists.", e_route->src->name().c_str(), e_route->gw_src->name().c_str(), e_route->dst->name().c_str(), e_route->gw_dst->name().c_str()); } else { XBT_DEBUG("Load bypassRoute from %s to %s", e_route->src->name().c_str(), e_route->dst->name().c_str()); xbt_assert(!e_route->link_list->empty(), "Bypass route between %s and %s cannot be empty.", e_route->src->name().c_str(), e_route->dst->name().c_str()); - xbt_assert(bypassRoutes_.find({e_route->src->name(), e_route->dst->name()}) == bypassRoutes_.end(), + xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(), "The bypass route between %s and %s already exists.", e_route->src->name().c_str(), e_route->dst->name().c_str()); } @@ -100,6 +100,6 @@ namespace simgrid { newRoute->push_back(link); /* Store it */ - bypassRoutes_.insert({{e_route->src->name(), e_route->dst->name()}, newRoute}); + bypassRoutes_.insert({{e_route->src, e_route->dst}, newRoute}); } } }; // namespace simgrid::s4u