[PPL-devel] [GIT] ppl/ppl(master): Fixed assign_all_inequalities_approximation for shapes.
Enea Zaffanella
zaffanella at cs.unipr.it
Wed Mar 31 01:22:46 CEST 2010
Module: ppl/ppl
Branch: master
Commit: 43ec65852330b6023cf957b25db0c72398ad3de7
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=43ec65852330b6023cf957b25db0c72398ad3de7
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Wed Mar 31 01:21:14 2010 +0200
Fixed assign_all_inequalities_approximation for shapes.
---
src/termination.cc | 27 +++++++++++++++++++++++++
src/termination.templates.hh | 44 +++++------------------------------------
2 files changed, 33 insertions(+), 38 deletions(-)
diff --git a/src/termination.cc b/src/termination.cc
index bfadb64..3ba1213 100644
--- a/src/termination.cc
+++ b/src/termination.cc
@@ -31,6 +31,33 @@ namespace Implementation {
namespace Termination {
+void
+assign_all_inequalities_approximation(const Constraint_System& cs_in,
+ Constraint_System& cs_out) {
+ if (cs_in.has_strict_inequalities() || cs_in.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 = cs_in.begin(),
+ i_end = cs_in.end(); i != i_end; ++i) {
+ const Constraint& c = *i;
+ if (c.is_equality()) {
+ // Insert the two corresponding opposing inequalities.
+ cs_out.insert(Linear_Expression(c) >= 0);
+ cs_out.insert(Linear_Expression(c) <= 0);
+ }
+ else if (c.is_strict_inequality())
+ // Insert the non-strict approximation.
+ cs_out.insert(Linear_Expression(c) >= 0);
+ else
+ // Insert as is.
+ cs_out.insert(c);
+ }
+ }
+ else
+ // No strict inequality and no equality constraints.
+ cs_out = cs_in;
+}
+
template <>
void
assign_all_inequalities_approximation(const C_Polyhedron& ph,
diff --git a/src/termination.templates.hh b/src/termination.templates.hh
index 79abb37..f60573c 100644
--- a/src/termination.templates.hh
+++ b/src/termination.templates.hh
@@ -132,33 +132,15 @@ output_function_PR(std::ostream& s, const Variable& v) {
}
#endif
-template <typename PSET>
void
+assign_all_inequalities_approximation(const Constraint_System& cs_in,
+ Constraint_System& cs_out);
+
+template <typename PSET>
+inline void
assign_all_inequalities_approximation(const PSET& pset,
Constraint_System& cs) {
- 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.
- cs.insert(Linear_Expression(c) >= 0);
- cs.insert(Linear_Expression(c) <= 0);
- }
- else if (c.is_strict_inequality())
- // Insert the non-strict approximation.
- cs.insert(Linear_Expression(c) >= 0);
- else
- // Insert as is.
- cs.insert(c);
- }
- }
- else
- // No strict inequality and no equality constraints.
- cs = pset_cs;
+ assign_all_inequalities_approximation(pset.minimized_constraints(), cs);
}
template <>
@@ -166,20 +148,6 @@ void
assign_all_inequalities_approximation(const C_Polyhedron& ph,
Constraint_System& cs);
-template <typename T>
-void
-assign_all_inequalities_approximation(const BD_Shape<T>& bds,
- Constraint_System& cs) {
- cs = bds.minimized_constraints();
-}
-
-template <typename T>
-void
-assign_all_inequalities_approximation(const Octagonal_Shape<T>& ocs,
- Constraint_System& cs) {
- cs = ocs.minimized_constraints();
-}
-
void
shift_unprimed_variables(Constraint_System& cs);
More information about the PPL-devel
mailing list