X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a65ef8dee19651e9e924f76251ff5da3748a3d3d..fd6ec43c6ac9b59d17c00970e44e245dfd62bbcc:/src/kernel/lmm/System.cpp diff --git a/src/kernel/lmm/System.cpp b/src/kernel/lmm/System.cpp index b4e9118161..872361322a 100644 --- a/src/kernel/lmm/System.cpp +++ b/src/kernel/lmm/System.cpp @@ -17,9 +17,7 @@ double sg_maxmin_precision = 1E-5; /* Change this with --cfg=maxmin/precision:VA double sg_surf_precision = 1E-9; /* Change this with --cfg=surf/precision:VALUE */ int sg_concurrency_limit = -1; /* Change this with --cfg=maxmin/concurrency-limit:VALUE */ -namespace simgrid { -namespace kernel { -namespace lmm { +namespace simgrid::kernel::lmm { int Variable::next_rank_ = 1; int Constraint::next_rank_ = 1; @@ -176,9 +174,10 @@ System::System(bool selective_update) : selective_update_active(selective_update System::~System() { while (Variable* var = extract_variable()) { - std::string demangled = boost::core::demangle(var->id_ ? typeid(*var->id_).name() : "(unidentified)"); - XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", demangled.c_str(), - var->rank_); + const char* name = var->id_ ? typeid(*var->id_).name() : "(unidentified)"; + boost::core::scoped_demangled_name demangled(name); + XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", + demangled.get() ? demangled.get() : name, var->rank_); var_free(var); } while (Constraint* cnst = extract_constraint()) @@ -271,18 +270,20 @@ Element& System::expand_add_to_elem(Element& elem, const Constraint* cnst, doubl return elem; } -void System::expand(Constraint* cnst, Variable* var, double consumption_weight) +void System::expand(Constraint* cnst, Variable* var, double consumption_weight, bool force_creation) { modified_ = true; auto elem_it = std::find_if(begin(var->cnsts_), end(var->cnsts_), [&cnst](Element const& x) { return x.constraint == cnst; }); - if (elem_it != end(var->cnsts_) && var->sharing_penalty_ != 0.0) { + + bool reuse_elem = elem_it != end(var->cnsts_) && not force_creation; + if (reuse_elem && var->sharing_penalty_ != 0.0) { /* before changing it, decreases concurrency on constraint, it'll be added back later */ elem_it->decrease_concurrency(); } - Element& elem = elem_it != end(var->cnsts_) ? expand_add_to_elem(*elem_it, cnst, consumption_weight) - : expand_create_elem(cnst, var, consumption_weight); + Element& elem = reuse_elem ? expand_add_to_elem(*elem_it, cnst, consumption_weight) + : expand_create_elem(cnst, var, consumption_weight); // Check if we need to disable the variable if (var->sharing_penalty_ != 0) { @@ -761,6 +762,4 @@ void Constraint::set_sharing_policy(SharingPolicy policy, const s4u::NonLinearRe dyn_constraint_cb_ = cb; } -} // namespace lmm -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::lmm