[PPL-devel] [GIT] ppl/ppl(pip): Improved recently added helper functions.

Enea Zaffanella zaffanella at cs.unipr.it
Thu Sep 10 17:27:40 CEST 2009


Module: ppl/ppl
Branch: pip
Commit: 4f1061d0e0fb1e9f5f8f49d7ad47b7cad681fdee
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=4f1061d0e0fb1e9f5f8f49d7ad47b7cad681fdee

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Thu Sep 10 17:25:05 2009 +0200

Improved recently added helper functions.
  - avoid recomputing loop bounds at each iteration;
  - delay object definitions until actually needed and, if possible,
    provide them with an initializer.

---

 src/PIP_Tree.cc |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 855ad88..041184e 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -25,28 +25,28 @@ site: http://www.cs.unipr.it/ppl/ . */
 
 #include <algorithm>
 
-namespace PPL = Parma_Polyhedra_Library;
+namespace Parma_Polyhedra_Library {
 
 namespace {
 
 // Compute x += c * y
 void
-add_assign(PPL::Row& x, const PPL::Row& y, const PPL::Coefficient &c) {
-  for (PPL::dimension_type i=0; i<x.size(); ++i)
-    x[i] += c * y[i];
+add_assign(Row& x, const Row& y, Coefficient_traits::const_reference c) {
+  PPL_ASSERT(x.size() == y.size());
+  for (dimension_type i = x.size(); i-- > 0; )
+    add_mul_assign(x[i], c, y[i]);
 }
 
 // Merge constraint systems such as x = x U z
 void
-merge(PPL::Constraint_System &x, const PPL::Constraint_System &y) {
-  PPL::Constraint_System::const_iterator i;
-  for (i=y.begin(); i!=y.end(); ++i)
-    x.insert(*i);
+merge_assign(Constraint_System& x, const Constraint_System& y) {
+  for (Constraint_System::const_iterator y_i = y.begin(),
+         y_end = y.end(); y_i != y_end; ++y_i)
+    x.insert(*y_i);
 }
 
 } // namespace
 
-namespace Parma_Polyhedra_Library {
 
 PIP_Decision_Node::~PIP_Decision_Node() {
   delete true_child;
@@ -134,7 +134,7 @@ PIP_Decision_Node::solve(PIP_Tree_Node **parent_ref,
   PIP_Problem_Status stt;
   PIP_Problem_Status stf = UNFEASIBLE_PIP_PROBLEM;
   Constraint_System context_true(context);
-  merge(context_true, constraints_);
+  merge_assign(context_true, constraints_);
   stt = true_child->solve(&true_child, context_true);
   if (false_child) {
     // Decision nodes with false child must have exactly one constraint




More information about the PPL-devel mailing list