Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
implementing recursive call to get_onelink_routes
authorschnorr <schnorr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 4 Oct 2010 15:55:54 +0000 (15:55 +0000)
committerschnorr <schnorr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 4 Oct 2010 15:55:54 +0000 (15:55 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8346 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/surf_routing.c

index 7334b26..a0b74ee 100644 (file)
@@ -677,9 +677,38 @@ static void finalize(void) {
   xbt_free(global_routing);
 }
 
+static xbt_dynar_t recursive_get_onelink_routes (routing_component_t rc)
+{
+  xbt_dynar_t ret = xbt_dynar_new (sizeof(onelink_t), xbt_free);
+
+  //adding my one link routes
+  unsigned int cpt;
+  void *link;
+  xbt_dynar_t onelink_mine = rc->get_onelink_routes (rc);
+  if (onelink_mine){
+    xbt_dynar_foreach(onelink_mine, cpt, link) {
+      xbt_dynar_push(ret,&link);
+    }
+  }
+
+  //recursing
+  char *key;
+  xbt_dict_cursor_t cursor=NULL;
+  routing_component_t rc_child;
+  xbt_dict_foreach(rc->routing_sons, cursor, key, rc_child) {
+    xbt_dynar_t onelink_child = recursive_get_onelink_routes (rc_child);//->get_onelink_routes (rc_child);
+    if (onelink_child){
+      xbt_dynar_foreach(onelink_child, cpt, link) {
+        xbt_dynar_push(ret,&link);
+      }
+    }
+  }
+  return ret;
+}
+
 static xbt_dynar_t get_onelink_routes(void)
 {
-       xbt_die("global \"get_onelink_routes\" function not implemented yet");
+  return recursive_get_onelink_routes (global_routing->root);
 }
 
 static int is_router(const char *name)