[PPL-devel] [GIT] ppl/ppl(sparse_matrices): PIP_Tree_Node: avoid insertion in method compatibility_check(), may be very slow with some backends.
Marco Poletti
poletti.marco at gmail.com
Thu Mar 25 19:14:19 CET 2010
Module: ppl/ppl
Branch: sparse_matrices
Commit: a843c36d1af584099d79f3b0515b45f843f5698f
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=a843c36d1af584099d79f3b0515b45f843f5698f
Author: Marco Poletti <poletti.marco at 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.
More information about the PPL-devel
mailing list