Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Kill link_lib and have C++ handle the hashmap of all links
[simgrid.git] / src / surf / surf_routing.cpp
index de408ff..47fbded 100644 (file)
  */
 xbt_lib_t host_lib;
 
-int ROUTING_HOST_LEVEL;         //Routing level
-int SURF_CPU_LEVEL;             //Surf cpu level
 int SURF_HOST_LEVEL;            //Surf host level
-int SIMIX_HOST_LEVEL;           //Simix host level
 int SIMIX_STORAGE_LEVEL;        //Simix storage level
-int MSG_HOST_LEVEL;             //Msg host level
 int MSG_STORAGE_LEVEL;          //Msg storage level
 int MSG_FILE_LEVEL;             //Msg file level
-int SD_HOST_LEVEL;              //Simdag host level
 int SD_STORAGE_LEVEL;           //Simdag storage level
 int COORD_HOST_LEVEL=0;         //Coordinates level
 int NS3_HOST_LEVEL;             //host node for ns3
 
-/**
- * @ingroup SURF_build_api
- * @brief A library containing all known links
- */
-xbt_lib_t link_lib;
-int SD_LINK_LEVEL;              //Simdag level
-int SURF_LINK_LEVEL;            //Surf level
-
 xbt_lib_t as_router_lib;
 int ROUTING_ASR_LEVEL;          //Routing level
 int COORD_ASR_LEVEL;            //Coordinates level
@@ -58,7 +45,8 @@ static xbt_dict_t random_value = NULL;
  * Routing edges are either host and routers, whatever
  */
 RoutingEdgePtr sg_routing_edge_by_name_or_null(const char *name) {
-  RoutingEdgePtr net_elm = (RoutingEdgePtr) xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL);
+  sg_host_t h = sg_host_by_name(name);
+  RoutingEdgePtr net_elm = h==NULL?NULL: sg_host_edge(h);
   if (!net_elm)
        net_elm = (RoutingEdgePtr) xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL);
   return net_elm;
