summaryrefslogtreecommitdiff
path: root/boost/icl/concept/interval.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/icl/concept/interval.hpp')
-rw-r--r--boost/icl/concept/interval.hpp353
1 files changed, 178 insertions, 175 deletions
diff --git a/boost/icl/concept/interval.hpp b/boost/icl/concept/interval.hpp
index 487d424abd..1a4654a8d2 100644
--- a/boost/icl/concept/interval.hpp
+++ b/boost/icl/concept/interval.hpp
@@ -8,7 +8,7 @@ Copyright (c) 2010-2010: Joachim Faulhaber
#ifndef BOOST_ICL_CONCEPT_INTERVAL_HPP_JOFA_100323
#define BOOST_ICL_CONCEPT_INTERVAL_HPP_JOFA_100323
-#include <boost/assert.hpp>
+#include <boost/assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/or.hpp>
@@ -38,7 +38,7 @@ namespace boost{namespace icl
//==============================================================================
template<class Type>
inline typename enable_if<is_interval<Type>, bool>::type
-domain_less(const typename interval_traits<Type>::domain_type& left,
+domain_less(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
return typename interval_traits<Type>::domain_compare()(left, right);
@@ -46,7 +46,7 @@ domain_less(const typename interval_traits<Type>::domain_type& left,
template<class Type>
inline typename enable_if<is_interval<Type>, bool>::type
-domain_less_equal(const typename interval_traits<Type>::domain_type& left,
+domain_less_equal(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
return !(typename interval_traits<Type>::domain_compare()(right, left));
@@ -54,7 +54,7 @@ domain_less_equal(const typename interval_traits<Type>::domain_type& left,
template<class Type>
inline typename enable_if<is_interval<Type>, bool>::type
-domain_equal(const typename interval_traits<Type>::domain_type& left,
+domain_equal(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
typedef typename interval_traits<Type>::domain_compare domain_compare;
@@ -64,7 +64,7 @@ domain_equal(const typename interval_traits<Type>::domain_type& left,
template<class Type>
inline typename enable_if< is_interval<Type>
, typename interval_traits<Type>::domain_type>::type
-domain_next(const typename interval_traits<Type>::domain_type value)
+domain_next(const typename interval_traits<Type>::domain_type value)
{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
@@ -74,7 +74,7 @@ domain_next(const typename interval_traits<Type>::domain_type value)
template<class Type>
inline typename enable_if< is_interval<Type>
, typename interval_traits<Type>::domain_type>::type
-domain_prior(const typename interval_traits<Type>::domain_type value)
+domain_prior(const typename interval_traits<Type>::domain_type value)
{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
@@ -110,7 +110,7 @@ singleton(const typename interval_traits<Type>::domain_type& value)
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(value) ));
+ ::is_less_than(value) ));
return interval_traits<Type>::construct(domain_prior<Type>(value), value);
}
@@ -123,7 +123,7 @@ singleton(const typename interval_traits<Type>::domain_type& value)
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(value)));
+ ::is_less_than(value)));
return interval_traits<Type>::construct( domain_prior<Type>(value)
, domain_next<Type>(value));
@@ -149,10 +149,10 @@ namespace detail
//==============================================================================
//= Construct<Interval> unit_trail == generalized singleton
-// The smallest interval on an incrementable (and decrementable) type that can
+// The smallest interval on an incrementable (and decrementable) type that can
// be constructed using ++ and -- and such that it contains a given value.
-// If 'Type' is discrete, 'unit_trail' and 'singleton' are identical. So we
-// can view 'unit_trail' as a generalized singleton for static intervals of
+// If 'Type' is discrete, 'unit_trail' and 'singleton' are identical. So we
+// can view 'unit_trail' as a generalized singleton for static intervals of
// continuous types.
//==============================================================================
template<class Type>
@@ -179,7 +179,7 @@ unit_trail(const typename interval_traits<Type>::domain_type& value)
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(value) ));
+ ::is_less_than(value) ));
return interval_traits<Type>::construct(domain_prior<Type>(value), value);
}
@@ -196,7 +196,7 @@ unit_trail(const typename interval_traits<Type>::domain_type& value)
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(value)));
+ ::is_less_than(value)));
return interval_traits<Type>::construct( domain_prior<Type>(value)
, domain_next<Type>(value));
@@ -263,7 +263,8 @@ typename enable_if<is_interval<Type>, Type>::type
span(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
- if(interval_traits<Type>::domain_compare()(left,right))
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ if(domain_compare()(left,right))
return construct<Type>(left, right);
else
return construct<Type>(right, left);
@@ -276,7 +277,8 @@ typename enable_if<is_static_right_open<Type>, Type>::type
hull(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
- if(interval_traits<Type>::domain_compare()(left,right))
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ if(domain_compare()(left,right))
return construct<Type>(left, domain_next<Type>(right));
else
return construct<Type>(right, domain_next<Type>(left));
@@ -289,16 +291,16 @@ hull(const typename interval_traits<Type>::domain_type& left,
{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
- if(interval_traits<Type>::domain_compare()(left,right))
+ if(domain_compare()(left,right))
{
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(left) ));
+ ::is_less_than(left) ));
return construct<Type>(domain_prior<Type>(left), right);
}
else
{
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(right) ));
+ ::is_less_than(right) ));
return construct<Type>(domain_prior<Type>(right), left);
}
}
@@ -308,7 +310,8 @@ typename enable_if<is_static_closed<Type>, Type>::type
hull(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
- if(interval_traits<Type>::domain_compare()(left,right))
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ if(domain_compare()(left,right))
return construct<Type>(left, right);
else
return construct<Type>(right, left);
@@ -321,17 +324,17 @@ hull(const typename interval_traits<Type>::domain_type& left,
{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
- if(interval_traits<Type>::domain_compare()(left,right))
+ if(domain_compare()(left,right))
{
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(left) ));
+ ::is_less_than(left) ));
return construct<Type>( domain_prior<Type>(left)
, domain_next<Type>(right));
}
else
{
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(right) ));
+ ::is_less_than(right) ));
return construct<Type>( domain_prior<Type>(right)
, domain_next<Type>(left));
}
@@ -342,7 +345,8 @@ typename enable_if<has_dynamic_bounds<Type>, Type>::type
hull(const typename interval_traits<Type>::domain_type& left,
const typename interval_traits<Type>::domain_type& right)
{
- if(interval_traits<Type>::domain_compare()(left,right))
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ if(domain_compare()(left,right))
return construct<Type>(left, right, interval_bounds::closed());
else
return construct<Type>(right, left, interval_bounds::closed());
@@ -353,160 +357,160 @@ hull(const typename interval_traits<Type>::domain_type& left,
//==============================================================================
template<class Type>
-inline typename enable_if<is_interval<Type>,
+inline typename enable_if<is_interval<Type>,
typename interval_traits<Type>::domain_type>::type
lower(const Type& object)
-{
+{
return interval_traits<Type>::lower(object);
}
template<class Type>
-inline typename enable_if<is_interval<Type>,
+inline typename enable_if<is_interval<Type>,
typename interval_traits<Type>::domain_type>::type
upper(const Type& object)
-{
+{
return interval_traits<Type>::upper(object);
}
//- first ----------------------------------------------------------------------
template<class Type>
-inline typename
+inline typename
enable_if< mpl::or_<is_static_right_open<Type>, is_static_closed<Type> >
, typename interval_traits<Type>::domain_type>::type
first(const Type& object)
-{
+{
return lower(object);
}
template<class Type>
-inline typename
+inline typename
enable_if< mpl::and_< mpl::or_<is_static_left_open<Type>, is_static_open<Type> >
, is_discrete<typename interval_traits<Type>::domain_type> >
, typename interval_traits<Type>::domain_type>::type
first(const Type& object)
-{
+{
return domain_next<Type>(lower(object));
}
template<class Type>
-inline typename enable_if<is_discrete_interval<Type>,
+inline typename enable_if<is_discrete_interval<Type>,
typename interval_traits<Type>::domain_type>::type
first(const Type& object)
-{
- return is_left_closed(object.bounds()) ?
- lower(object) :
+{
+ return is_left_closed(object.bounds()) ?
+ lower(object) :
domain_next<Type>(lower(object));
}
//- last -----------------------------------------------------------------------
template<class Type>
-inline typename
+inline typename
enable_if< mpl::or_<is_static_left_open<Type>, is_static_closed<Type> >
, typename interval_traits<Type>::domain_type>::type
last(const Type& object)
-{
+{
return upper(object);
}
template<class Type>
-inline typename
+inline typename
enable_if< mpl::and_< mpl::or_<is_static_right_open<Type>, is_static_open<Type> >
, is_discrete<typename interval_traits<Type>::domain_type> >
, typename interval_traits<Type>::domain_type>::type
last(const Type& object)
-{
+{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than(upper(object)) ));
+ ::is_less_than(upper(object)) ));
return domain_prior<Type>(upper(object));
}
template<class Type>
-inline typename enable_if<is_discrete_interval<Type>,
+inline typename enable_if<is_discrete_interval<Type>,
typename interval_traits<Type>::domain_type>::type
last(const Type& object)
-{
+{
typedef typename interval_traits<Type>::domain_type domain_type;
typedef typename interval_traits<Type>::domain_compare domain_compare;
BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
- ::is_less_than_or(upper(object), is_right_closed(object.bounds())) ));
- return is_right_closed(object.bounds()) ?
- upper(object) :
+ ::is_less_than_or(upper(object), is_right_closed(object.bounds())) ));
+ return is_right_closed(object.bounds()) ?
+ upper(object) :
domain_prior<Type>(upper(object));
}
//- last_next ------------------------------------------------------------------
template<class Type>
-inline typename
+inline typename
enable_if< mpl::and_< mpl::or_<is_static_left_open<Type>, is_static_closed<Type> >
, is_discrete<typename interval_traits<Type>::domain_type> >
, typename interval_traits<Type>::domain_type>::type
last_next(const Type& object)
-{
+{
return domain_next<Type>(upper(object));
}
template<class Type>
-inline typename
+inline typename
enable_if< mpl::and_< mpl::or_<is_static_right_open<Type>, is_static_open<Type> >
, is_discrete<typename interval_traits<Type>::domain_type> >
, typename interval_traits<Type>::domain_type>::type
last_next(const Type& object)
-{
+{
//CL typedef typename interval_traits<Type>::domain_type domain_type;
return upper(object); // NOTE: last_next is implemented to avoid calling pred(object)
} // For unsigned integral types this may cause underflow.
template<class Type>
-inline typename enable_if<is_discrete_interval<Type>,
+inline typename enable_if<is_discrete_interval<Type>,
typename interval_traits<Type>::domain_type>::type
last_next(const Type& object)
-{
- return is_right_closed(object.bounds()) ?
- domain_next<Type>(upper(object)):
+{
+ return is_right_closed(object.bounds()) ?
+ domain_next<Type>(upper(object)):
upper(object) ;
}
//------------------------------------------------------------------------------
template<class Type>
-typename enable_if<has_dynamic_bounds<Type>,
+typename enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type>::type
bounded_lower(const Type& object)
-{
- return typename
- Type::bounded_domain_type(lower(object), object.bounds().left());
+{
+ return typename
+ Type::bounded_domain_type(lower(object), object.bounds().left());
}
template<class Type>
-typename enable_if<has_dynamic_bounds<Type>,
+typename enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type>::type
reverse_bounded_lower(const Type& object)
-{
- return typename
- Type::bounded_domain_type(lower(object),
- object.bounds().reverse_left());
+{
+ return typename
+ Type::bounded_domain_type(lower(object),
+ object.bounds().reverse_left());
}
template<class Type>
-typename enable_if<has_dynamic_bounds<Type>,
+typename enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type>::type
bounded_upper(const Type& object)
-{
- return typename
- Type::bounded_domain_type(upper(object),
- object.bounds().right());
+{
+ return typename
+ Type::bounded_domain_type(upper(object),
+ object.bounds().right());
}
template<class Type>
-typename enable_if<has_dynamic_bounds<Type>,
+typename enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type>::type
reverse_bounded_upper(const Type& object)
-{
- return typename
- Type::bounded_domain_type(upper(object),
- object.bounds().reverse_right());
+{
+ return typename
+ Type::bounded_domain_type(upper(object),
+ object.bounds().reverse_right());
}
//- bounds ---------------------------------------------------------------------
@@ -532,36 +536,36 @@ bounds(const Type&)
template<class Type>
typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
is_empty(const Type& object)
-{
- return domain_less_equal<Type>(upper(object), lower(object));
+{
+ return domain_less_equal<Type>(upper(object), lower(object));
}
template<class Type>
typename boost::enable_if<is_static_closed<Type>, bool>::type
is_empty(const Type& object)
-{
- return domain_less<Type>(upper(object), lower(object));
+{
+ return domain_less<Type>(upper(object), lower(object));
}
template<class Type>
typename boost::enable_if<is_static_open<Type>, bool>::type
is_empty(const Type& object)
-{
- return domain_less_equal<Type>(upper(object), lower(object) )
+{
+ return domain_less_equal<Type>(upper(object), lower(object) )
|| domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
}
template<class Type>
typename boost::enable_if<is_discrete_interval<Type>, bool>::type
is_empty(const Type& object)
-{
+{
if(object.bounds() == interval_bounds::closed())
- return domain_less<Type>(upper(object), lower(object));
+ return domain_less<Type>(upper(object), lower(object));
else if(object.bounds() == interval_bounds::open())
return domain_less_equal<Type>(upper(object), lower(object) )
|| domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
else
- return domain_less_equal<Type>(upper(object), lower(object));
+ return domain_less_equal<Type>(upper(object), lower(object));
}
template<class Type>
@@ -582,32 +586,32 @@ namespace non_empty
template<class Type>
inline typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
- {
+ {
BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
- return domain_less_equal<Type>(upper(left), lower(right));
+ return domain_less_equal<Type>(upper(left), lower(right));
}
template<class Type>
inline typename boost::enable_if<is_discrete_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
- {
+ {
BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
- return domain_less<Type>(last(left), first(right));
+ return domain_less<Type>(last(left), first(right));
}
template<class Type>
inline typename boost::
enable_if<has_symmetric_bounds<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
- {
+ {
BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
- return domain_less<Type>(last(left), first(right));
+ return domain_less<Type>(last(left), first(right));
}
template<class Type>
inline typename boost::enable_if<is_continuous_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
- {
+ {
BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
return domain_less <Type>(upper(left), lower(right))
|| ( domain_equal<Type>(upper(left), lower(right))
@@ -617,7 +621,7 @@ namespace non_empty
template<class Type>
inline typename boost::enable_if<is_interval<Type>, bool>::type
contains(const Type& super, const Type& sub)
- {
+ {
return lower_less_equal(super,sub) && upper_less_equal(sub,super);
}
@@ -629,7 +633,7 @@ namespace non_empty
template<class Type>
inline typename boost::enable_if<is_interval<Type>, bool>::type
contains(const Type& super, const Type& sub)
-{
+{
return icl::is_empty(sub) || non_empty::contains(super, sub);
}
@@ -637,7 +641,7 @@ template<class Type>
typename boost::enable_if<is_discrete_static<Type>, bool>::type
contains(const Type& super, const typename interval_traits<Type>::domain_type& element)
{
- return domain_less_equal<Type>(icl::first(super), element )
+ return domain_less_equal<Type>(icl::first(super), element )
&& domain_less_equal<Type>( element, icl::last(super));
}
@@ -645,7 +649,7 @@ template<class Type>
typename boost::enable_if<is_continuous_left_open<Type>, bool>::type
contains(const Type& super, const typename interval_traits<Type>::domain_type& element)
{
- return domain_less <Type>(icl::lower(super), element )
+ return domain_less <Type>(icl::lower(super), element )
&& domain_less_equal<Type>( element, icl::upper(super));
}
@@ -653,7 +657,7 @@ template<class Type>
typename boost::enable_if<is_continuous_right_open<Type>, bool>::type
contains(const Type& super, const typename interval_traits<Type>::domain_type& element)
{
- return domain_less_equal<Type>(icl::lower(super), element )
+ return domain_less_equal<Type>(icl::lower(super), element )
&& domain_less <Type>( element, icl::upper(super));
}
@@ -662,12 +666,12 @@ typename boost::enable_if<has_dynamic_bounds<Type>, bool>::type
contains(const Type& super, const typename interval_traits<Type>::domain_type& element)
{
return
- (is_left_closed(super.bounds())
- ? domain_less_equal<Type>(lower(super), element)
+ (is_left_closed(super.bounds())
+ ? domain_less_equal<Type>(lower(super), element)
: domain_less<Type>(lower(super), element))
&&
- (is_right_closed(super.bounds())
- ? domain_less_equal<Type>(element, upper(super))
+ (is_right_closed(super.bounds())
+ ? domain_less_equal<Type>(element, upper(super))
: domain_less<Type>(element, upper(super)));
}
@@ -675,7 +679,7 @@ contains(const Type& super, const typename interval_traits<Type>::domain_type& e
template<class Type>
inline typename boost::enable_if<is_interval<Type>, bool>::type
within(const Type& sub, const Type& super)
-{
+{
return contains(super,sub);
}
@@ -684,37 +688,37 @@ within(const Type& sub, const Type& super)
//= Equivalences and Orderings
//==============================================================================
//- exclusive_less -------------------------------------------------------------
-/** Maximal element of <tt>left</tt> is less than the minimal element of
+/** Maximal element of <tt>left</tt> is less than the minimal element of
<tt>right</tt> */
template<class Type>
inline typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
-{
+{
return icl::is_empty(left) || icl::is_empty(right)
- || domain_less_equal<Type>(upper(left), lower(right));
+ || domain_less_equal<Type>(upper(left), lower(right));
}
template<class Type>
inline typename boost::enable_if<is_discrete_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
-{
+{
return icl::is_empty(left) || icl::is_empty(right)
- || domain_less<Type>(last(left), first(right));
+ || domain_less<Type>(last(left), first(right));
}
template<class Type>
inline typename boost::
enable_if<has_symmetric_bounds<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
-{
+{
return icl::is_empty(left) || icl::is_empty(right)
- || domain_less<Type>(last(left), first(right));
+ || domain_less<Type>(last(left), first(right));
}
template<class Type>
inline typename boost::enable_if<is_continuous_interval<Type>, bool>::type
exclusive_less(const Type& left, const Type& right)
-{
+{
return icl::is_empty(left) || icl::is_empty(right)
|| domain_less<Type>(upper(left), lower(right))
|| ( domain_equal<Type>(upper(left), lower(right))
@@ -729,24 +733,24 @@ lower_less(const Type& left, const Type& right)
{
return domain_less<Type>(lower(left), lower(right));
}
-
+
template<class Type>
typename boost::enable_if<is_discrete_interval<Type>, bool>::type
lower_less(const Type& left, const Type& right)
{
return domain_less<Type>(first(left), first(right));
}
-
+
template<class Type>
typename boost::enable_if<is_continuous_interval<Type>, bool>::type
lower_less(const Type& left, const Type& right)
{
if(left_bounds(left,right) == interval_bounds::right_open()) //'[(' == 10
return domain_less_equal<Type>(lower(left), lower(right));
- else
+ else
return domain_less<Type>(lower(left), lower(right));
}
-
+
//------------------------------------------------------------------------------
template<class Type>
@@ -762,7 +766,7 @@ upper_less(const Type& left, const Type& right)
{
return domain_less<Type>(last(left), last(right));
}
-
+
template<class Type>
typename boost::enable_if<is_continuous_interval<Type>, bool>::type
upper_less(const Type& left, const Type& right)
@@ -772,10 +776,10 @@ upper_less(const Type& left, const Type& right)
else
return domain_less<Type>(upper(left), upper(right));
}
-
+
//------------------------------------------------------------------------------
template<class Type>
-typename boost::enable_if<has_dynamic_bounds<Type>,
+typename boost::enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type >::type
lower_min(const Type& left, const Type& right)
{
@@ -784,7 +788,7 @@ lower_min(const Type& left, const Type& right)
//------------------------------------------------------------------------------
template<class Type>
-typename boost::enable_if<has_dynamic_bounds<Type>,
+typename boost::enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type >::type
lower_max(const Type& left, const Type& right)
{
@@ -793,7 +797,7 @@ lower_max(const Type& left, const Type& right)
//------------------------------------------------------------------------------
template<class Type>
-typename boost::enable_if<has_dynamic_bounds<Type>,
+typename boost::enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type >::type
upper_max(const Type& left, const Type& right)
{
@@ -802,7 +806,7 @@ upper_max(const Type& left, const Type& right)
//------------------------------------------------------------------------------
template<class Type>
-typename boost::enable_if<has_dynamic_bounds<Type>,
+typename boost::enable_if<has_dynamic_bounds<Type>,
typename Type::bounded_domain_type >::type
upper_min(const Type& left, const Type& right)
{
@@ -892,7 +896,7 @@ template<class Type>
typename boost::enable_if<is_interval<Type>, bool>::type
operator == (const Type& left, const Type& right)
{
- return (icl::is_empty(left) && icl::is_empty(right))
+ return (icl::is_empty(left) && icl::is_empty(right))
|| (lower_equal(left,right) && upper_equal(left,right));
}
@@ -908,11 +912,11 @@ template<class Type>
typename boost::enable_if<is_interval<Type>, bool>::type
operator < (const Type& left, const Type& right)
{
- if(icl::is_empty(left))
+ if(icl::is_empty(left))
return !icl::is_empty(right);
- else
- return lower_less(left,right)
- || (lower_equal(left,right) && upper_less(left,right));
+ else
+ return lower_less(left,right)
+ || (lower_equal(left,right) && upper_less(left,right));
}
template<class Type>
@@ -928,15 +932,15 @@ operator > (const Type& left, const Type& right)
template<class Type>
typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
touches(const Type& left, const Type& right)
-{
- return domain_equal<Type>(upper(left), lower(right));
+{
+ return domain_equal<Type>(upper(left), lower(right));
}
template<class Type>
typename boost::enable_if<has_symmetric_bounds<Type>, bool>::type
touches(const Type& left, const Type& right)
-{
- return domain_equal<Type>(last_next(left), first(right));
+{
+ return domain_equal<Type>(last_next(left), first(right));
}
template<class Type>
@@ -961,22 +965,22 @@ touches(const Type& left, const Type& right)
//- cardinality ----------------------------------------------------------------
template<class Type>
-typename boost::enable_if<is_continuous_interval<Type>,
+typename boost::enable_if<is_continuous_interval<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
cardinality(const Type& object)
{
typedef typename size_type_of<interval_traits<Type> >::type SizeT;
if(icl::is_empty(object))
return icl::identity_element<SizeT>::value();
- else if( object.bounds() == interval_bounds::closed()
+ else if( object.bounds() == interval_bounds::closed()
&& domain_equal<Type>(lower(object), upper(object)))
return icl::unit_element<SizeT>::value();
- else
+ else
return icl::infinity<SizeT>::value();
}
template<class Type>
-typename boost::enable_if<is_discrete_interval<Type>,
+typename boost::enable_if<is_discrete_interval<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
cardinality(const Type& object)
{
@@ -986,19 +990,19 @@ cardinality(const Type& object)
}
template<class Type>
-typename boost::enable_if<is_continuous_asymmetric<Type>,
+typename boost::enable_if<is_continuous_asymmetric<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
cardinality(const Type& object)
{
typedef typename size_type_of<interval_traits<Type> >::type SizeT;
if(icl::is_empty(object))
return icl::identity_element<SizeT>::value();
- else
+ else
return icl::infinity<SizeT>::value();
}
template<class Type>
-typename boost::enable_if<is_discrete_asymmetric<Type>,
+typename boost::enable_if<is_discrete_asymmetric<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
cardinality(const Type& object)
{
@@ -1008,7 +1012,7 @@ cardinality(const Type& object)
}
template<class Type>
-typename boost::enable_if<has_symmetric_bounds<Type>,
+typename boost::enable_if<has_symmetric_bounds<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
cardinality(const Type& object)
{
@@ -1021,7 +1025,7 @@ cardinality(const Type& object)
//- size -----------------------------------------------------------------------
template<class Type>
-inline typename enable_if<is_interval<Type>,
+inline typename enable_if<is_interval<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
size(const Type& object)
{
@@ -1030,7 +1034,7 @@ size(const Type& object)
//- length ---------------------------------------------------------------------
template<class Type>
-inline typename boost::enable_if<is_continuous_interval<Type>,
+inline typename boost::enable_if<is_continuous_interval<Type>,
typename difference_type_of<interval_traits<Type> >::type>::type
length(const Type& object)
{
@@ -1040,7 +1044,7 @@ length(const Type& object)
}
template<class Type>
-inline typename boost::enable_if<is_discrete_interval<Type>,
+inline typename boost::enable_if<is_discrete_interval<Type>,
typename difference_type_of<interval_traits<Type> >::type>::type
length(const Type& object)
{
@@ -1050,7 +1054,7 @@ length(const Type& object)
}
template<class Type>
-typename boost::enable_if<is_continuous_asymmetric<Type>,
+typename boost::enable_if<is_continuous_asymmetric<Type>,
typename difference_type_of<interval_traits<Type> >::type>::type
length(const Type& object)
{
@@ -1060,7 +1064,7 @@ length(const Type& object)
}
template<class Type>
-inline typename boost::enable_if<is_discrete_static<Type>,
+inline typename boost::enable_if<is_discrete_static<Type>,
typename difference_type_of<interval_traits<Type> >::type>::type
length(const Type& object)
{
@@ -1071,7 +1075,7 @@ length(const Type& object)
//- iterative_size -------------------------------------------------------------
template<class Type>
-inline typename enable_if<is_interval<Type>,
+inline typename enable_if<is_interval<Type>,
typename size_type_of<interval_traits<Type> >::type>::type
iterative_size(const Type&)
{
@@ -1095,10 +1099,10 @@ hull(Type left, const Type& right)
else if(icl::is_empty(left))
return right;
- return
+ return
construct<Type>
(
- (std::min)(lower(left), lower(right), domain_compare()),
+ (std::min)(lower(left), lower(right), domain_compare()),
(std::max)(upper(left), upper(right), domain_compare())
);
}
@@ -1114,7 +1118,7 @@ hull(Type left, const Type& right)
return dynamic_interval_traits<Type>::construct_bounded
(
- lower_min(left, right),
+ lower_min(left, right),
upper_max(left, right)
);
}
@@ -1123,7 +1127,7 @@ hull(Type left, const Type& right)
//= Subtraction
//==============================================================================
//- left_subtract --------------------------------------------------------------
-/** subtract \c left_minuend from the \c right interval on it's left side.
+/** subtract \c left_minuend from the \c right interval on it's left side.
Return the difference: The part of \c right right of \c left_minuend.
\code
right_over = right - left_minuend; //on the left.
@@ -1137,7 +1141,7 @@ typename boost::enable_if<is_asymmetric_interval<Type>, Type>::type
left_subtract(Type right, const Type& left_minuend)
{
if(exclusive_less(left_minuend, right))
- return right;
+ return right;
return construct<Type>(upper(left_minuend), upper(right));
}
@@ -1147,7 +1151,7 @@ typename boost::enable_if<is_static_closed<Type>, Type>::type
left_subtract(Type right, const Type& left_minuend)
{
if(exclusive_less(left_minuend, right))
- return right;
+ return right;
else if(upper_less_equal(right, left_minuend))
return identity_element<Type>::value();
@@ -1159,7 +1163,7 @@ typename boost::enable_if<is_static_open<Type>, Type>::type
left_subtract(Type right, const Type& left_minuend)
{
if(exclusive_less(left_minuend, right))
- return right;
+ return right;
return construct<Type>(domain_prior<Type>(upper(left_minuend)), upper(right));
}
@@ -1169,14 +1173,14 @@ typename boost::enable_if<has_dynamic_bounds<Type>, Type>::type
left_subtract(Type right, const Type& left_minuend)
{
if(exclusive_less(left_minuend, right))
- return right;
+ return right;
return dynamic_interval_traits<Type>::construct_bounded
( reverse_bounded_upper(left_minuend), bounded_upper(right) );
}
//- right_subtract -------------------------------------------------------------
-/** subtract \c right_minuend from the \c left interval on it's right side.
+/** subtract \c right_minuend from the \c left interval on it's right side.
Return the difference: The part of \c left left of \c right_minuend.
\code
left_over = left - right_minuend; //on the right side.
@@ -1190,7 +1194,7 @@ typename boost::enable_if<is_asymmetric_interval<Type>, Type>::type
right_subtract(Type left, const Type& right_minuend)
{
if(exclusive_less(left, right_minuend))
- return left;
+ return left;
return construct<Type>(lower(left), lower(right_minuend));
}
@@ -1221,7 +1225,7 @@ typename boost::enable_if<has_dynamic_bounds<Type>, Type>::type
right_subtract(Type left, const Type& right_minuend)
{
if(exclusive_less(left, right_minuend))
- return left;
+ return left;
return dynamic_interval_traits<Type>::construct_bounded
( bounded_lower(left), reverse_bounded_lower(right_minuend) );
@@ -1272,11 +1276,11 @@ operator & (Type left, const Type& right)
{
if(icl::is_empty(left) || icl::is_empty(right))
return identity_element<Type>::value();
- else
+ else
return dynamic_interval_traits<Type>::construct_bounded
(
- lower_max(left, right),
- upper_min(left, right)
+ lower_max(left, right),
+ upper_min(left, right)
);
}
@@ -1285,18 +1289,18 @@ operator & (Type left, const Type& right)
template<class Type>
typename boost::enable_if<is_interval<Type>, bool>::type
intersects(const Type& left, const Type& right)
-{
- return !( icl::is_empty(left) || icl::is_empty(right)
- || exclusive_less(left,right) || exclusive_less(right,left));
+{
+ return !( icl::is_empty(left) || icl::is_empty(right)
+ || exclusive_less(left,right) || exclusive_less(right,left));
}
//- disjoint -------------------------------------------------------------------
template<class Type>
typename boost::enable_if<is_interval<Type>, bool>::type
disjoint(const Type& left, const Type& right)
-{
- return icl::is_empty(left) || icl::is_empty(right)
- || exclusive_less(left,right) || exclusive_less(right,left);
+{
+ return icl::is_empty(left) || icl::is_empty(right)
+ || exclusive_less(left,right) || exclusive_less(right,left);
}
//==============================================================================
@@ -1362,7 +1366,7 @@ inner_complement(const Type& left, const Type& right)
template<class Type>
inline typename boost::enable_if<is_interval<Type>, Type>::type
between(const Type& left, const Type& right)
-{
+{
return inner_complement(left, right);
}
@@ -1375,7 +1379,7 @@ template<class Type>
typename boost::
enable_if< mpl::and_< is_interval<Type>
, has_difference<typename interval_traits<Type>::domain_type>
- , is_discrete<typename interval_traits<Type>::domain_type>
+ , is_discrete<typename interval_traits<Type>::domain_type>
>
, typename difference_type_of<interval_traits<Type> >::type>::type
distance(const Type& x1, const Type& x2)
@@ -1396,7 +1400,7 @@ template<class Type>
typename boost::
enable_if< mpl::and_< is_interval<Type>
, has_difference<typename interval_traits<Type>::domain_type>
- , is_continuous<typename interval_traits<Type>::domain_type>
+ , is_continuous<typename interval_traits<Type>::domain_type>
>
, typename difference_type_of<interval_traits<Type> >::type>::type
distance(const Type& x1, const Type& x2)
@@ -1430,9 +1434,9 @@ left_bracket(const Type&) { return "["; }
template<class Type>
typename boost::enable_if<has_dynamic_bounds<Type>, std::string>::type
-left_bracket(const Type& object)
-{
- return left_bracket(object.bounds());
+left_bracket(const Type& object)
+{
+ return left_bracket(object.bounds());
}
//------------------------------------------------------------------------------
@@ -1450,28 +1454,27 @@ right_bracket(const Type&) { return "]"; }
template<class Type>
typename boost::enable_if<has_dynamic_bounds<Type>, std::string>::type
-right_bracket(const Type& object)
-{
- return right_bracket(object.bounds());
+right_bracket(const Type& object)
+{
+ return right_bracket(object.bounds());
}
//------------------------------------------------------------------------------
template<class CharType, class CharTraits, class Type>
-typename boost::enable_if<is_interval<Type>,
+typename boost::enable_if<is_interval<Type>,
std::basic_ostream<CharType, CharTraits> >::type&
operator << (std::basic_ostream<CharType, CharTraits> &stream, Type const& object)
{
if(boost::icl::is_empty(object))
- return stream << left_bracket<Type>(object) << right_bracket<Type>(object);
+ return stream << left_bracket<Type>(object) << right_bracket<Type>(object);
else
- return stream << left_bracket<Type>(object)
- << interval_traits<Type>::lower(object)
- << ","
- << interval_traits<Type>::upper(object)
+ return stream << left_bracket<Type>(object)
+ << interval_traits<Type>::lower(object)
+ << ","
+ << interval_traits<Type>::upper(object)
<< right_bracket<Type>(object) ;
}
}} // namespace icl boost
#endif
-