Constraint* cnst;
while ((var = extract_variable())) {
- auto demangled = simgrid::xbt::demangle(typeid(*var->id_).name());
+ auto demangled = simgrid::xbt::demangle(var->id_ ? typeid(*var->id_).name() : "(unidentified)");
XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", demangled.get(),
var->rank_);
var_free(var);
delete cnst;
}
-Constraint::Constraint(void* id_value, double bound_value) : bound_(bound_value), id_(id_value)
+Constraint::Constraint(resource::Resource* id_value, double bound_value) : bound_(bound_value), id_(id_value)
{
rank_ = next_rank_++;
cnst_light_ = nullptr;
}
-Constraint* System::constraint_new(void* id, double bound_value)
+Constraint* System::constraint_new(resource::Resource* id, double bound_value)
{
Constraint* cnst = new Constraint(id, bound_value);
insert_constraint(cnst);
var_free(var);
}
+void System::variable_free_all()
+{
+ Variable* var;
+ while ((var = extract_variable()))
+ variable_free(var);
+}
+
void System::expand(Constraint* cnst, Variable* var, double consumption_weight)
{
modified_ = true;
cnst->cnst_light_ = nullptr;
}
} else {
- cnst->cnst_light_->remaining_over_usage = cnst->remaining_ / cnst->usage_;
+ if (cnst->cnst_light_) {
+ cnst->cnst_light_->remaining_over_usage = cnst->remaining_ / cnst->usage_;
+ }
}
elem.make_inactive();
} else {
cnst->cnst_light_ = nullptr;
}
} else {
- cnst->cnst_light_->remaining_over_usage = cnst->remaining_ / cnst->usage_;
- xbt_assert(not cnst->active_element_set_.empty(),
- "Should not keep a maximum constraint that has no active"
- " element! You want to check the maxmin precision and possible rounding effects.");
+ if (cnst->cnst_light_) {
+ cnst->cnst_light_->remaining_over_usage = cnst->remaining_ / cnst->usage_;
+ xbt_assert(not cnst->active_element_set_.empty(),
+ "Should not keep a maximum constraint that has no active"
+ " element! You want to check the maxmin precision and possible rounding effects.");
+ }
}
}
}