[PPL-devel] [GIT] ppl/ppl(pip): Improved method PIP_Solution_Node::::parametric_values( ).

Enea Zaffanella zaffanella at cs.unipr.it
Sun Jan 31 22:23:43 CET 2010


Module: ppl/ppl
Branch: pip
Commit: 85c05c902ae1f0e620be68f1b2bbae1bf072aaaa
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=85c05c902ae1f0e620be68f1b2bbae1bf072aaaa

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Sun Jan 31 22:21:51 2010 +0100

Improved method PIP_Solution_Node::::parametric_values().

---

 src/PIP_Tree.cc |   33 ++++++++++++++++-----------------
 1 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 7abb188..61ab579 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -772,7 +772,7 @@ PIP_Tree_Node::ascii_dump(std::ostream& s) const {
   constraints_.ascii_dump(s);
   dimension_type artificial_parameters_size = artificial_parameters.size();
   s << "\nartificial_parameters( " << artificial_parameters_size << " )\n";
-  for (dimension_type i=0; i<artificial_parameters_size; ++i)
+  for (dimension_type i = 0; i < artificial_parameters_size; ++i)
     artificial_parameters[i].ascii_dump(s);
 }
 
@@ -1039,32 +1039,31 @@ PIP_Solution_Node::ascii_load(std::istream& s) {
 
 const Linear_Expression&
 PIP_Solution_Node
-::parametric_values(Variable v,
+::parametric_values(const Variable var,
                     const Variables_Set& parameters) const {
   Variables_Set all_parameters(parameters);
   // Complete the parameter set with artificials.
   insert_artificials(all_parameters,
                      tableau.s.num_columns() + tableau.t.num_columns() - 1);
+  {
+    PIP_Solution_Node& x = const_cast<PIP_Solution_Node&>(*this);
+    x.update_solution(all_parameters);
+  }
 
-  const_cast<PIP_Solution_Node&>(*this).update_solution(all_parameters);
-  dimension_type id = v.id();
-  dimension_type j;
-  Variables_Set::iterator location = all_parameters.lower_bound(id);
-  if (location == all_parameters.end())
-    j = id;
+  const Variables_Set::iterator pos = all_parameters.lower_bound(var.id());
+  if (pos == all_parameters.end())
+    return solution[var.id()];
   else {
-    if (*location == id) {
 #ifndef NDEBUG
+    if (*pos == var.id()) {
       std::cerr << "PIP_Solution_Node::parametric_values(Variable): "
-                   "Supplied Variable corresponds to a parameter"
-                << std::endl;
-#endif
-      j = not_a_dimension();
-    } else
-      j = id - std::distance(all_parameters.begin(),location);
+                << "Supplied Variable corresponds to a parameter.\n";
+      PPL_ASSERT(false);
+    }
+#endif // #ifndef NDEBUG
+    const dimension_type dist = std::distance(all_parameters.begin(), pos);
+    return solution[var.id() - dist];
   }
-
-  return solution[j];
 }
 
 PIP_Solution_Node::Row_Sign




More information about the PPL-devel mailing list