Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding function to indicate whether an action is suspended or not.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 17 Dec 2004 05:45:05 +0000 (05:45 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 17 Dec 2004 05:45:05 +0000 (05:45 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@676 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/maxmin.h
src/include/surf/surf.h
src/surf/cpu.c
src/surf/maxmin.c
src/surf/workstation.c

index 279b8ba..551c0fe 100644 (file)
@@ -47,6 +47,8 @@ void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
                               double bound);
 void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var,
                                double weight);
+double lmm_get_variable_weight(lmm_system_t sys, lmm_variable_t var);
+
 void lmm_update_constraint_bound(lmm_system_t sys, lmm_constraint_t cnst,
                                 double bound);
 
index 5786c38..8459660 100644 (file)
@@ -94,6 +94,7 @@ typedef struct surf_cpu_resource_extension_public {
   surf_action_t(*sleep) (void *cpu, double duration);
   void (*suspend) (surf_action_t action);
   void (*resume) (surf_action_t action);
+  int (*is_suspended) (surf_action_t action);
    e_surf_cpu_state_t(*get_state) (void *cpu);
 } s_surf_cpu_resource_extension_public_t,
     *surf_cpu_resource_extension_public_t;
@@ -131,6 +132,7 @@ typedef struct surf_workstation_resource_extension_public {
   surf_action_t(*sleep) (void *workstation, double duration);
   void (*suspend) (surf_action_t action);
   void (*resume) (surf_action_t action);
+  int (*is_suspended) (surf_action_t action);
    e_surf_cpu_state_t(*get_state) (void *workstation);
    surf_action_t(*communicate) (void *workstation_src,
                                void *workstation_dst, double size);
index be82ebb..970c20c 100644 (file)
@@ -313,6 +313,11 @@ static void action_resume(surf_action_t action)
                             ((surf_action_cpu_t) action)->variable, 1.0);
 }
 
+static int action_is_suspended(surf_action_t action)
+{
+  return (lmm_get_variable_weight(maxmin_system, ((surf_action_cpu_t) action)->variable) == 0.0);
+}
+
 static e_surf_cpu_state_t get_state(void *cpu)
 {
   return ((cpu_t) cpu)->state_current;
@@ -380,6 +385,7 @@ static void surf_cpu_resource_init_internal(void)
   surf_cpu_resource->extension_public->sleep = action_sleep;
   surf_cpu_resource->extension_public->suspend = action_suspend;
   surf_cpu_resource->extension_public->resume = action_resume;
+  surf_cpu_resource->extension_public->is_suspended = action_is_suspended;
 
   surf_cpu_resource->extension_public->get_state = get_state;
 
index 9b5a48f..3dd91a2 100644 (file)
@@ -347,11 +347,10 @@ void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
   var->bound = bound;
 }
 
-void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var,
-                               double weight)
+double lmm_get_variable_weight(lmm_system_t sys, lmm_variable_t var)
+                                 
 {
-  sys->modified = 1;
-  var->weight = weight;
+  return var->weight;
 }
 
 void lmm_update_constraint_bound(lmm_system_t sys, lmm_constraint_t cnst,
index 0cf5fc7..f201e08 100644 (file)
@@ -135,6 +135,14 @@ static void action_resume(surf_action_t action)
   surf_cpu_resource->extension_public->resume(action);
 }
 
+static int action_is_suspended(surf_action_t action)
+{
+  xbt_assert0(action->resource_type ==
+             ((surf_resource_t) surf_cpu_resource),
+             "Resource type mismatch");
+  return surf_cpu_resource->extension_public->is_suspended(action);
+}
+
 static surf_action_t communicate(void *workstation_src,
                                 void *workstation_dst, double size)
 {
@@ -202,6 +210,7 @@ static void surf_workstation_resource_init_internal(void)
   surf_workstation_resource->extension_public->sleep = action_sleep;
   surf_workstation_resource->extension_public->suspend = action_suspend;
   surf_workstation_resource->extension_public->resume = action_resume;
+  surf_workstation_resource->extension_public->is_suspended = action_is_suspended;
   surf_workstation_resource->extension_public->get_state = get_state;
   surf_workstation_resource->extension_public->communicate = communicate;