[PPL-devel] [GIT] ppl/ppl(master): Other minor improvements in assign_all_inequalities_approximation().

Enea Zaffanella zaffanella at cs.unipr.it
Sat Mar 27 11:05:32 CET 2010


Module: ppl/ppl
Branch: master
Commit: 2fd3833a17b3c175fca9517ce2e5740686f37aee
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=2fd3833a17b3c175fca9517ce2e5740686f37aee

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Sat Mar 27 11:04:12 2010 +0100

Other minor improvements in assign_all_inequalities_approximation().

---

 src/termination.cc           |   20 +++++++++++---------
 src/termination.templates.hh |   29 ++++++++++++++++-------------
 2 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/src/termination.cc b/src/termination.cc
index 8645b4b..01ab60a 100644
--- a/src/termination.cc
+++ b/src/termination.cc
@@ -35,23 +35,25 @@ template <>
 void
 assign_all_inequalities_approximation(const C_Polyhedron& ph,
 				      Constraint_System& cs) {
-  cs = ph.minimized_constraints();
-  if (cs.has_equalities() > 0) {
-    Constraint_System tmp_cs;
-    for (Constraint_System::const_iterator i = cs.begin(),
-	   cs_end = cs.end(); i != cs_end; ++i) {
+  const Constraint_System& ph_cs = ph.minimized_constraints();
+  if (ph_cs.has_equalities()) {
+    // Translate equalities into inequalities.
+    for (Constraint_System::const_iterator i = ph_cs.begin(),
+	   i_end = ph_cs.end(); i != i_end; ++i) {
       const Constraint& c = *i;
       if (c.is_equality()) {
 	// Insert the two corresponding opposing inequalities.
-	tmp_cs.insert(Linear_Expression(c) >= 0);
-	tmp_cs.insert(Linear_Expression(c) <= 0);
+	cs.insert(Linear_Expression(c) >= 0);
+	cs.insert(Linear_Expression(c) <= 0);
       }
       else
 	// Insert as is.
-	tmp_cs.insert(c);
+	cs.insert(c);
     }
-    cs = tmp_cs;
   }
+  else
+    // No equality constraints (and no strict inequalities).
+    cs = ph_cs;
 }
 
 void
diff --git a/src/termination.templates.hh b/src/termination.templates.hh
index bf754d3..f5dc925 100644
--- a/src/termination.templates.hh
+++ b/src/termination.templates.hh
@@ -149,26 +149,29 @@ template <typename PSET>
 void
 assign_all_inequalities_approximation(const PSET& pset,
 				      Constraint_System& cs) {
-  cs = pset.minimized_constraints();
-  if (cs.has_strict_inequalities() || cs.has_equalities() > 0) {
-    Constraint_System tmp_cs;
-    for (Constraint_System::const_iterator i = cs.begin(),
-	   cs_end = cs.end(); i != cs_end; ++i) {
+  const Constraint_System& pset_cs = pset.minimized_constraints();
+  if (pset_cs.has_strict_inequalities() || pset_cs.has_equalities()) {
+    // Here we have some strict inequality and/or equality constraints:
+    // translate them into non-strict inequality constraints.
+    for (Constraint_System::const_iterator i = pset_cs.begin(),
+           i_end = pset_cs.end(); i != i_end; ++i) {
       const Constraint& c = *i;
       if (c.is_equality()) {
-	// Insert the two corresponding opposing inequalities.
-	tmp_cs.insert(Linear_Expression(c) >= 0);
-	tmp_cs.insert(Linear_Expression(c) <= 0);
+        // Insert the two corresponding opposing inequalities.
+        cs.insert(Linear_Expression(c) >= 0);
+        cs.insert(Linear_Expression(c) <= 0);
       }
       else if (c.is_strict_inequality())
-	// Insert the non-strict approximation.
-	tmp_cs.insert(Linear_Expression(c) >= 0);
+        // Insert the non-strict approximation.
+        cs.insert(Linear_Expression(c) >= 0);
       else
-	// Insert as is.
-	tmp_cs.insert(c);
+        // Insert as is.
+        cs.insert(c);
     }
-    cs = tmp_cs;
   }
+  else
+    // No strict inequality and no equality constraints.
+    cs = pset_cs;
 }
 
 template <>




More information about the PPL-devel mailing list