Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix delete/free mismatch.
[simgrid.git] / src / surf / surf_routing_full.cpp
index 7e5f14d..23b320f 100644 (file)
@@ -1,4 +1,9 @@
-#include "surf_routing_private.h"
+/* Copyright (c) 2009-2013. 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 "surf_routing_full.hpp"
 #include "network.hpp"
 
@@ -19,12 +24,12 @@ AS_t model_full_create(void)
 
 void model_full_end(AS_t _routing)
 {
-  unsigned int i;
+  int i;
   sg_platf_route_cbarg_t e_route;
 
   /* set utils vars */
   AsFullPtr routing = ((AsFullPtr) _routing);
-  size_t table_size = xbt_dynar_length(routing->p_indexNetworkElm);
+  int table_size = (int)xbt_dynar_length(routing->p_indexNetworkElm);
 
   /* Create table if necessary */
   if (!routing->p_routingTable)
@@ -47,21 +52,22 @@ void model_full_end(AS_t _routing)
 }
 
 AsFull::AsFull(){
+  p_routingTable = 0;
 }
 
 AsFull::~AsFull(){
-  size_t table_size = xbt_dynar_length(p_indexNetworkElm);
+  int table_size = (int)xbt_dynar_length(p_indexNetworkElm);
   int i, j;
   /* Delete routing table */
   for (i = 0; i < table_size; i++)
     for (j = 0; j < table_size; j++)
-      delete TO_ROUTE_FULL(i,j);
+      xbt_free(TO_ROUTE_FULL(i,j));
   xbt_free(p_routingTable);
 }
 
 xbt_dynar_t AsFull::getOneLinkRoutes()
 {
-  xbt_dynar_t ret = xbt_dynar_new(sizeof(onelink_t), xbt_free);
+  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free);
 
   int src, dst;
   int table_size = xbt_dynar_length(p_indexNetworkElm);
@@ -72,17 +78,17 @@ xbt_dynar_t AsFull::getOneLinkRoutes()
       if (route) {
         if (xbt_dynar_length(route->link_list) == 1) {
           void *link = *(void **) xbt_dynar_get_ptr(route->link_list, 0);
-          onelink_t onelink = xbt_new0(s_onelink_t, 1);
-          onelink->link_ptr = link;
+          OnelinkPtr onelink;
           if (p_hierarchy == SURF_ROUTING_BASE) {
-            onelink->src = xbt_dynar_get_as(p_indexNetworkElm, src, sg_routing_edge_t);
-            onelink->src->m_id = src;
-            onelink->dst = xbt_dynar_get_as(p_indexNetworkElm, dst, sg_routing_edge_t);
-            onelink->dst->m_id = dst;
-          } else if (p_hierarchy == SURF_ROUTING_RECURSIVE) {
-            onelink->src = route->gw_src;
-            onelink->dst = route->gw_dst;
-          }
+               RoutingEdgePtr tmp_src = xbt_dynar_get_as(p_indexNetworkElm, src, sg_routing_edge_t);
+            tmp_src->m_id = src;
+               RoutingEdgePtr tmp_dst = xbt_dynar_get_as(p_indexNetworkElm, dst, sg_routing_edge_t);
+               tmp_dst->m_id = dst;
+            onelink = new Onelink(link, tmp_src, tmp_dst);
+          } else if (p_hierarchy == SURF_ROUTING_RECURSIVE)
+            onelink = new Onelink(link, route->gw_src, route->gw_dst);
+          else
+            onelink = new Onelink(link, NULL, NULL);
           xbt_dynar_push(ret, &onelink);
           XBT_DEBUG("Push route from '%d' to '%d'",
               src,
@@ -106,7 +112,7 @@ void AsFull::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf
   size_t table_size = xbt_dynar_length(p_indexNetworkElm);
 
   sg_platf_route_cbarg_t e_route = NULL;
-  NetworkCm02LinkPtr link;
+  void *link;
   unsigned int cpt = 0;
 
   e_route = TO_ROUTE_FULL(src->m_id, dst->m_id);
@@ -117,7 +123,7 @@ void AsFull::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf
     xbt_dynar_foreach(e_route->link_list, cpt, link) {
       xbt_dynar_push(res->link_list, &link);
       if (lat)
-        *lat += link->getLatency();
+        *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
     }
   }
 }