]> AND Public Git Repository - simgrid.git/blobdiff - src/kernel/lmm/maxmin.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
easy sonar fixes
[simgrid.git] / src / kernel / lmm / maxmin.cpp
index 485159d1d64513daae3cb4c0d4fe8e9e3dcf4a5a..be1490391aa4ebb1108a3a58c24ce583259d0aad 100644 (file)
@@ -22,6 +22,11 @@ using dyn_light_t = std::vector<int>;
 int Variable::next_rank_   = 1;
 int Constraint::next_rank_ = 1;
 
+Element::Element(Constraint* constraint, Variable* variable, double cweight)
+    : constraint(constraint), variable(variable), consumption_weight(cweight), max_consumption_weight(cweight)
+{
+}
+
 int Element::get_concurrency() const
 {
   // Ignore element with weight less than one (e.g. cross-traffic)
@@ -236,13 +241,9 @@ void System::expand(Constraint* cnst, Variable* var, double consumption_weight)
 
   xbt_assert(var->cnsts_.size() < var->cnsts_.capacity(), "Too much constraints");
 
-  var->cnsts_.emplace_back();
+  var->cnsts_.emplace_back(cnst, var, consumption_weight);
   Element& elem = var->cnsts_.back();
 
-  elem.consumption_weight = consumption_weight;
-  elem.constraint         = cnst;
-  elem.variable           = var;
-
   if (var->sharing_penalty_ != 0.0) {
     elem.constraint->enabled_element_set_.push_front(elem);
     elem.increase_concurrency();
@@ -276,6 +277,7 @@ void System::expand_add(Constraint* cnst, Variable* var, double value)
     if (var->sharing_penalty_ != 0.0)
       elem.decrease_concurrency();
 
+    elem.max_consumption_weight = std::max(elem.max_consumption_weight, value);
     if (cnst->sharing_policy_ != Constraint::SharingPolicy::FATPIPE)
       elem.consumption_weight += value;
     else