static void lmm_update_modified_set(lmm_system_t sys,
lmm_constraint_t cnst);
static void lmm_remove_all_modified_set(lmm_system_t sys);
-int sg_maxmin_selective_update = 1;
static int Global_debug_id = 1;
static int Global_const_debug_id = 1;
extern xbt_swag_t keep_track;
-lmm_system_t lmm_system_new(void)
+lmm_system_t lmm_system_new(int selective_update)
{
lmm_system_t l = NULL;
s_lmm_variable_t var;
l = xbt_new0(s_lmm_system_t, 1);
l->modified = 0;
- l->selective_update_active = sg_maxmin_selective_update;
+ l->selective_update_active = selective_update;
XBT_DEBUG("Setting selective_update_active flag to %d\n",
l->selective_update_active);
XBT_INLINE void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var)
{
int i;
+ int n;
+
lmm_element_t elem = NULL;
XBT_IN("(sys=%p, var=%p)", sys, var);
sys->modified = 1;
+ n = 0;
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
xbt_swag_remove(elem, &(elem->constraint->element_set));
xbt_swag_remove(elem, &(elem->constraint->active_element_set));
if (!xbt_swag_size(&(elem->constraint->element_set)))
make_constraint_inactive(sys, elem->constraint);
- else
- lmm_update_modified_set(sys, elem->constraint);
+ else {
+ if (n < i)
+ var->cnsts[n].constraint = elem->constraint;
+ n++;
+ }
}
+ if (n) {
+ var->cnsts_number = n;
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
+ }
+
var->cnsts_number = 0;
XBT_OUT();
}
make_constraint_active(sys, cnst);
lmm_update_modified_set(sys, cnst);
+ if (var->cnsts_number > 1)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
}
void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst,
void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
double bound)
{
- int i;
-
sys->modified = 1;
var->bound = bound;
- for (i = 0; i < var->cnsts_number; i++)
- lmm_update_modified_set(sys, var->cnsts[i].constraint);
-
+ if (var->cnsts_number)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
}
xbt_swag_insert_at_head(elem, &(elem->constraint->element_set));
else
xbt_swag_insert_at_tail(elem, &(elem->constraint->element_set));
-
- lmm_update_modified_set(sys, elem->constraint);
}
if (!weight)
var->value = 0.0;
+ if (var->cnsts_number)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
+
XBT_OUT();
}