$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r65644 - in sandbox/itl/boost/itl: . concept type_traits
From: afojgo_at_[hidden]
Date: 2010-09-27 18:07:10
Author: jofaber
Date: 2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
New Revision: 65644
URL: http://svn.boost.org/trac/boost/changeset/65644
Log:
Refactoring: Replaced T() with construct functions. Improved is_continuous meta function. Stable{msvc-9.0, gcc-3.4.4}
Text files modified: 
   sandbox/itl/boost/itl/closed_interval.hpp            |     2 +-                                      
   sandbox/itl/boost/itl/concept/interval.hpp           |    40 +++++++++++++++++++---------------------
   sandbox/itl/boost/itl/concept/interval_set_value.hpp |     1 +                                       
   sandbox/itl/boost/itl/discrete_interval.hpp          |     8 ++++----                                
   sandbox/itl/boost/itl/gregorian.hpp                  |     7 +++++++                                 
   sandbox/itl/boost/itl/ptime.hpp                      |     8 ++++++++                                
   sandbox/itl/boost/itl/type_traits/is_continuous.hpp  |    39 +++------------------------------------ 
   7 files changed, 43 insertions(+), 62 deletions(-)
Modified: sandbox/itl/boost/itl/closed_interval.hpp
==============================================================================
--- sandbox/itl/boost/itl/closed_interval.hpp	(original)
+++ sandbox/itl/boost/itl/closed_interval.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -34,7 +34,7 @@
     {
         BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
-        BOOST_STATIC_ASSERT((!itl::is_continuous<DomainT>::value));//JODO is_discrete?
+        BOOST_STATIC_ASSERT((itl::is_discrete<DomainT>::value));
     }
 
     //NOTE: Compiler generated copy constructor is used
Modified: sandbox/itl/boost/itl/concept/interval.hpp
==============================================================================
--- sandbox/itl/boost/itl/concept/interval.hpp	(original)
+++ sandbox/itl/boost/itl/concept/interval.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -60,7 +60,7 @@
 template<class Type>
 typename enable_if
 <
-	mpl::and_< is_static_rightopen<Type>
+    mpl::and_< is_static_rightopen<Type>
              , is_discrete<typename interval_traits<Type>::domain_type> >
   , Type
 >::type
@@ -73,35 +73,35 @@
 template<class Type>
 typename enable_if
 <
-	mpl::and_< is_static_leftopen<Type>
+    mpl::and_< is_static_leftopen<Type>
              , is_discrete<typename interval_traits<Type>::domain_type> >
   , Type
 >::type
 construct(const typename interval_traits<Type>::domain_type& value)
 {
     //ASSERT: This always creates an interval with exactly one element
-	BOOST_ASSERT((std::numeric_limits<Type>::min)() < value); 
+    BOOST_ASSERT((std::numeric_limits<Type>::min)() < value); 
     return interval_traits<Type>::construct(itl::pred(value), value);
 }
 
 template<class Type>
 typename enable_if
 <
-	mpl::and_< is_static_open<Type>
+    mpl::and_< is_static_open<Type>
              , is_discrete<typename interval_traits<Type>::domain_type> >
   , Type
 >::type
 construct(const typename interval_traits<Type>::domain_type& value)
 {
     //ASSERT: This always creates an interval with exactly one element
-	BOOST_ASSERT((std::numeric_limits<Type>::min)() < value); 
+    BOOST_ASSERT((std::numeric_limits<Type>::min)() < value); 
     return interval_traits<Type>::construct(itl::pred(value), itl::succ(value));
 }
 
 template<class Type>
 typename enable_if
 <
-	mpl::and_< is_static_closed<Type>
+    mpl::and_< is_static_closed<Type>
              , is_discrete<typename interval_traits<Type>::domain_type> >
   , Type
 >::type
@@ -125,7 +125,7 @@
 typename enable_if<is_asymmetric_interval<Type>, Type>::type
 construct(const typename interval_traits<Type>::domain_type& low,
           const typename interval_traits<Type>::domain_type& up,
-          interval_bounds bounds = interval_bounds::right_open()) //JODO separate static intervals to avoid dependency
+          interval_bounds bounds = interval_bounds::right_open())
 {
     return interval_traits<Type>::construct(low, up);
 }
@@ -710,9 +710,8 @@
     else if(itl::is_empty(left))
         return right;
 
-    //JODO return construct
     return 
