[GIT] ppl/ppl(sparse_matrices): PIP_Tree.cc: fix and optimize merge_assign( ).

Module: ppl/ppl Branch: sparse_matrices Commit: f4b385706bf8e72fabe551b7a83c6ec5fecddfce URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=f4b385706bf8e...
Author: Marco Poletti poletti.marco@gmail.com Date: Mon Mar 22 21:47:02 2010 +0100
PIP_Tree.cc: fix and optimize merge_assign().
---
src/PIP_Tree.cc | 36 ++++++++++++++++++------------------ 1 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc index 0b2963b..a1d72e4 100644 --- a/src/PIP_Tree.cc +++ b/src/PIP_Tree.cc @@ -377,31 +377,31 @@ merge_assign(PIP_Tree_Node::matrix_type& x, PPL_ASSERT(y_i->is_nonstrict_inequality()); PIP_Tree_Node::matrix_row_reference_type x_i = x[i]; const Coefficient& inhomogeneous_term = y_i->inhomogeneous_term(); - x_i.assign_if_nonzero(0, inhomogeneous_term); - Variables_Set::const_iterator pj; + PIP_Tree_Node::matrix_row_iterator itr = x_i.end(); + Variables_Set::const_iterator pj = parameters.begin(); dimension_type j = 1; - PIP_Tree_Node::matrix_row_iterator last = x_i.begin(); - for (pj = param_begin; pj != param_end; ++pj, ++j) { - Variable vj(*pj); - if (vj.space_dimension() > cs_space_dim) - break; - const Coefficient& c = y_i->coefficient(vj); - if (c != 0) { - last = x_i.find_create(j, c); - ++pj; - ++j; - break; + if (inhomogeneous_term != 0) + itr = x_i.find_create(0, inhomogeneous_term); + else + if (pj != param_end) { + Variable vj(*pj); + if (vj.space_dimension() <= cs_space_dim) { + const Coefficient& c = y_i->coefficient(vj); + if (c != 0) { + itr = x_i.find_create(j, c); + ++pj; + ++j; + } + } } - } + PPL_ASSERT(pj == param_end || itr != x_i.end()); for ( ; pj != param_end; ++pj, ++j) { Variable vj(*pj); if (vj.space_dimension() > cs_space_dim) break; const Coefficient& c = y_i->coefficient(vj); - if (c != 0) { - last = x_i.find_create(j, c, last); - break; - } + if (c != 0) + itr = x_i.find_create(j, c, itr); } } }
participants (1)
-
Marco Poletti