Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
various cleanups
[simgrid.git] / src / surf / surf_routing.c
index 434ddf1..d176099 100644 (file)
@@ -32,12 +32,11 @@ int ROUTING_ASR_LEVEL;          //Routing level
 int COORD_ASR_LEVEL;            //Coordinates level
 int NS3_ASR_LEVEL;              //host node for ns3
 
-static xbt_dict_t patterns = NULL;
 static xbt_dict_t random_value = NULL;
 
 /* Global vars */
 routing_global_t global_routing = NULL;
-routing_component_t current_routing = NULL;
+AS_t current_routing = NULL;
 routing_model_description_t current_routing_model = NULL;
 
 /* global parse functions */
@@ -294,7 +293,7 @@ static void routing_parse_E_bypassRoute(void)
  */
 void routing_AS_begin(const char *AS_id, const char *wanted_routing_type)
 {
-  routing_component_t new_routing;
+  AS_t new_routing;
   routing_model_description_t model = NULL;
   int cpt;
 
@@ -313,7 +312,7 @@ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type)
   }
 
   /* make a new routing component */
-  new_routing = (routing_component_t) (*(model->create)) ();
+  new_routing = (AS_t) (*(model->create)) ();
   new_routing->routing = model;
   new_routing->hierarchy = SURF_ROUTING_NULL;
   new_routing->name = xbt_strdup(AS_id);
