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);
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;
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);
((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;
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;
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,
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)
{
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;