-        Type
+        construct<Type>
         (
             (std::min)(lower(left), lower(right), interval_traits<Type>::domain_compare()), 
             (std::max)(upper(left), upper(right), interval_traits<Type>::domain_compare())
@@ -735,7 +734,6 @@
     else if(itl::is_empty(left))
         return right;
 
-    //JODO return  construct<Type,std::less>
     return  dynamic_interval_traits<Type>::construct_bounded
             (
                 lower_min(left, right), 
@@ -762,8 +760,8 @@
 {
     if(exclusive_less(left_minuend, right))
         return right; 
-    //JODO return construct(left_minuend.upper(), right.upper());
-    return Type(upper(left_minuend), upper(right));
+
+    return construct<Type>(upper(left_minuend), upper(right));
 }
 
 template<class Type>
@@ -800,8 +798,7 @@
 {
     if(exclusive_less(left, right_minuend))
         return left; 
-    return Type(lower(left), lower(right_minuend));
-    //JODO return construct(left.lower(), right_minuend.lower());
+    return construct<Type>(lower(left), lower(right_minuend));
 }
 
 template<class Type>
@@ -815,10 +812,9 @@
 typename boost::enable_if<has_dynamic_bounds<Type>, Type>::type
 right_subtract(Type left, const Type& right_minuend)
 {
-    //JODO s.o.
     if(exclusive_less(left, right_minuend))
         return left; 
-    //JODO return construct<Type,std::less>(left.lower(), right_minuend.lower(),
+
     return  dynamic_interval_traits<Type>::construct_bounded
             ( bounded_lower(left), reverse_bounded_lower(right_minuend) );
 }
@@ -833,11 +829,14 @@
 operator & (Type left, const Type& right)
 {
     if(itl::is_empty(left) || itl::is_empty(right))
-        return Type(); //JODO return neutron<Type>::value; neutron for new interval_types.
+        return neutron<Type>::value();
     else
         return
-        Type((std::max)(itl::lower(left), itl::lower(right), interval_traits<Type>::domain_compare()),
-             (std::min)(itl::upper(left), itl::upper(right), interval_traits<Type>::domain_compare()));
+        construct<Type>
+        (
+            (std::max)(itl::lower(left), itl::lower(right), interval_traits<Type>::domain_compare()),
+            (std::min)(itl::upper(left), itl::upper(right), interval_traits<Type>::domain_compare())
+        );
 }
 
 template<class Type>
@@ -852,9 +851,8 @@
 operator & (Type left, const Type& right)
 {
     if(itl::is_empty(left) || itl::is_empty(right))
-        return Type(); //JODO return neutron<Type>::value; neutron for new interval_types.
+        return neutron<Type>::value();
     else 
-        //JODO return  construct<Type,std::less>
         return  dynamic_interval_traits<Type>::construct_bounded
                 (
                     lower_max(left, right), 
Modified: sandbox/itl/boost/itl/concept/interval_set_value.hpp
==============================================================================
--- sandbox/itl/boost/itl/concept/interval_set_value.hpp	(original)
+++ sandbox/itl/boost/itl/concept/interval_set_value.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -8,6 +8,7 @@
 #ifndef BOOST_ITL_CONCEPT_INTERVAL_SET_VALUE_HPP_JOFA_100924
 #define BOOST_ITL_CONCEPT_INTERVAL_SET_VALUE_HPP_JOFA_100924
 
+#include <boost/utility/enable_if.hpp>
 #include <boost/itl/type_traits/is_interval_container.hpp>
 
 namespace boost{ namespace itl
Modified: sandbox/itl/boost/itl/discrete_interval.hpp
==============================================================================
--- sandbox/itl/boost/itl/discrete_interval.hpp	(original)
+++ sandbox/itl/boost/itl/discrete_interval.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -41,7 +41,7 @@
     {
         BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
-        BOOST_STATIC_ASSERT((!itl::is_continuous<DomainT>::value)); //JODO
+        BOOST_STATIC_ASSERT((itl::is_discrete<DomainT>::value));
     }
 
     //NOTE: Compiler generated copy constructor is used
@@ -52,7 +52,7 @@
     {
         BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
-        //JODO BOOST_STATIC_ASSERT((itl::is_continuous<DomainT>::value)); //JODO
+        BOOST_STATIC_ASSERT((itl::is_discrete<DomainT>::value));
     }
 
     /** Interval from <tt>low</tt> to <tt>up</tt> with bounds <tt>bounds</tt> */
@@ -63,7 +63,7 @@
     {
         BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
-        //JODO BOOST_STATIC_ASSERT((!itl::is_continuous<DomainT>::value));
+        BOOST_STATIC_ASSERT((itl::is_discrete<DomainT>::value));
     }
 
     domain_type     lower()const { return _lwb; }
@@ -158,7 +158,7 @@
 struct is_discrete_interval<discrete_interval<DomainT,Compare> >
 {
     typedef is_discrete_interval<discrete_interval<DomainT,Compare> > type;
-    BOOST_STATIC_CONSTANT(bool, value = !is_continuous<DomainT>::value); //JODO
+    BOOST_STATIC_CONSTANT(bool, value = is_discrete<DomainT>::value);
 };
 
 template <class DomainT, ITL_COMPARE Compare>
Modified: sandbox/itl/boost/itl/gregorian.hpp
==============================================================================
--- sandbox/itl/boost/itl/gregorian.hpp	(original)
+++ sandbox/itl/boost/itl/gregorian.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -25,11 +25,18 @@
 #endif
 
 #include <boost/itl/type_traits/neutron.hpp>
+#include <boost/itl/type_traits/is_discrete.hpp>
 #include <boost/itl/type_traits/difference_type_of.hpp>
 #include <boost/itl/type_traits/size_type_of.hpp>
 
 namespace boost{namespace itl
 {
+    template<> struct is_discrete<boost::gregorian::date>
+    {
+        typedef is_discrete type;
+        BOOST_STATIC_CONSTANT(bool, value = true);
+    };
+
     template<> 
     inline boost::gregorian::date neutron<boost::gregorian::date>::value()
     { 
Modified: sandbox/itl/boost/itl/ptime.hpp
==============================================================================
--- sandbox/itl/boost/itl/ptime.hpp	(original)
+++ sandbox/itl/boost/itl/ptime.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -18,6 +18,7 @@
 #include <stdio.h>
 #include <string>
 #include <sstream>
+#include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
 
 #ifdef BOOST_MSVC 
@@ -34,9 +35,16 @@
 #include <boost/itl/type_traits/neutron.hpp>
 #include <boost/itl/type_traits/difference_type_of.hpp>
 #include <boost/itl/type_traits/size_type_of.hpp>
+#include <boost/itl/type_traits/is_discrete.hpp>
 
 namespace boost{namespace itl
 {
+    template<> struct is_discrete<boost::posix_time::ptime>
+    {
+        typedef is_discrete type;
+        BOOST_STATIC_CONSTANT(bool, value = true);
+    };
+
     template<> 
     inline boost::posix_time::ptime neutron<boost::posix_time::ptime>::value()
     { 
Modified: sandbox/itl/boost/itl/type_traits/is_continuous.hpp
==============================================================================
--- sandbox/itl/boost/itl/type_traits/is_continuous.hpp	(original)
+++ sandbox/itl/boost/itl/type_traits/is_continuous.hpp	2010-09-27 18:07:06 EDT (Mon, 27 Sep 2010)
@@ -14,44 +14,11 @@
 
 namespace boost{ namespace itl
 {
-	//JODO Dies waere eigentlich besser, funktioniert aber nicht
-    //template <class Type> struct is_continuous
-    //{
-    //    typedef is_continuous type;
-    //    BOOST_STATIC_CONSTANT(bool, 
-    //        value = mpl::not_<is_discrete<Type> >::value);
-    //};
-
-    template <class Type> struct is_continuous;
-
-    template<> struct is_continuous<float>
-    {
-        typedef is_continuous<float> type;
-        BOOST_STATIC_CONSTANT(bool, value = true);
-    };
-
-    template<> struct is_continuous<double>
-    {
-        typedef is_continuous<double> type;
-        BOOST_STATIC_CONSTANT(bool, value = true);
-    };
-
-    template<> struct is_continuous<long double>
-    {
-        typedef is_continuous<long double> type;
-        BOOST_STATIC_CONSTANT(bool, value = true);
-    };
-
-    template<> struct is_continuous<std::string>
-    {
-        typedef is_continuous<std::string> type;
-        BOOST_STATIC_CONSTANT(bool, value = true);
-    };
-
     template <class Type> struct is_continuous
     {
-        typedef is_continuous<Type> type;
-        BOOST_STATIC_CONSTANT(bool, value = false);
+        typedef is_continuous type;
+        BOOST_STATIC_CONSTANT(bool, 
+            value = mpl::not_<is_discrete<Type> >::value);
     };
 
 }} // namespace boost itl