[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