[PPL-devel] [GIT] ppl/ppl(bounded_arithmetic): Added implementation of the operator<=.
Alberto Gioia
alberto.gioia1 at studenti.unipr.it
Mon Jul 18 00:50:30 CEST 2011
Module: ppl/ppl
Branch: bounded_arithmetic
Commit: e288ab78165d911840adf4a4f770b5355368ae95
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e288ab78165d911840adf4a4f770b5355368ae95
Author: Alberto Gioia <alberto.gioia1 at studenti.unipr.it>
Date: Mon Jul 18 00:49:55 2011 +0200
Added implementation of the operator<=.
---
src/Interval.inlines.hh | 46 +++++++++++++++++++++++++++++++++++-----------
1 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/src/Interval.inlines.hh b/src/Interval.inlines.hh
index 4913371..f88fc60 100644
--- a/src/Interval.inlines.hh
+++ b/src/Interval.inlines.hh
@@ -186,8 +186,10 @@ operator!=(const T1& x, const T2& y) {
template <typename T1, typename T2>
inline typename Enable_If<((Is_Singleton<T1>::value || Is_Interval<T1>::value)
- && (Is_Singleton<T2>::value || Is_Interval<T2>::value)
- && (Is_Interval<T1>::value || Is_Interval<T2>::value)),
+ && (Is_Singleton<T2>::value
+ || Is_Interval<T2>::value)
+ && (Is_Interval<T1>::value
+ || Is_Interval<T2>::value)),
bool>::type
operator>=(const T1& x, const T2& y) {
PPL_ASSERT(f_OK(x));
@@ -196,8 +198,30 @@ operator>=(const T1& x, const T2& y) {
return check_empty_arg(y);
else if (check_empty_arg(y))
return false;
- return ge(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y)) ||
- ge(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y)) ;
+ return
+ ge(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y))
+ &&
+ ge(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y)) ;
+}
+
+template <typename T1, typename T2>
+inline typename Enable_If<((Is_Singleton<T1>::value || Is_Interval<T1>::value)
+ && (Is_Singleton<T2>::value
+ || Is_Interval<T2>::value)
+ && (Is_Interval<T1>::value
+ || Is_Interval<T2>::value)),
+ bool>::type
+operator<=(const T1& x, const T2& y) {
+ PPL_ASSERT(f_OK(x));
+ PPL_ASSERT(f_OK(y));
+ if (check_empty_arg(x))
+ return check_empty_arg(y);
+ else if (check_empty_arg(y))
+ return false;
+ return
+ le(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y))
+ &&
+ le(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y)) ;
}
template <typename Boundary, typename Info>
@@ -993,13 +1017,13 @@ Interval<To_Boundary, To_Info>::xor_assign(const From1& x, const From2& y) {
Same sign.
0 <= xl <= xu, 0 <= yl <= yu
xl <= xu < 0, yl <= yu < 0
- 0 <= XOR(x,y) <= |x+y|
+ 0 <= XOR(x,y) <= |x + y|
*/
if (xls >= 0) {
- Boundary_NS::assign(UPPER, upperx, infox,
- UPPER, f_upper(x), f_info(x));
- Boundary_NS::assign(UPPER, uppery, infoy,
- UPPER, f_upper(y), f_info(y));
+ Boundary_NS::assign(UPPER, upperx, infox,
+ UPPER, f_upper(x), f_info(x));
+ Boundary_NS::assign(UPPER, uppery, infoy,
+ UPPER, f_upper(y), f_info(y));
Boundary_NS::assign(LOWER, lower(), to_info,
LOWER, f_lower(Constant<0>::value),
@@ -1026,9 +1050,9 @@ Interval<To_Boundary, To_Info>::xor_assign(const From1& x, const From2& y) {
upper() = std::numeric_limits<To_Boundary>::max();
else {
Boundary_NS::neg_assign(UPPER, upperx, infox,
- LOWER, f_lower(x), f_info(x));
+ UPPER, f_upper(x), f_info(x));
Boundary_NS::neg_assign(UPPER, uppery, infoy,
- LOWER, f_lower(y), f_info(y));
+ UPPER, f_upper(y), f_info(y));
Boundary_NS::add_assign(UPPER, upper(), to_info,
UPPER, upperx, infox,
UPPER, uppery, infoy);
More information about the PPL-devel
mailing list