[PPL-devel] [GIT] ppl/ppl(master): Drafted drop_some_non_integer_points() for Interval and Box.

Enea Zaffanella zaffanella at cs.unipr.it
Wed Mar 31 22:21:39 CEST 2010


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

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Wed Mar 31 22:17:48 2010 +0200

Drafted drop_some_non_integer_points() for Interval and Box.

---

 src/Box.templates.hh |   17 +++++++++++++++--
 src/Interval.defs.hh |   19 +++++++++++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/Box.templates.hh b/src/Box.templates.hh
index 524a4f5..930af84 100644
--- a/src/Box.templates.hh
+++ b/src/Box.templates.hh
@@ -1674,7 +1674,13 @@ Box<ITV>::drop_some_non_integer_points(Complexity_Class) {
       && !ITV::info_type::store_open)
     return;
 
-  // FIXME(0.11): complete.
+  if (marked_empty())
+    return;
+
+  for (dimension_type k = seq.size(); k-- > 0; )
+    seq[k].drop_some_non_integer_points();
+
+  PPL_ASSERT(OK());
 }
 
 template <typename ITV>
@@ -1691,7 +1697,14 @@ Box<ITV>::drop_some_non_integer_points(const Variables_Set& vars,
       && !ITV::info_type::store_open)
     return;
 
-  // FIXME(0.11): complete.
+  if (marked_empty())
+    return;
+
+  for (Variables_Set::const_iterator v_i = vars.begin(),
+         v_end = vars.end(); v_i != v_end; ++v_i)
+    seq[*v_i].drop_some_non_integer_points();
+
+  PPL_ASSERT(OK());
 }
 
 template <typename ITV>
diff --git a/src/Interval.defs.hh b/src/Interval.defs.hh
index aed3be3..ac6ce24 100644
--- a/src/Interval.defs.hh
+++ b/src/Interval.defs.hh
@@ -535,6 +535,25 @@ public:
     return u >= l;
   }
 
+  void drop_some_non_integer_points() {
+    if (is_empty())
+      return;
+    if (lower_is_open() && !lower_is_boundary_infinity()) {
+      add_assign_r(lower(), lower(), Boundary(1), ROUND_DOWN);
+      floor_assign_r(lower(), lower(), ROUND_DOWN);
+      info().set_boundary_property(LOWER, OPEN, false);
+    }
+    else
+      ceil_assign_r(lower(), lower(), ROUND_DOWN);
+    if (upper_is_open() && !upper_is_boundary_infinity()) {
+      sub_assign_r(upper(), upper(), Boundary(1), ROUND_UP);
+      ceil_assign_r(upper(), upper(), ROUND_UP);
+      info().set_boundary_property(UPPER, OPEN, false);
+    }
+    else
+      floor_assign_r(upper(), upper(), ROUND_UP);
+  }
+
   template <typename From>
   typename Enable_If<Is_Singleton<From>::value || Is_Interval<From>::value, I_Result>::type
   wrap_assign(Bounded_Integer_Type_Width w,




More information about the PPL-devel mailing list