Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Install some kernel header files for the users' plugins and more
[simgrid.git] / src / kernel / routing / DijkstraZone.cpp
index 85dfd1a..0224455 100644 (file)
@@ -1,10 +1,10 @@
-/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2009-2018. 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. */
 
-#include "src/kernel/routing/DijkstraZone.hpp"
-#include "src/kernel/routing/NetPoint.hpp"
+#include "simgrid/kernel/routing/DijkstraZone.hpp"
+#include "simgrid/kernel/routing/NetPoint.hpp"
 #include "src/surf/network_interface.hpp"
 
 #include <cfloat>
@@ -17,14 +17,12 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_dijkstra, surf, "Routing part of surf
 
 static void graph_node_data_free(void* n)
 {
-  graph_node_data_t data = static_cast<graph_node_data_t>(n);
-  delete data;
+  delete static_cast<graph_node_data_t>(n);
 }
 
 static void graph_edge_data_free(void* e)
 {
-  sg_platf_route_cbarg_t e_route = static_cast<sg_platf_route_cbarg_t>(e);
-  delete e_route;
+  delete static_cast<RouteCreationArgs*>(e);
 }
 
 /* Utility functions */
@@ -56,7 +54,7 @@ void DijkstraZone::seal()
       }
 
       if (not found) {
-        sg_platf_route_cbarg_t e_route = new s_sg_platf_route_cbarg_t;
+        RouteCreationArgs* e_route = new RouteCreationArgs();
         e_route->link_list.push_back(surf_network_model->loopback_);
         xbt_graph_new_edge(routeGraph_, node, node, e_route);
       }
@@ -92,7 +90,7 @@ xbt_node_t DijkstraZone::nodeMapSearch(int id)
 
 /* Parsing */
 
-void DijkstraZone::newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_route)
+void DijkstraZone::newRoute(int src_id, int dst_id, RouteCreationArgs* e_route)
 {
   XBT_DEBUG("Load Route from \"%d\" to \"%d\"", src_id, dst_id);
   xbt_node_t src = nullptr;
@@ -124,7 +122,7 @@ void DijkstraZone::newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_rou
   xbt_graph_new_edge(routeGraph_, src, dst, e_route);
 }
 
