Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add a constructor to the generic parsing logic, and use it to factorize code
authorMartin Quinson <martin.quinson@loria.fr>
Thu, 10 Nov 2011 10:54:02 +0000 (11:54 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 10 Nov 2011 10:55:23 +0000 (11:55 +0100)
src/surf/surf_routing_dijkstra.c
src/surf/surf_routing_floyd.c
src/surf/surf_routing_full.c
src/surf/surf_routing_generic.c
src/surf/surf_routing_private.h
src/surf/surf_routing_rulebased.c

index 4d0ed98..9e58253 100644 (file)
@@ -445,26 +445,17 @@ static void dijkstra_finalize(routing_component_t rc)
 
 routing_component_t model_dijkstra_both_create(int cached)
 {
-  routing_component_dijkstra_t new_component =
-      xbt_new0(s_routing_component_dijkstra_t, 1);
-  new_component->generic_routing.set_processing_unit =
-      generic_set_processing_unit;
-  new_component->generic_routing.set_autonomous_system =
-      generic_set_autonomous_system;
+  routing_component_dijkstra_t new_component = (routing_component_dijkstra_t)
+      routmod_generic_create(sizeof(s_routing_component_dijkstra_t));
+
   new_component->generic_routing.set_route = model_dijkstra_both_set_route;
   new_component->generic_routing.set_ASroute = model_dijkstra_both_set_route;
-  new_component->generic_routing.set_bypassroute = generic_set_bypassroute;
   new_component->generic_routing.get_route = dijkstra_get_route;
-  new_component->generic_routing.get_latency = generic_get_link_latency;
   new_component->generic_routing.get_onelink_routes =
       dijkstra_get_onelink_routes;
-  new_component->generic_routing.get_bypass_route =
-      generic_get_bypassroute;
   new_component->generic_routing.finalize = dijkstra_finalize;
   new_component->cached = cached;
-  new_component->generic_routing.to_index = xbt_dict_new();
-  new_component->generic_routing.bypassRoutes = xbt_dict_new();
-  new_component->generic_routing.get_network_element_type = get_network_element_type;
+
   return (routing_component_t)new_component;
 }
 
index 4bd883a..88e5537 100644 (file)
@@ -176,25 +176,13 @@ static void floyd_finalize(routing_component_t rc)
 
 routing_component_t model_floyd_create(void)
 {
-  routing_component_floyd_t new_component =
-      xbt_new0(s_routing_component_floyd_t, 1);
-  new_component->generic_routing.set_processing_unit =
-      generic_set_processing_unit;
-  new_component->generic_routing.set_autonomous_system =
-      generic_set_autonomous_system;
+  routing_component_floyd_t new_component = (routing_component_floyd_t)routmod_generic_create(sizeof(s_routing_component_floyd_t));
   new_component->generic_routing.set_route = model_floyd_set_route;
   new_component->generic_routing.set_ASroute = model_floyd_set_route;
-  new_component->generic_routing.set_bypassroute = generic_set_bypassroute;
   new_component->generic_routing.get_route = floyd_get_route;
-  new_component->generic_routing.get_latency = generic_get_link_latency;
   new_component->generic_routing.get_onelink_routes =
       floyd_get_onelink_routes;
-  new_component->generic_routing.get_bypass_route =
-      generic_get_bypassroute;
   new_component->generic_routing.finalize = floyd_finalize;
-  new_component->generic_routing.to_index = xbt_dict_new();
-  new_component->generic_routing.bypassRoutes = xbt_dict_new();
-  new_component->generic_routing.get_network_element_type = get_network_element_type;
   return (routing_component_t)new_component;
 }
 
index 58fc09a..5457e71 100644 (file)
@@ -126,25 +126,16 @@ static void full_finalize(routing_component_t rc)
 
 routing_component_t model_full_create(void)
 {
-  routing_component_full_t new_component =
-      xbt_new0(s_routing_component_full_t, 1);
-  new_component->generic_routing.set_processing_unit =
-      generic_set_processing_unit;
-  new_component->generic_routing.set_autonomous_system =
-      generic_set_autonomous_system;
+  routing_component_full_t new_component = (routing_component_full_t)
+      routmod_generic_create(sizeof(s_routing_component_full_t));
+
   new_component->generic_routing.set_route = model_full_set_route;
   new_component->generic_routing.set_ASroute = model_full_set_route;
-  new_component->generic_routing.set_bypassroute = generic_set_bypassroute;
   new_component->generic_routing.get_route = full_get_route;
-  new_component->generic_routing.get_latency = generic_get_link_latency;
   new_component->generic_routing.get_onelink_routes =
       full_get_onelink_routes;
-  new_component->generic_routing.get_bypass_route =
-      generic_get_bypassroute;
   new_component->generic_routing.finalize = full_finalize;
-  new_component->generic_routing.to_index = xbt_dict_new();
-  new_component->generic_routing.bypassRoutes = xbt_dict_new();
-  new_component->generic_routing.get_network_element_type = get_network_element_type;
+
   return (routing_component_t) new_component;
 }
 
index aeaaf11..a3abea8 100644 (file)
@@ -16,6 +16,27 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_routing_generic, surf_route, "Generic imple
 
 extern routing_component_t current_routing;
 
+routing_component_t routmod_generic_create(size_t childsize) {
+  routing_component_t new_component = xbt_malloc0(childsize);
+
+  new_component->set_processing_unit = generic_set_processing_unit;
+  new_component->set_autonomous_system = generic_set_autonomous_system;
+  new_component->set_route = NULL;
+  new_component->set_ASroute = NULL;
+  new_component->set_bypassroute = generic_set_bypassroute;
+  new_component->get_route = NULL;
+  new_component->get_latency = generic_get_link_latency;
+  new_component->get_onelink_routes = NULL;
+  new_component->get_bypass_route =
+      generic_get_bypassroute;
+  new_component->finalize = NULL;
+  new_component->to_index = xbt_dict_new();
+  new_component->bypassRoutes = xbt_dict_new();
+  new_component->get_network_element_type = get_network_element_type;
+
+  return new_component;
+}
+
 
 void generic_set_processing_unit(routing_component_t rc, const char *name)
 {
index d017ca1..365244d 100644 (file)
@@ -21,6 +21,7 @@
 
 /* ************************************************************************** */
 /* ***************** GENERIC PARSE FUNCTIONS (declarations) ***************** */
+routing_component_t routmod_generic_create(size_t childsize);
 
 void generic_set_processing_unit(routing_component_t rc,
                                         const char *name);
index 611ad3e..23581f4 100644 (file)
@@ -394,10 +394,11 @@ static void rulebased_finalize(routing_component_t rc)
 }
 
 /* Creation routing model functions */
-routing_component_t model_rulebased_create(void)
-{
-  routing_component_rulebased_t new_component =
-      xbt_new0(s_routing_component_rulebased_t, 1);
+routing_component_t model_rulebased_create(void) {
+
+  routing_component_rulebased_t new_component = (routing_component_rulebased_t)
+      routmod_generic_create(sizeof(s_routing_component_rulebased_t));
+
   new_component->generic_routing.set_processing_unit =
       model_rulebased_set_processing_unit;
   new_component->generic_routing.set_autonomous_system =
@@ -407,10 +408,8 @@ routing_component_t model_rulebased_create(void)
   new_component->generic_routing.set_bypassroute = model_rulebased_set_bypassroute;
   new_component->generic_routing.get_onelink_routes = rulebased_get_onelink_routes;
   new_component->generic_routing.get_route = rulebased_get_route;
-  new_component->generic_routing.get_latency = generic_get_link_latency;
   new_component->generic_routing.get_bypass_route = rulebased_get_bypass_route;
   new_component->generic_routing.finalize = rulebased_finalize;
-  new_component->generic_routing.get_network_element_type = get_network_element_type;
   /* initialization of internal structures */
   new_component->dict_processing_units = xbt_dict_new();
   new_component->dict_autonomous_systems = xbt_dict_new();
@@ -418,5 +417,6 @@ routing_component_t model_rulebased_create(void)
   new_component->list_ASroute =
       xbt_dynar_new(sizeof(rule_route_extended_t),
                     &rule_route_extended_free);
+
   return (routing_component_t) new_component;
 }