@@ -122,15 +110,15 @@ struct s_model_type routing_models[] = {
  */
 static void parse_S_host_link(sg_platf_host_link_cbarg_t host)
 {
-  RoutingEdgePtr info = static_cast<RoutingEdgePtr>(xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL));
+  RoutingEdgePtr info = sg_host_edge(sg_host_by_name(host->id));
   xbt_assert(info, "Host '%s' not found!", host->id);
   xbt_assert(current_routing->p_modelDesc == &routing_models[SURF_MODEL_CLUSTER] ||
       current_routing->p_modelDesc == &routing_models[SURF_MODEL_VIVALDI],
       "You have to be in model Cluster to use tag host_link!");
 
   s_surf_parsing_link_up_down_t link_up_down;
-  link_up_down.link_up = xbt_lib_get_or_null(link_lib, host->link_up, SURF_LINK_LEVEL);
-  link_up_down.link_down = xbt_lib_get_or_null(link_lib, host->link_down, SURF_LINK_LEVEL);
+  link_up_down.link_up = Link::byName(host->link_up);
+  link_up_down.link_down = Link::byName(host->link_down);
 
   xbt_assert(link_up_down.link_up, "Link '%s' not found!",host->link_up);
   xbt_assert(link_up_down.link_down, "Link '%s' not found!",host->link_down);
@@ -154,15 +142,15 @@ static void parse_S_host(sg_platf_host_cbarg_t host)
 {
   if (current_routing->p_hierarchy == SURF_ROUTING_NULL)
     current_routing->p_hierarchy = SURF_ROUTING_BASE;
-  xbt_assert(!xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL),
-             "Reading a host, processing unit \"%s\" already exists", host->id);
+  xbt_assert(!sg_host_by_name(host->id),
+                    "Reading a host, processing unit \"%s\" already exists", host->id);
 
   RoutingEdgePtr info = new RoutingEdgeImpl(xbt_strdup(host->id),
                                                    -1,
                                                    SURF_NETWORK_ELEMENT_HOST,
                                                    current_routing);
   info->setId(current_routing->parsePU(info));
-  xbt_lib_set(host_lib, host->id, ROUTING_HOST_LEVEL, (void *) info);
+  sg_host_edge_set(sg_host_by_name_or_create(host->id), info);
   XBT_DEBUG("Having set name '%s' id '%d'", host->id, info->getId());
 
   if(mount_list){
@@ -761,36 +749,36 @@ static void routing_parse_cabinet(sg_platf_cabinet_cbarg_t cabinet)
     s_sg_platf_host_cbarg_t host;
     memset(&host, 0, sizeof(host));
     host.initial_state = SURF_RESOURCE_ON;
-    host.pstate = 0;
-    host.power_scale = 1.0;
-    host.core_amount = 1;
+    host.pstate        = 0;
+    host.power_scale   = 1.0;
+    host.core_amount   = 1;
 
     s_sg_platf_link_cbarg_t link;
     memset(&link, 0, sizeof(link));
-    link.state = SURF_RESOURCE_ON;
-    link.policy = SURF_LINK_FULLDUPLEX;
-    link.latency = cabinet->lat;
+    link.state     = SURF_RESOURCE_ON;
+    link.policy    = SURF_LINK_FULLDUPLEX;
+    link.latency   = cabinet->lat;
     link.bandwidth = cabinet->bw;
 
     s_sg_platf_host_link_cbarg_t host_link;
     memset(&host_link, 0, sizeof(host_link));
 
     for (i = start; i <= end; i++) {
-      host_id = bprintf("%s%d%s",cabinet->prefix,i,cabinet->suffix);
-      link_id = bprintf("link_%s%d%s",cabinet->prefix,i,cabinet->suffix);
-      host.id = host_id;
-      link.id = link_id;
+      host_id                      = bprintf("%s%d%s",cabinet->prefix,i,cabinet->suffix);
+      link_id                      = bprintf("link_%s%d%s",cabinet->prefix,i,cabinet->suffix);
+      host.id                      = host_id;
+      link.id                      = link_id;
       xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL);
       xbt_dynar_push(power_state_list,&cabinet->power);
       host.power_peak = power_state_list;
       sg_platf_new_host(&host);
       sg_platf_new_link(&link);
 
-      char* link_up = bprintf("%s_UP",link_id);
-      char* link_down = bprintf("%s_DOWN",link_id);
-      host_link.id = host_id;
-      host_link.link_up = link_up;
-      host_link.link_down= link_down;
+      char* link_up       = bprintf("%s_UP",link_id);
+      char* link_down     = bprintf("%s_DOWN",link_id);
+      host_link.id        = host_id;
+      host_link.link_up   = link_up;
+      host_link.link_down = link_down;
       sg_platf_new_host_link(&host_link);
 
       free(host_id);
@@ -955,14 +943,13 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
 
 
         memset(&link, 0, sizeof(link));
-        link.id = tmp_link;
+        link.id        = tmp_link;
         link.bandwidth = cluster->loopback_bw;
-        link.latency = cluster->loopback_lat;
-        link.state = SURF_RESOURCE_ON;
-        link.policy = SURF_LINK_FATPIPE;
+        link.latency   = cluster->loopback_lat;
+        link.state     = SURF_RESOURCE_ON;
+        link.policy    = SURF_LINK_FATPIPE;
         sg_platf_new_link(&link);
-        info_loop.link_up =
-            xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+        info_loop.link_up   = Link::byName(tmp_link);
         info_loop.link_down = info_loop.link_up;
         free(tmp_link);
         xbt_dynar_set(current_routing->p_linkUpDownList, rankId*((AsClusterPtr)current_routing)->p_nb_links_per_node, &info_loop);
@@ -982,8 +969,7 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
         link.state = SURF_RESOURCE_ON;
         link.policy = SURF_LINK_SHARED;
         sg_platf_new_link(&link);
-        info_lim.link_up =
-            xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
+        info_lim.link_up = Link::byName(tmp_link);
         info_lim.link_down = info_lim.link_up;
         free(tmp_link);
         xbt_dynar_set(current_routing->p_linkUpDownList,
@@ -1040,15 +1026,15 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
               cluster->bb_bw, cluster->bb_lat);
 
     memset(&link, 0, sizeof(link));
-    link.id = link_backbone;
+    link.id        = link_backbone;
     link.bandwidth = cluster->bb_bw;
-    link.latency = cluster->bb_lat;
-    link.state = SURF_RESOURCE_ON;
-    link.policy = cluster->bb_sharing_policy;
+    link.latency   = cluster->bb_lat;
+    link.state     = SURF_RESOURCE_ON;
+    link.policy    = cluster->bb_sharing_policy;
 
     sg_platf_new_link(&link);
 
-    routing_cluster_add_backbone(xbt_lib_get_or_null(link_lib, link_backbone, SURF_LINK_LEVEL));
+    routing_cluster_add_backbone(Link::byName(link_backbone));
 
     free(link_backbone);
   }
@@ -1076,8 +1062,8 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
 
   XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", peer->id);
   s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
-  AS.id = peer->id;
-  AS.routing = A_surfxml_AS_routing_Cluster;
+  AS.id                    = peer->id;
+  AS.routing               = A_surfxml_AS_routing_Cluster;
   sg_platf_new_AS_begin(&AS);
 
   current_routing->p_linkUpDownList = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);
@@ -1101,8 +1087,8 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
 
   s_sg_platf_link_cbarg_t link;
   memset(&link, 0, sizeof(link));
-  link.state = SURF_RESOURCE_ON;
-  link.policy = SURF_LINK_SHARED;
+  link.state   = SURF_RESOURCE_ON;
+  link.policy  = SURF_LINK_SHARED;
   link.latency = peer->lat;
 
   char* link_up = bprintf("%s_UP",link_id);
@@ -1122,9 +1108,9 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
   XBT_DEBUG("<host_link\tid=\"%s\"\tup=\"%s\"\tdown=\"%s\" />", host_id,link_up,link_down);
   s_sg_platf_host_link_cbarg_t host_link;
   memset(&host_link, 0, sizeof(host_link));
-  host_link.id = host_id;
-  host_link.link_up = link_up;
-  host_link.link_down= link_down;
+  host_link.id        = host_id;
+  host_link.link_up   = link_up;
+  host_link.link_down = link_down;
   sg_platf_new_host_link(&host_link);
 
   XBT_DEBUG("<router id=\"%s\"/>", router_id);