[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