
Module: ppl/ppl Branch: pip Commit: 85c05c902ae1f0e620be68f1b2bbae1bf072aaaa URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=85c05c902ae1f...
Author: Enea Zaffanella zaffanella@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