@@ -392,21 +391,21 @@ void routing_AS_end()
  * father in the chain
  */
 static void elements_father(const char *src, const char *dst,
-                            routing_component_t * res_father,
-                            routing_component_t * res_src,
-                            routing_component_t * res_dst)
+                            AS_t * res_father,
+                            AS_t * res_src,
+                            AS_t * res_dst)
 {
   xbt_assert(src && dst, "bad parameters for \"elements_father\" method");
 #define ELEMENTS_FATHER_MAXDEPTH 16     /* increase if it is not enough */
-  routing_component_t src_as, dst_as;
-  routing_component_t path_src[ELEMENTS_FATHER_MAXDEPTH];
-  routing_component_t path_dst[ELEMENTS_FATHER_MAXDEPTH];
+  AS_t src_as, dst_as;
+  AS_t path_src[ELEMENTS_FATHER_MAXDEPTH];
+  AS_t path_dst[ELEMENTS_FATHER_MAXDEPTH];
   int index_src = 0;
   int index_dst = 0;
-  routing_component_t current;
-  routing_component_t current_src;
-  routing_component_t current_dst;
-  routing_component_t father;
+  AS_t current;
+  AS_t current_src;
+  AS_t current_dst;
+  AS_t father;
 
   /* (1) find the as where the src and dst are located */
   network_element_info_t src_data = xbt_lib_get_or_null(host_lib, src,
@@ -474,9 +473,9 @@ static void _get_route_latency(const char *src, const char *dst,
   XBT_DEBUG("Solve route/latency  \"%s\" to \"%s\"", src, dst);
   xbt_assert(src && dst, "bad parameters for \"_get_route_latency\" method");
 
-  routing_component_t common_father;
-  routing_component_t src_father;
-  routing_component_t dst_father;
+  AS_t common_father;
+  AS_t src_father;
+  AS_t dst_father;
   elements_father(src, dst, &common_father, &src_father, &dst_father);
 
   if (src_father == dst_father) {       /* SURF_ROUTING_BASE */
@@ -661,9 +660,7 @@ static xbt_dynar_t get_route_no_cleanup(const char *src, const char *dst)
   return route;
 }
 
-/*Get Latency*/
-static double get_latency(const char *src, const char *dst)
-{
+static double get_latency(const char *src, const char *dst) {
   double latency = -1.0;
   get_route_latency(src, dst, NULL, &latency, 0);
   return latency;
@@ -677,23 +674,17 @@ static double get_latency(const char *src, const char *dst)
  * This fuction is call by "finalize". It allow to finalize the 
  * AS or routing components. It delete all the structures.
  */
-static void _finalize(routing_component_t rc)
-{
-  if (rc) {
-    xbt_dict_cursor_t cursor = NULL;
-    char *key;
-    routing_component_t elem;
-    xbt_dict_foreach(rc->routing_sons, cursor, key, elem) {
-      _finalize(elem);
-    }
-    xbt_dict_t tmp_sons = rc->routing_sons;
-    char *tmp_name = rc->name;
-    xbt_dict_free(&tmp_sons);
-    xbt_free(tmp_name);
-    xbt_assert(rc->finalize, "no defined method \"finalize\" in \"%s\"",
-               current_routing->name);
-    (*(rc->finalize)) (rc);
-  }
+static void finalize_rec(AS_t as) {
+  xbt_dict_cursor_t cursor = NULL;
+  char *key;
+  AS_t elem;
+
+  xbt_dict_foreach(as->routing_sons, cursor, key, elem)
+  finalize_rec(elem);
+
+  xbt_dict_free(&as->routing_sons);
+  xbt_free(as->name);
+  as->finalize(as);
 }
 
 /**
@@ -702,17 +693,13 @@ static void _finalize(routing_component_t rc)
  * walk through the routing components tree and delete the structures
  * by calling the different "finalize" functions in each routing component
  */
-static void finalize(void)
-{
-  /* delete recursively all the tree */
-  _finalize(global_routing->root);
-  /* delete last_route */
-  xbt_dynar_free(&(global_routing->last_route));
-  /* delete global routing structure */
+static void finalize(void) {
+  finalize_rec(global_routing->root);
+  xbt_dynar_free(&global_routing->last_route);
   xbt_free(global_routing);
 }
 
-static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc)
+static xbt_dynar_t recursive_get_onelink_routes(AS_t rc)
 {
   xbt_dynar_t ret = xbt_dynar_new(sizeof(onelink_t), xbt_free);
 
@@ -728,7 +715,7 @@ static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc)
   //recursing
   char *key;
   xbt_dict_cursor_t cursor = NULL;
-  routing_component_t rc_child;
+  AS_t rc_child;
   xbt_dict_foreach(rc->routing_sons, cursor, key, rc_child) {
     xbt_dynar_t onelink_child = recursive_get_onelink_routes(rc_child);
     if (onelink_child) {
@@ -836,14 +823,14 @@ void routing_model_create(size_t size_of_links, void *loopback)
 static void routing_parse_cluster(void)
 {
   char *host_id, *groups, *link_id = NULL;
+  xbt_dict_t patterns = NULL;
 
   s_sg_platf_host_cbarg_t host;
   s_sg_platf_link_cbarg_t link;
 
   if (strcmp(struct_cluster->availability_trace, "")
       || strcmp(struct_cluster->state_trace, "")) {
-    if (xbt_dict_size(patterns) == 0)
-      patterns = xbt_dict_new();
+    patterns = xbt_dict_new();
     xbt_dict_set(patterns, "id", xbt_strdup(struct_cluster->id), free);
     xbt_dict_set(patterns, "prefix", xbt_strdup(struct_cluster->prefix), free);
     xbt_dict_set(patterns, "suffix", xbt_strdup(struct_cluster->suffix), free);
@@ -1034,19 +1021,14 @@ static void routing_parse_cluster(void)
   xbt_dynar_free(&radical_elements);
   xbt_free(new_suffix);
 
-  if (strcmp(struct_cluster->availability_trace, "")
-      || strcmp(struct_cluster->state_trace, ""))
-    xbt_dict_free(&patterns);
-
   XBT_DEBUG("</AS>");
   sg_platf_new_AS_end();
   XBT_DEBUG(" ");
+  xbt_dict_free(&patterns); // no op if it were never set
 }
 
-static void routing_parse_postparse(void)
-{
+static void routing_parse_postparse(void) {
   xbt_dict_free(&random_value);
-  xbt_dict_free(&patterns);
 }
 
 static void routing_parse_peer(sg_platf_peer_cbarg_t peer)