Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
typo --
[simgrid.git] / src / surf / surf_routing.cpp
index f62f852..5c6e450 100644 (file)
@@ -401,7 +401,7 @@ void routing_AS_begin(sg_platf_AS_cbarg_t AS)
     /* add to the father element list */
     info->setId(current_routing->parseAS(info));
   } else {
-    THROWF(arg_error, 0, "All defined components must be belong to a AS");
+    THROWF(arg_error, 0, "All defined components must belong to a AS");
   }
 
   xbt_lib_set(as_router_lib, info->getName(), ROUTING_ASR_LEVEL,
@@ -1252,7 +1252,7 @@ static void check_disk_attachment()
          StoragePtr storage = static_cast<StoragePtr>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
          host_elm = sg_routing_edge_by_name_or_null(storage->p_attach);
          if(!host_elm)
-                 surf_parse_error("Enable to attach storage %s: host %s doesn't exist.", storage->getName(), storage->p_attach);
+                 surf_parse_error("Unable to attach storage %s: host %s doesn't exist.", storage->getName(), storage->p_attach);
     }
   }
 }
@@ -1325,6 +1325,32 @@ const char *surf_AS_get_name(AsPtr as) {
   return as->p_name;
 }
 
+static AsPtr surf_AS_recursive_get_by_name(AsPtr current, const char * name) {
+  xbt_dict_cursor_t cursor = NULL;
+  char *key;
+  AS_t elem;
+  AsPtr tmp = NULL;
+
+  if(!strcmp(current->p_name, name))
+    return current;
+
+  xbt_dict_foreach(current->p_routingSons, cursor, key, elem) {
+    tmp = surf_AS_recursive_get_by_name(elem, name);
+    if(tmp != NULL ) {
+        break;
+    }
+  }
+  return tmp;
+}
+
+
+AsPtr surf_AS_get_by_name(const char * name) {
+  AsPtr as = surf_AS_recursive_get_by_name(routing_platf->p_root, name);
+  if(as == NULL)
+    XBT_WARN("Impossible to find an AS with name %s, please check your input", name);
+  return as;
+}
+
 xbt_dict_t surf_AS_get_routing_sons(AsPtr as) {
   return as->p_routingSons;
 }