[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