A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add lmm_get_var_from_cnst
[simgrid.git]
/
src
/
surf
/
maxmin.c
diff --git
a/src/surf/maxmin.c
b/src/surf/maxmin.c
index
637555f
..
5300929
100644
(file)
--- a/
src/surf/maxmin.c
+++ b/
src/surf/maxmin.c
@@
-27,6
+27,7
@@
lmm_system_t lmm_system_new(void)
l = xbt_new0(s_lmm_system_t, 1);
l = xbt_new0(s_lmm_system_t, 1);
+ l->modified = 0;
xbt_swag_init(&(l->variable_set),
xbt_swag_offset(var, variable_set_hookup));
xbt_swag_init(&(l->constraint_set),
xbt_swag_init(&(l->variable_set),
xbt_swag_offset(var, variable_set_hookup));
xbt_swag_init(&(l->constraint_set),
@@
-62,6
+63,8
@@
void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var)
int i;
lmm_element_t elem = NULL;
int i;
lmm_element_t elem = NULL;
+ sys->modified = 1;
+
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
xbt_swag_remove(elem, &(elem->constraint->element_set));
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
xbt_swag_remove(elem, &(elem->constraint->element_set));
@@
-150,6
+153,8
@@
void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst,
{
lmm_element_t elem = NULL;
{
lmm_element_t elem = NULL;
+ sys->modified = 1;
+
if (var->cnsts_number >= var->cnsts_size)
abort();
if (var->cnsts_number >= var->cnsts_size)
abort();
@@
-175,6
+180,14
@@
int lmm_get_number_of_cnst_from_var(lmm_system_t sys, lmm_variable_t var)
return(var->cnsts_number);
}
return(var->cnsts_number);
}
+lmm_variable_t lmm_get_var_from_cnst(lmm_system_t sys, lmm_constraint_t cnst,
+ lmm_variable_t *var)
+{
+ if(!(*var)) xbt_swag_getFirst(&(cnst->element_set));
+ else *var=xbt_swag_getNext(*var,cnst->element_set.offset);
+ return *var;
+}
+
void *lmm_constraint_id(lmm_constraint_t cnst)
{
return cnst->id;
void *lmm_constraint_id(lmm_constraint_t cnst)
{
return cnst->id;
@@
-191,6
+204,8
@@
static void saturated_constraints_update(lmm_system_t sys,
{
lmm_constraint_t useless_cnst = NULL;
{
lmm_constraint_t useless_cnst = NULL;
+ sys->modified = 1;
+
if (cnst->remaining <= 0)
return;
if ((*min_usage < 0) || (*min_usage > cnst->remaining / cnst->usage)) {
if (cnst->remaining <= 0)
return;
if ((*min_usage < 0) || (*min_usage > cnst->remaining / cnst->usage)) {
@@
-212,6
+227,8
@@
static void saturated_variables_update(lmm_system_t sys)
lmm_element_t elem = NULL;
xbt_swag_t elem_list = NULL;
lmm_element_t elem = NULL;
xbt_swag_t elem_list = NULL;
+ sys->modified = 1;
+
cnst_list = &(sys->saturated_constraint_set);
while ((cnst = xbt_swag_getFirst(cnst_list))) {
/* xbt_swag_foreach(cnst, cnst_list) { */
cnst_list = &(sys->saturated_constraint_set);
while ((cnst = xbt_swag_getFirst(cnst_list))) {
/* xbt_swag_foreach(cnst, cnst_list) { */
@@
-233,6
+250,8
@@
void lmm_solve(lmm_system_t sys)
xbt_swag_t elem_list = NULL;
xbt_maxmin_float_t min_usage = -1;
xbt_swag_t elem_list = NULL;
xbt_maxmin_float_t min_usage = -1;
+ if(!(sys->modified)) return;
+
/* Init */
var_list = &(sys->variable_set);
xbt_swag_foreach(var, var_list) {
/* Init */
var_list = &(sys->variable_set);
xbt_swag_foreach(var, var_list) {
@@
-301,6
+320,8
@@
void lmm_solve(lmm_system_t sys)
saturated_variables_update(sys);
} while (xbt_swag_size(&(sys->saturated_variable_set)));
saturated_variables_update(sys);
} while (xbt_swag_size(&(sys->saturated_variable_set)));
+
+ sys->modified = 0;
}
/* Not a O(1) function */
}
/* Not a O(1) function */
@@
-311,6
+332,7
@@
void lmm_update(lmm_system_t sys, lmm_constraint_t cnst,
int i;
lmm_element_t elem = NULL;
int i;
lmm_element_t elem = NULL;
+ sys->modified = 1;
for (i = 0; i < var->cnsts_number; i++)
if (var->cnsts[i].constraint == cnst) {
elem->value = value;
for (i = 0; i < var->cnsts_number; i++)
if (var->cnsts[i].constraint == cnst) {
elem->value = value;
@@
-318,21
+340,24
@@
void lmm_update(lmm_system_t sys, lmm_constraint_t cnst,
}
}
}
}
-void lmm_update_variable_bound(lmm_variable_t var,
+void lmm_update_variable_bound(lmm_
system_t sys, lmm_
variable_t var,
xbt_maxmin_float_t bound)
{
xbt_maxmin_float_t bound)
{
+ sys->modified = 1;
var->bound = bound;
}
var->bound = bound;
}
-void lmm_update_variable_weight(lmm_variable_t var,
+void lmm_update_variable_weight(lmm_
system_t sys, lmm_
variable_t var,
xbt_maxmin_float_t weight)
{
xbt_maxmin_float_t weight)
{
+ sys->modified = 1;
var->weight = weight;
}
var->weight = weight;
}
-void lmm_update_constraint_bound(lmm_constraint_t cnst,
+void lmm_update_constraint_bound(lmm_
system_t sys, lmm_
constraint_t cnst,
xbt_maxmin_float_t bound)
{
xbt_maxmin_float_t bound)
{
+ sys->modified = 1;
cnst->bound = bound;
}
cnst->bound = bound;
}