Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Factorize common code to assemble vector<LinkImpl*> and update latency.
[simgrid.git] / src / kernel / routing / DijkstraZone.cpp
index 374536c..83024b4 100644 (file)
@@ -84,7 +84,7 @@ xbt_node_t DijkstraZone::node_map_search(int id)
 
 /* Parsing */
 
-void DijkstraZone::get_local_route(NetPoint* src, NetPoint* dst, Route* route, double* lat)
+void DijkstraZone::get_local_route(const NetPoint* src, const NetPoint* dst, Route* route, double* lat)
 {
   get_route_check_params(src, dst);
   int src_id = src->id();
@@ -110,11 +110,7 @@ void DijkstraZone::get_local_route(NetPoint* src, NetPoint* dst, Route* route, d
 
     const Route* e_route = static_cast<Route*>(xbt_graph_edge_get_data(edge));
 
-    for (auto const& link : e_route->link_list_) {
-      route->link_list_.insert(route->link_list_.begin(), link);
-      if (lat)
-        *lat += link->get_latency();
-    }
+    insert_link_latency(route->link_list_, e_route->link_list_, lat);
   }
 
   auto elm                   = route_cache_.emplace(src_id, std::vector<int>());
@@ -190,23 +186,14 @@ void DijkstraZone::get_local_route(NetPoint* src, NetPoint* dst, Route* route, d
         gw_dst->get_name() != prev_gw_src->get_name()) {
       std::vector<resource::LinkImpl*> e_route_as_to_as;
 
-      NetPoint* gw_dst_net_elm      = nullptr;
-      NetPoint* prev_gw_src_net_elm = nullptr;
+      const NetPoint* gw_dst_net_elm      = nullptr;
+      const NetPoint* prev_gw_src_net_elm = nullptr;
       get_global_route(gw_dst_net_elm, prev_gw_src_net_elm, e_route_as_to_as, nullptr);
-      auto pos = route->link_list_.begin();
-      for (auto const& link : e_route_as_to_as) {
-        route->link_list_.insert(pos, link);
-        if (lat)
-          *lat += link->get_latency();
-        pos++;
-      }
+      std::reverse(begin(e_route_as_to_as), end(e_route_as_to_as));
+      insert_link_latency(route->link_list_, e_route_as_to_as, lat);
     }
 
-    for (auto const& link : e_route->link_list_) {
-      route->link_list_.insert(route->link_list_.begin(), link);
-      if (lat)
-        *lat += link->get_latency();
-    }
+    insert_link_latency(route->link_list_, e_route->link_list_, lat);
   }
 
   if (get_hierarchy() == RoutingMode::recursive) {