-void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat)
+void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat)
 {
   getRouteCheckParams(src, dst);
   int src_id = src->id();
@@ -149,7 +147,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
     if (edge == nullptr)
       THROWF(arg_error, 0, "No route from '%s' to '%s'", src->getCname(), dst->getCname());
 
-    sg_platf_route_cbarg_t e_route = static_cast<sg_platf_route_cbarg_t>(xbt_graph_edge_get_data(edge));
+    RouteCreationArgs* e_route = static_cast<RouteCreationArgs*>(xbt_graph_edge_get_data(edge));
 
     for (auto const& link : e_route->link_list) {
       route->link_list.insert(route->link_list.begin(), link);
@@ -194,7 +192,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
         xbt_node_t u_node                  = xbt_graph_edge_get_target(edge);
         graph_node_data_t data             = static_cast<graph_node_data_t>(xbt_graph_node_get_data(u_node));
         int u_id                           = data->graph_id;
-        sg_platf_route_cbarg_t tmp_e_route = static_cast<sg_platf_route_cbarg_t>(xbt_graph_edge_get_data(edge));
+        RouteCreationArgs* tmp_e_route     = static_cast<RouteCreationArgs*>(xbt_graph_edge_get_data(edge));
         int cost_v_u                       = tmp_e_route->link_list.size(); /* count of links, old model assume 1 */
 
         if (cost_v_u + cost_arr[v_id] < cost_arr[u_id]) {
@@ -219,7 +217,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
     if (edge == nullptr)
       THROWF(arg_error, 0, "No route from '%s' to '%s'", src->getCname(), dst->getCname());
 
-    sg_platf_route_cbarg_t e_route = static_cast<sg_platf_route_cbarg_t>(xbt_graph_edge_get_data(edge));
+    RouteCreationArgs* e_route = static_cast<RouteCreationArgs*>(xbt_graph_edge_get_data(edge));
 
     NetPoint* prev_gw_src          = gw_src;
     gw_src                         = e_route->gw_src;
@@ -270,14 +268,14 @@ DijkstraZone::DijkstraZone(NetZone* father, std::string name, bool cached) : Rou
 {
 }
 
-void DijkstraZone::addRoute(sg_platf_route_cbarg_t route)
+void DijkstraZone::addRoute(kernel::routing::NetPoint* src, kernel::routing::NetPoint* dst,
+                            kernel::routing::NetPoint* gw_src, kernel::routing::NetPoint* gw_dst,
+                            std::vector<simgrid::surf::LinkImpl*>& link_list, bool symmetrical)
 {
-  NetPoint* src       = route->src;
-  NetPoint* dst       = route->dst;
   const char* srcName = src->getCname();
   const char* dstName = dst->getCname();
 
-  addRouteCheckParams(route);
+  addRouteCheckParams(src, dst, gw_src, gw_dst, link_list, symmetrical);
 
   /* Create the topology graph */
   if (not routeGraph_)
@@ -287,35 +285,35 @@ void DijkstraZone::addRoute(sg_platf_route_cbarg_t route)
    * nodes */
 
   /* Add the route to the base */
-  sg_platf_route_cbarg_t e_route = newExtendedRoute(hierarchy_, route, 1);
+  RouteCreationArgs* e_route = newExtendedRoute(hierarchy_, src, dst, gw_src, gw_dst, link_list, symmetrical, 1);
   newRoute(src->id(), dst->id(), e_route);
 
   // Symmetrical YES
-  if (route->symmetrical == true) {
+  if (symmetrical == true) {
 
     xbt_dynar_t nodes   = xbt_graph_get_nodes(routeGraph_);
     xbt_node_t node_s_v = xbt_dynar_get_as(nodes, src->id(), xbt_node_t);
     xbt_node_t node_e_v = xbt_dynar_get_as(nodes, dst->id(), xbt_node_t);
     xbt_edge_t edge     = xbt_graph_get_edge(routeGraph_, node_e_v, node_s_v);
 
-    if (not route->gw_dst || not route->gw_src){
+    if (not gw_dst || not gw_src) {
       XBT_DEBUG("Load Route from \"%s\" to \"%s\"", dstName, srcName);
       if (edge)
         THROWF(arg_error, 0, "Route from %s to %s already exists", dstName, srcName);
     } else {
-      XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", dstName, route->gw_dst->getCname(), srcName,
-                route->gw_src->getCname());
+      XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", dstName, gw_dst->getCname(), srcName, gw_src->getCname());
       if (edge)
-        THROWF(arg_error, 0, "Route from %s@%s to %s@%s already exists", dstName, route->gw_dst->getCname(), srcName,
-               route->gw_src->getCname());
+        THROWF(arg_error, 0, "Route from %s@%s to %s@%s already exists", dstName, gw_dst->getCname(), srcName,
+               gw_src->getCname());
     }
 
-    if (route->gw_dst && route->gw_src) {
-      NetPoint* gw_tmp = route->gw_src;
-      route->gw_src   = route->gw_dst;
-      route->gw_dst   = gw_tmp;
+    if (gw_dst && gw_src) {
+      NetPoint* gw_tmp = gw_src;
+      gw_src           = gw_dst;
+      gw_dst           = gw_tmp;
     }
-    sg_platf_route_cbarg_t link_route_back = newExtendedRoute(hierarchy_, route, 0);
+    RouteCreationArgs* link_route_back =
+        newExtendedRoute(hierarchy_, src, dst, gw_src, gw_dst, link_list, symmetrical, 0);
     newRoute(dst->id(), src->id(), link_route_back);
   }
 }