Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
unPERLifies a bit the routing: use the object, not its name
[simgrid.git] / src / kernel / routing / AsImpl.cpp
index 1509825..30fe085 100644 (file)
@@ -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<surf::Link*>* bypassedRoute = bypassRoutes_.at({src->name(), dst->name()});
+      if (bypassRoutes_.find({src, dst}) != bypassRoutes_.end()) {
+        std::vector<surf::Link*>* bypassedRoute = bypassRoutes_.at({src, dst});
         for (surf::Link* link : *bypassedRoute) {
           links->push_back(link);
           if (latency)
@@ -176,17 +176,17 @@ namespace simgrid {
     std::vector<surf::Link*>* bypassedRoute = nullptr;
 
     /* (1) find the path to the root routing component */
-    std::vector<As*> path_src;
+    std::vector<AsImpl*> path_src;
     As* current = src->containingAS();
     while (current != nullptr) {
-      path_src.push_back(current);
+      path_src.push_back(static_cast<AsImpl*>(current));
       current = current->father_;
     }
 
-    std::vector<As*> path_dst;
+    std::vector<AsImpl*> path_dst;
     current = dst->containingAS();
     while (current != nullptr) {
-      path_dst.push_back(current);
+      path_dst.push_back(static_cast<AsImpl*>(current));
       current = current->father_;
     }
 
@@ -202,17 +202,18 @@ namespace simgrid {
 
     int max_index = std::max(max_index_src, max_index_dst);
 
+    std::pair<kernel::routing::NetCard*, kernel::routing::NetCard*> 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<std::string, std::string> 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<std::string, std::string> 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<std::string, std::string> 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;