[PPL-devel] [GIT] ppl/ppl(sparse_matrices): Restored old code trying to keep the system sortedness flag on.

Enea Zaffanella zaffanella at cs.unipr.it
Mon Jan 2 10:52:05 CET 2012


Module: ppl/ppl
Branch: sparse_matrices
Commit: 8f6d05de095b067c86926f04986aefd7aba6b0d7
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=8f6d05de095b067c86926f04986aefd7aba6b0d7

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Mon Jan  2 09:58:14 2012 +0100

Restored old code trying to keep the system sortedness flag on.
Factored out of loop some invariant space dimension computation.

---

 src/Polyhedron_conversion.templates.hh |   37 ++++++++++++++-----------------
 1 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/Polyhedron_conversion.templates.hh b/src/Polyhedron_conversion.templates.hh
index 45cd39b..e850214 100644
--- a/src/Polyhedron_conversion.templates.hh
+++ b/src/Polyhedron_conversion.templates.hh
@@ -353,11 +353,18 @@ Polyhedron::conversion(Source_Linear_System& source,
                        Dest_Linear_System& dest,
                        Bit_Matrix& sat,
                        dimension_type num_lines_or_equalities) {
-
   typedef typename Dest_Linear_System::row_type dest_row_type;
   typedef typename Source_Linear_System::row_type source_row_type;
 
+  // Constraints and generators must have the same dimension,
+  // otherwise the scalar products below will bomb.
+  PPL_ASSERT(source.space_dimension() == dest.space_dimension());
+  const dimension_type source_space_dim = source.space_dimension();
   const dimension_type source_num_rows = source.num_rows();
+  const dimension_type source_num_columns = source_space_dim
+    + (source.is_necessarily_closed() ? 1 : 2);
+
+
   dimension_type dest_num_rows = dest.num_rows();
   // The rows removed from `dest' will be placed in this vector, so they
   // can be recycled if needed.
@@ -388,10 +395,6 @@ Polyhedron::conversion(Source_Linear_System& source,
   for (dimension_type k = start; k < source_num_rows; ++k) {
     const source_row_type& source_k = source[k];
 
-    // Constraints and generators must have the same dimension,
-    // otherwise the scalar product below will bomb.
-    PPL_ASSERT(source.space_dimension() == dest.space_dimension());
-
     // `scalar_prod[i]' will contain the scalar product of the
     // constraint `source_k' and the generator `dest_rows[i]'.  This
     // product is 0 if and only if the generator saturates the
@@ -408,7 +411,7 @@ Polyhedron::conversion(Source_Linear_System& source,
       Scalar_Products::assign(scalar_prod[index_non_zero],
 			      source_k,
 			      dest.sys.rows[index_non_zero]);
-      WEIGHT_ADD_MUL(17, source.space_dimension());
+      WEIGHT_ADD_MUL(17, source_space_dim);
       if (scalar_prod[index_non_zero] != 0)
 	// The generator does not saturate the constraint.
 	break;
@@ -420,7 +423,7 @@ Polyhedron::conversion(Source_Linear_System& source,
     for (dimension_type i = index_non_zero + 1; i < dest_num_rows; ++i) {
       WEIGHT_BEGIN();
       Scalar_Products::assign(scalar_prod[i], source_k, dest.sys.rows[i]);
-      WEIGHT_ADD_MUL(25, source.space_dimension());
+      WEIGHT_ADD_MUL(25, source_space_dim);
       // Check if the client has requested abandoning all expensive
       // computations.  If so, the exception specified by the client
       // is thrown now.
@@ -544,7 +547,7 @@ Polyhedron::conversion(Source_Linear_System& source,
           // They are all checked at the end of this function.
 	  scalar_prod[i] = 0;
 	  // `dest_sorted' has already been set to false.
-          WEIGHT_ADD_MUL(41, dest.space_dimension());
+          WEIGHT_ADD_MUL(41, source_space_dim);
 	}
         // Check if the client has requested abandoning all expensive
         // computations.  If so, the exception specified by the client
@@ -696,8 +699,8 @@ Polyhedron::conversion(Source_Linear_System& source,
 	      // Compute the number of common saturators.
 	      // NOTE: this number has to be less than `k' because
 	      // we are treating the `k'-th constraint.
-	      const dimension_type
-		num_common_satur = k - new_satrow.count_ones();
+	      const dimension_type num_common_satur
+                = k - new_satrow.count_ones();
 
 	      // Even before actually creating the new ray as a
 	      // positive combination of `dest_rows[i]' and `dest_rows[j]',
@@ -713,9 +716,6 @@ Polyhedron::conversion(Source_Linear_System& source,
 	      // an extremal ray saturates at least
 	      // `source_num_columns - num_lines_or_equalities - 2'
 	      // constraints.
-              const dimension_type source_num_columns
-                = source.topology() == NECESSARILY_CLOSED ? source.space_dimension() + 1
-                                                          : source.space_dimension() + 2;
 	      if (num_common_satur
 		  >= source_num_columns - num_lines_or_equalities - 2) {
 		// The minimal proper face rule is satisfied.
@@ -745,7 +745,7 @@ Polyhedron::conversion(Source_Linear_System& source,
 		  else {
                     swap(new_row, recyclable_dest_rows.back());
                     recyclable_dest_rows.pop_back();
-                    new_row.set_space_dimension_no_ok(dest.space_dimension());
+                    new_row.set_space_dimension_no_ok(source_space_dim);
                     swap(sat[dest_num_rows], new_satrow);
                   }
 
@@ -764,7 +764,7 @@ Polyhedron::conversion(Source_Linear_System& source,
 			     normalized_sp_i,
 			     normalized_sp_o);
 		  WEIGHT_BEGIN();
-                  
+
                   neg_assign(normalized_sp_o);
                   new_row = dest.sys.rows[j];
                   // TODO: Check if the following assertions hold.
@@ -772,8 +772,8 @@ Polyhedron::conversion(Source_Linear_System& source,
                   PPL_ASSERT(normalized_sp_o != 0);
                   new_row.expr.linear_combine(dest.sys.rows[i].expr,
                                               normalized_sp_i, normalized_sp_o);
-                  
-                  WEIGHT_ADD_MUL(86, dest.space_dimension());
+
+                  WEIGHT_ADD_MUL(86, source_space_dim);
 		  new_row.strong_normalize();
                   // Don't assert new_row.OK() here, because it may fail if
                   // the parameter `dest' contained a row that wasn't ok.
@@ -862,7 +862,6 @@ Polyhedron::conversion(Source_Linear_System& source,
     sat.remove_trailing_columns(redundant_source_rows.size());
   }
 
-  /* FIXME: Check why the following does not work anymore.
   // If `start == 0', then `source' was sorted and remained so.
   // If otherwise `start > 0', then the two sub-system made by the
   // non-pending rows and the pending rows, respectively, were both sorted.
@@ -872,8 +871,6 @@ Polyhedron::conversion(Source_Linear_System& source,
   // the two sub-systems.
   if (start > 0 && start < source.num_rows())
     source.set_sorted(compare(source[start - 1], source[start]) <= 0);
-  */
-  source.set_sorted(false);
   // There are no longer pending constraints in `source'.
   source.unset_pending_rows();
 




More information about the PPL-devel mailing list