[GIT] ppl/ppl(sparse_matrices): PIP_Tree_Node: avoid insertion in method compatibility_check(), may be very slow with some backends.

Module: ppl/ppl Branch: sparse_matrices Commit: a843c36d1af584099d79f3b0515b45f843f5698f URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=a843c36d1af58...
Author: Marco Poletti poletti.marco@gmail.com Date: Thu Mar 25 18:48:38 2010 +0100
PIP_Tree_Node: avoid insertion in method compatibility_check(), may be very slow with some backends.
---
src/PIP_Tree.cc | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc index c838a45..9f95009 100644 --- a/src/PIP_Tree.cc +++ b/src/PIP_Tree.cc @@ -2002,14 +2002,22 @@ PIP_Tree_Node::compatibility_check(matrix_type& s) { matrix_const_row_const_iterator row_i = s_mi.begin(); matrix_const_row_const_iterator row_end = s_mi.end(); if (row_i != row_end) { - cut_i = cut.find_create(*row_i); - mod_assign((*cut_i).second,(*cut_i).second,den); + if ((*row_i).first == 0) { + cut_i = cut.find_create(*row_i); + mod_assign((*cut_i).second,(*cut_i).second,den); + (*cut_i).second -= den; + } else { + cut_i = cut.find_create(0, den); + neg_assign((*cut_i).second); + cut_i = cut.find_create(*row_i, cut_i); + mod_assign((*cut_i).second,(*cut_i).second,den); + } for (++row_i; row_i != row_end; ++row_i) { cut_i = cut.find_create(*row_i, cut_i); mod_assign((*cut_i).second,(*cut_i).second,den); } - } - cut[0] -= den; + } else + cut[0] -= den; scaling.push_back(den); } // Check if an integer solution was found.
participants (1)
-
Marco Poletti