Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Ouups, forgot those two files, bummer
[simgrid.git] / src / surf / workstation_ptask_L07.c
index caf3afe..ea27318 100644 (file)
@@ -9,7 +9,6 @@
 #include "xbt/str.h"
 #include "xbt/dict.h"
 #include "surf_private.h"
-/* extern lmm_system_t maxmin_system; */
 
 typedef enum {
   SURF_WORKSTATION_RESOURCE_CPU,
@@ -20,10 +19,9 @@ typedef enum {
 /********* cpu object *****************/
 /**************************************/
 typedef struct cpu_L07 {
-  surf_model_t model;           /* Do not move this field: must match model_obj_t */
+  s_surf_resource_t generic_resource;  /* Do not move this field: must match surf_resource_t */
   xbt_dict_t properties;        /* Do not move this field: must match link_L07_t */
   e_surf_workstation_model_type_t type; /* Do not move this field: must match link_L07_t */
-  char *name;                   /* Do not move this field: must match link_L07_t */
   lmm_constraint_t constraint;  /* Do not move this field: must match link_L07_t */
   double power_scale;
   double power_current;
@@ -38,10 +36,9 @@ typedef struct cpu_L07 {
 /**************************************/
 
 typedef struct link_L07 {
-  surf_model_t model;           /* Do not move this field: must match model_obj_t */
+  s_surf_resource_t generic_resource;  /* Do not move this field: must match surf_resource_t */
   xbt_dict_t properties;        /* Do not move this field: must match link_L07_t */
   e_surf_workstation_model_type_t type; /* Do not move this field: must match cpu_L07_t */
-  char *name;                   /* Do not move this field: must match cpu_L07_t */
   lmm_constraint_t constraint;  /* Do not move this field: must match cpu_L07_t */
   double lat_current;
   tmgr_trace_event_t lat_event;
@@ -124,20 +121,6 @@ static void update_action_bound(surf_action_workstation_L07_t action)
 /******* Resource Public     **********/
 /**************************************/
 
-static void *name_service(const char *name)
-{
-  return xbt_dict_get_or_null(workstation_set, name);
-}
-
-static const char *get_resource_name(void *resource_id)
-{
-  /* We can freely cast as a cpu_L07_t because it has the same
-     prefix as link_L07_t. However, only cpu_L07_t
-     will theoretically be given as an argument here. */
-
-  return ((cpu_L07_t) resource_id)->name;
-}
-
 static xbt_dict_t get_properties(void *r)
 {
   /* We can freely cast as a cpu_L07_t since it has the same prefix than link_L07_t */
@@ -176,12 +159,6 @@ static void action_cancel(surf_action_t action)
   return;
 }
 
-static void action_recycle(surf_action_t action)
-{
-  DIE_IMPOSSIBLE;
-  return;
-}
-
 /* action_change_state is inherited from the surf module */
 /* action_set_data is inherited from the surf module */
 
@@ -248,7 +225,7 @@ static double share_resources(double now)
   surf_action_workstation_L07_t action = NULL;
 
   xbt_swag_t running_actions =
-    surf_workstation_model->common_public->states.running_action_set;
+    surf_workstation_model->states.running_action_set;
   double min = generic_maxmin_share_resources(running_actions,
                                               xbt_swag_offset(s_action,
                                                               variable),
@@ -280,7 +257,7 @@ static void update_actions_state(double now, double delta)
   surf_action_workstation_L07_t action = NULL;
   surf_action_workstation_L07_t next_action = NULL;
   xbt_swag_t running_actions =
-    surf_workstation_model->common_public->states.running_action_set;
+    surf_workstation_model->states.running_action_set;
 
   xbt_swag_foreach_safe(action, next_action, running_actions) {
     deltap = delta;
@@ -369,7 +346,7 @@ static void update_resource_state(void *id,
   link_L07_t nw_link = id;
 
   if (nw_link->type == SURF_WORKSTATION_RESOURCE_LINK) {
-    DEBUG2("Updating link %s (%p)", nw_link->name, nw_link);
+    DEBUG2("Updating link %s (%p)", nw_link->generic_resource.name, nw_link);
     if (event_type == nw_link->bw_event) {
       nw_link->bw_current = value;
       lmm_update_constraint_bound(ptask_maxmin_system, nw_link->constraint,
@@ -399,7 +376,7 @@ static void update_resource_state(void *id,
     }
     return;
   } else if (cpu->type == SURF_WORKSTATION_RESOURCE_CPU) {
-    DEBUG3("Updating cpu %s (%p) with value %g", cpu->name, cpu, value);
+    DEBUG3("Updating cpu %s (%p) with value %g", cpu->generic_resource.name, cpu, value);
     if (event_type == cpu->power_event) {
       cpu->power_current = value;
       lmm_update_constraint_bound(ptask_maxmin_system, cpu->constraint,
@@ -425,24 +402,11 @@ static void finalize(void)
   int i, j;
 
   xbt_dict_free(&link_set);
-  xbt_dict_free(&workstation_set);
   if (parallel_task_link_set != NULL) {
     xbt_dict_free(&parallel_task_link_set);
   }
-  xbt_swag_free(surf_workstation_model->common_public->
-                states.ready_action_set);
-  xbt_swag_free(surf_workstation_model->common_public->
-                states.running_action_set);
-  xbt_swag_free(surf_workstation_model->common_public->
-                states.failed_action_set);
-  xbt_swag_free(surf_workstation_model->common_public->
-                states.done_action_set);
-
-  free(surf_workstation_model->common_public);
-  free(surf_workstation_model->common_private);
-  free(surf_workstation_model->extension_public);
-
-  free(surf_workstation_model);
+
+  surf_model_exit(surf_workstation_model);
   surf_workstation_model = NULL;
 
   for (i = 0; i < nb_workstation; i++)
@@ -506,7 +470,7 @@ static surf_action_t execute_parallel_task(int workstation_nb,
       if (communication_amount[i * workstation_nb + j] > 0)
         for (k = 0; k < route_size; k++) {
           lat += route[k]->lat_current;
-          xbt_dict_set(parallel_task_link_set, route[k]->name,
+          xbt_dict_set(parallel_task_link_set, route[k]->generic_resource.name,
                        route[k], NULL);
         }
       latency = MAX(latency, lat);
@@ -529,7 +493,7 @@ static surf_action_t execute_parallel_task(int workstation_nb,
   action->generic_action.max_duration = NO_MAX_DURATION;
   action->generic_action.start = surf_get_clock();
   action->generic_action.finish = -1.0;
-  action->generic_action.model_type = (surf_model_t) surf_workstation_model;
+  action->generic_action.model_type = surf_workstation_model;
   action->suspended = 0;        /* Should be useless because of the
                                    calloc but it seems to help valgrind... */
   action->workstation_nb = workstation_nb;
@@ -538,7 +502,7 @@ static surf_action_t execute_parallel_task(int workstation_nb,
   action->communication_amount = communication_amount;
   action->latency = latency;
   action->generic_action.state_set =
-    surf_workstation_model->common_public->states.running_action_set;
+    surf_workstation_model->states.running_action_set;
 
   xbt_swag_insert(action, action->generic_action.state_set);
   action->rate = rate;
@@ -618,7 +582,7 @@ static surf_action_t action_sleep(void *cpu, double duration)
 {
   surf_action_workstation_L07_t action = NULL;
 
-  XBT_IN2("(%s,%g)", ((cpu_L07_t) cpu)->name, duration);
+  XBT_IN2("(%s,%g)", ((cpu_L07_t) cpu)->generic_resource.name, duration);
 
   action = (surf_action_workstation_L07_t) execute(cpu, 1.0);
   action->generic_action.max_duration = duration;
@@ -647,11 +611,6 @@ static int get_route_size(void *src, void *dst)
   return route->size;
 }
 
-static const char *get_link_name(const void *link)
-{
-  return ((link_L07_t) link)->name;
-}
-
 static double get_link_bandwidth(const void *link)
 {
   return ((link_L07_t) link)->bw_current;
@@ -673,9 +632,8 @@ static int link_shared(const void *link)
 
 static void cpu_free(void *cpu)
 {
-  free(((cpu_L07_t) cpu)->name);
   xbt_dict_free(&(((cpu_L07_t) cpu)->properties));
-  free(cpu);
+  surf_resource_free(cpu);
 }
 
 static cpu_L07_t cpu_new(const char *name, double power_scale,
@@ -685,12 +643,12 @@ static cpu_L07_t cpu_new(const char *name, double power_scale,
                          tmgr_trace_t state_trace, xbt_dict_t cpu_properties)
 {
   cpu_L07_t cpu = xbt_new0(s_cpu_L07_t, 1);
-  xbt_assert1(!xbt_dict_get_or_null(workstation_set, name),
+  xbt_assert1(!surf_model_resource_by_name(surf_workstation_model, name),
               "Host '%s' declared several times in the platform file.", name);
 
-  cpu->model = (surf_model_t) surf_workstation_model;
+  cpu->generic_resource.model = surf_workstation_model;
   cpu->type = SURF_WORKSTATION_RESOURCE_CPU;
-  cpu->name = xbt_strdup(name);
+  cpu->generic_resource.name = xbt_strdup(name);
   cpu->id = nb_workstation++;
 
   cpu->power_scale = power_scale;
@@ -713,7 +671,8 @@ static cpu_L07_t cpu_new(const char *name, double power_scale,
   /*add the property set */
   cpu->properties = current_property_set;
 
-  xbt_dict_set(workstation_set, name, cpu, cpu_free);
+  xbt_dict_set(surf_model_resource_set(surf_workstation_model), name, cpu,
+               cpu_free);
 
   return cpu;
 }
@@ -751,9 +710,8 @@ static void parse_cpu_init(void)
 
 static void link_free(void *nw_link)
 {
-  free(((link_L07_t) nw_link)->name);
   xbt_dict_free(&(((link_L07_t) nw_link)->properties));
-  free(nw_link);
+  surf_resource_free(nw_link);
 }
 
 static link_L07_t link_new(char *name,
@@ -771,9 +729,9 @@ static link_L07_t link_new(char *name,
   xbt_assert1(!xbt_dict_get_or_null(link_set, name),
               "Link '%s' declared several times in the platform file.", name);
 
-  nw_link->model = (surf_model_t) surf_workstation_model;
+  nw_link->generic_resource.model = surf_workstation_model;
   nw_link->type = SURF_WORKSTATION_RESOURCE_LINK;
-  nw_link->name = name;
+  nw_link->generic_resource.name = name;
   nw_link->bw_current = bw_initial;
   if (bw_trace)
     nw_link->bw_event =
@@ -857,12 +815,16 @@ static void parse_route_set_endpoints(void)
 {
   cpu_L07_t cpu_tmp = NULL;
 
-  cpu_tmp = (cpu_L07_t) name_service(A_surfxml_route_src);
+  cpu_tmp =
+    (cpu_L07_t) surf_model_resource_by_name(surf_workstation_model,
+                                            A_surfxml_route_src);
   xbt_assert1(cpu_tmp, "Invalid cpu %s", A_surfxml_route_src);
   if (cpu_tmp != NULL)
     src_id = cpu_tmp->id;
 
-  cpu_tmp = (cpu_L07_t) name_service(A_surfxml_route_dst);
+  cpu_tmp =
+    (cpu_L07_t) surf_model_resource_by_name(surf_workstation_model,
+                                            A_surfxml_route_dst);
   xbt_assert1(cpu_tmp, "Invalid cpu %s", A_surfxml_route_dst);
   if (cpu_tmp != NULL)
     dst_id = cpu_tmp->id;
@@ -921,6 +883,7 @@ static void add_route(void)
 
     src_id = strtol(xbt_dynar_get_as(keys, 0, char *), &end, 16);
     dst_id = strtol(xbt_dynar_get_as(keys, 1, char *), &end, 16);
+    xbt_dynar_free(&keys);
 
     link_list_capacity = xbt_dynar_length(links);
     link_list = xbt_new(link_L07_t, link_list_capacity);
@@ -949,7 +912,7 @@ static void add_traces(void)
   /* Connect traces relative to cpu */
   xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) {
     tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
-    cpu_L07_t host = xbt_dict_get_or_null(workstation_set, elm);
+    cpu_L07_t host = surf_model_resource_by_name(surf_workstation_model, elm);
 
     xbt_assert1(host, "Host %s undefined", elm);
     xbt_assert1(trace, "Trace %s undefined", trace_name);
@@ -959,7 +922,7 @@ static void add_traces(void)
 
   xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) {
     tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
-    cpu_L07_t host = xbt_dict_get_or_null(workstation_set, elm);
+    cpu_L07_t host = surf_model_resource_by_name(surf_workstation_model, elm);
 
     xbt_assert1(host, "Host %s undefined", elm);
     xbt_assert1(trace, "Trace %s undefined", trace_name);
@@ -997,34 +960,6 @@ static void add_traces(void)
 
     link->lat_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
   }
-/*
-
-   xbt_dynar_foreach (traces_connect_list, cpt, value) {
-     trace_connect = xbt_str_split_str(value, "#");
-     trace_id        = xbt_dynar_get_as(trace_connect, 0, char*);
-     connect_element = atoi(xbt_dynar_get_as(trace_connect, 1, char*));
-     connect_kind    = atoi(xbt_dynar_get_as(trace_connect, 2, char*));
-     connector_id    = xbt_dynar_get_as(trace_connect, 3, char*);
-
-     xbt_assert1((trace = xbt_dict_get_or_null(traces_set_list, trace_id)), "Trace %s undefined", trace_id);
-
-     if (connect_element == A_surfxml_trace_c_connect_element_HOST) {
-        xbt_assert1((host = xbt_dict_get_or_null(workstation_set, connector_id)), "Host %s undefined", connector_id);
-        switch (connect_kind) {
-           case A_surfxml_trace_c_connect_kind_AVAILABILITY: host->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, host); break;
-           case A_surfxml_trace_c_connect_kind_POWER: host->power_event = tmgr_history_add_trace(history, trace, 0.0, 0, host); break;
-        }
-     }
-     else {
-        xbt_assert1((link = xbt_dict_get_or_null(link_set, connector_id)), "Link %s undefined", connector_id);
-        switch (connect_kind) {
-           case A_surfxml_trace_c_connect_kind_AVAILABILITY: link->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break;
-           case A_surfxml_trace_c_connect_kind_BANDWIDTH: link->bw_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break;
-           case A_surfxml_trace_c_connect_kind_LATENCY: link->lat_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break;
-        }
-     }
-   }
-*/
 }
 
 static void define_callbacks(const char *file)
@@ -1048,79 +983,53 @@ static void define_callbacks(const char *file)
 
 static void model_init_internal(void)
 {
-  s_surf_action_t action;
-
-  surf_workstation_model = xbt_new0(s_surf_workstation_model_t, 1);
-
-  surf_workstation_model->common_private =
-    xbt_new0(s_surf_model_private_t, 1);
-  surf_workstation_model->common_public = xbt_new0(s_surf_model_public_t, 1);
-  surf_workstation_model->extension_public =
-    xbt_new0(s_surf_workstation_model_extension_public_t, 1);
-
-  surf_workstation_model->common_public->states.ready_action_set =
-    xbt_swag_new(xbt_swag_offset(action, state_hookup));
-  surf_workstation_model->common_public->states.running_action_set =
-    xbt_swag_new(xbt_swag_offset(action, state_hookup));
-  surf_workstation_model->common_public->states.failed_action_set =
-    xbt_swag_new(xbt_swag_offset(action, state_hookup));
-  surf_workstation_model->common_public->states.done_action_set =
-    xbt_swag_new(xbt_swag_offset(action, state_hookup));
-
-  surf_workstation_model->common_public->name_service = name_service;
-  surf_workstation_model->common_public->get_resource_name =
-    get_resource_name;
-  surf_workstation_model->common_public->action_get_state =
-    surf_action_get_state;
-  surf_workstation_model->common_public->action_get_start_time =
-    surf_action_get_start_time;
-  surf_workstation_model->common_public->action_get_finish_time =
+  surf_workstation_model = surf_model_init();
+
+  surf_workstation_model->action_get_state = surf_action_get_state;
+  surf_workstation_model->action_get_start_time = surf_action_get_start_time;
+  surf_workstation_model->action_get_finish_time =
     surf_action_get_finish_time;
-  surf_workstation_model->common_public->action_use = action_use;
-  surf_workstation_model->common_public->action_free = action_free;
-  surf_workstation_model->common_public->action_cancel = action_cancel;
-  surf_workstation_model->common_public->action_recycle = action_recycle;
-  surf_workstation_model->common_public->action_change_state =
-    surf_action_change_state;
-  surf_workstation_model->common_public->action_set_data =
-    surf_action_set_data;
-  surf_workstation_model->common_public->suspend = action_suspend;
-  surf_workstation_model->common_public->resume = action_resume;
-  surf_workstation_model->common_public->is_suspended = action_is_suspended;
-  surf_workstation_model->common_public->set_max_duration =
-    action_set_max_duration;
-  surf_workstation_model->common_public->set_priority = action_set_priority;
-  surf_workstation_model->common_public->name = "Workstation ptask_L07";
-
-  surf_workstation_model->common_private->resource_used = resource_used;
-  surf_workstation_model->common_private->share_resources = share_resources;
-  surf_workstation_model->common_private->update_actions_state =
+  surf_workstation_model->action_use = action_use;
+  surf_workstation_model->action_free = action_free;
+  surf_workstation_model->action_cancel = action_cancel;
+  surf_workstation_model->action_change_state = surf_action_change_state;
+  surf_workstation_model->action_set_data = surf_action_set_data;
+  surf_workstation_model->suspend = action_suspend;
+  surf_workstation_model->resume = action_resume;
+  surf_workstation_model->is_suspended = action_is_suspended;
+  surf_workstation_model->set_max_duration = action_set_max_duration;
+  surf_workstation_model->set_priority = action_set_priority;
+  surf_workstation_model->name = "Workstation ptask_L07";
+
+  surf_workstation_model->model_private->resource_used = resource_used;
+  surf_workstation_model->model_private->share_resources = share_resources;
+  surf_workstation_model->model_private->update_actions_state =
     update_actions_state;
-  surf_workstation_model->common_private->update_resource_state =
+  surf_workstation_model->model_private->update_resource_state =
     update_resource_state;
-  surf_workstation_model->common_private->finalize = finalize;
-
-  surf_workstation_model->extension_public->execute = execute;
-  surf_workstation_model->extension_public->sleep = action_sleep;
-  surf_workstation_model->extension_public->get_state = resource_get_state;
-  surf_workstation_model->extension_public->get_speed = get_speed;
-  surf_workstation_model->extension_public->get_available_speed =
+  surf_workstation_model->model_private->finalize = finalize;
+
+  surf_workstation_model->extension.workstation.execute = execute;
+  surf_workstation_model->extension.workstation.sleep = action_sleep;
+  surf_workstation_model->extension.workstation.get_state =
+    resource_get_state;
+  surf_workstation_model->extension.workstation.get_speed = get_speed;
+  surf_workstation_model->extension.workstation.get_available_speed =
     get_available_speed;
-  surf_workstation_model->extension_public->communicate = communicate;
-  surf_workstation_model->extension_public->execute_parallel_task =
+  surf_workstation_model->extension.workstation.communicate = communicate;
+  surf_workstation_model->extension.workstation.execute_parallel_task =
     execute_parallel_task;
-  surf_workstation_model->extension_public->get_route = get_route;
-  surf_workstation_model->extension_public->get_route_size = get_route_size;
-  surf_workstation_model->extension_public->get_link_name = get_link_name;
-  surf_workstation_model->extension_public->get_link_bandwidth =
+  surf_workstation_model->extension.workstation.get_route = get_route;
+  surf_workstation_model->extension.workstation.get_route_size =
+    get_route_size;
+  surf_workstation_model->extension.workstation.get_link_bandwidth =
     get_link_bandwidth;
-  surf_workstation_model->extension_public->get_link_latency =
+  surf_workstation_model->extension.workstation.get_link_latency =
     get_link_latency;
-  surf_workstation_model->extension_public->link_shared = link_shared;
+  surf_workstation_model->extension.workstation.link_shared = link_shared;
 
-  surf_workstation_model->common_public->get_properties = get_properties;
+  surf_workstation_model->get_properties = get_properties;
 
-  workstation_set = xbt_dict_new();
   link_set = xbt_dict_new();
 
   if (!ptask_maxmin_system)
@@ -1138,7 +1047,6 @@ void surf_workstation_model_init_ptask_L07(const char *filename)
   define_callbacks(filename);
 
   update_model_description(surf_workstation_model_description,
-                           "ptask_L07",
-                           (surf_model_t) surf_workstation_model);
+                           "ptask_L07", surf_workstation_model);
   xbt_dynar_push(model_list, &surf_workstation_model);
 }