Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r76227 - in branches/release/boost/icl: . concept type_traits
From: afojgo_at_[hidden]
Date: 2011-12-30 05:16:34


Author: jofaber
Date: 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
New Revision: 76227
URL: http://svn.boost.org/trac/boost/changeset/76227

Log:
Merged revisions [75397-76220]. Fixed tickets #6095, #6210. Added move constructors and move assignment operators.
Properties modified:
   branches/release/boost/icl/ (props changed)
Text files modified:
   branches/release/boost/icl/concept/interval.hpp | 46 ++++++++++++++++--------------
   branches/release/boost/icl/impl_config.hpp | 45 +++++++++++++++--------------
   branches/release/boost/icl/interval_base_map.hpp | 29 ++++++++++++++++++-
   branches/release/boost/icl/interval_base_set.hpp | 42 +++++++++++++++++++++++-----
   branches/release/boost/icl/interval_map.hpp | 27 ++++++++++++++++--
   branches/release/boost/icl/interval_set.hpp | 20 +++++++++++++
   branches/release/boost/icl/map.hpp | 59 +++++++++++++++++++++++++++++++--------
   branches/release/boost/icl/separate_interval_set.hpp | 19 ++++++++++++
   branches/release/boost/icl/set.hpp | 12 ++++----
   branches/release/boost/icl/split_interval_map.hpp | 25 +++++++++++++++-
   branches/release/boost/icl/split_interval_set.hpp | 19 ++++++++++++
   branches/release/boost/icl/type_traits/is_discrete.hpp | 1
   branches/release/boost/icl/type_traits/is_numeric.hpp | 1
   13 files changed, 265 insertions(+), 80 deletions(-)

Modified: branches/release/boost/icl/concept/interval.hpp
==============================================================================
--- branches/release/boost/icl/concept/interval.hpp (original)
+++ branches/release/boost/icl/concept/interval.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -547,7 +547,8 @@
 typename boost::enable_if<is_static_open<Type>, bool>::type
 is_empty(const Type& object)
 {
- return domain_less_equal<Type>(upper(object), domain_next<Type>(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>
@@ -557,7 +558,8 @@
     if(object.bounds() == interval_bounds::closed())
         return domain_less<Type>(upper(object), lower(object));
     else if(object.bounds() == interval_bounds::open())
- return domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
+ 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));
 }
@@ -607,8 +609,8 @@
     exclusive_less(const Type& left, const Type& right)
     {
         BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
- return domain_less <Type>(left.upper(), right.lower())
- || ( domain_equal<Type>(left.upper(), right.lower())
+ return domain_less <Type>(upper(left), lower(right))
+ || ( domain_equal<Type>(upper(left), lower(right))
                 && inner_bounds(left,right) != interval_bounds::open() );
     }
 
@@ -661,12 +663,12 @@
 {
     return
         (is_left_closed(super.bounds())
- ? domain_less_equal<Type>(super.lower(), element)
- : domain_less<Type>(super.lower(), element))
+ ? domain_less_equal<Type>(lower(super), element)
+ : domain_less<Type>(lower(super), element))
     &&
         (is_right_closed(super.bounds())
- ? domain_less_equal<Type>(element, super.upper())
- : domain_less<Type>(element, super.upper()));
+ ? domain_less_equal<Type>(element, upper(super))
+ : domain_less<Type>(element, upper(super)));
 }
 
 //- within ---------------------------------------------------------------------
@@ -714,8 +716,8 @@
 exclusive_less(const Type& left, const Type& right)
 {
     return icl::is_empty(left) || icl::is_empty(right)
- || domain_less<Type>(left.upper(), right.lower())
- || ( domain_equal<Type>(left.upper(), right.lower())
+ || domain_less<Type>(upper(left), lower(right))
+ || ( domain_equal<Type>(upper(left), lower(right))
             && inner_bounds(left,right) != interval_bounds::open() );
 }
 
@@ -725,7 +727,7 @@
 typename boost::enable_if<has_static_bounds<Type>, bool>::type
 lower_less(const Type& left, const Type& right)
 {
- return domain_less<Type>(left.lower(), right.lower());
+ return domain_less<Type>(lower(left), lower(right));
 }
     
 template<class Type>
@@ -740,9 +742,9 @@
 lower_less(const Type& left, const Type& right)
 {
     if(left_bounds(left,right) == interval_bounds::right_open()) //'[(' == 10
- return domain_less_equal<Type>(left.lower(), right.lower());
+ return domain_less_equal<Type>(lower(left), lower(right));
     else
- return domain_less<Type>(left.lower(), right.lower());
+ return domain_less<Type>(lower(left), lower(right));
 }
     
 
@@ -751,7 +753,7 @@
 typename boost::enable_if<has_static_bounds<Type>, bool>::type
 upper_less(const Type& left, const Type& right)
 {
- return domain_less<Type>(left.upper(), right.upper());
+ return domain_less<Type>(upper(left), upper(right));
 }
 
 template<class Type>
@@ -766,9 +768,9 @@
 upper_less(const Type& left, const Type& right)
 {
     if(right_bounds(left,right) == interval_bounds::left_open())
- return domain_less_equal<Type>(left.upper(), right.upper());
+ return domain_less_equal<Type>(upper(left), upper(right));
     else
- return domain_less<Type>(left.upper(), right.upper());
+ return domain_less<Type>(upper(left), upper(right));
 }
     
 //------------------------------------------------------------------------------
@@ -813,7 +815,7 @@
 typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
 lower_equal(const Type& left, const Type& right)
 {
- return domain_equal<Type>(left.lower(), right.lower());
+ return domain_equal<Type>(lower(left), lower(right));
 }
 
 template<class Type>
@@ -835,7 +837,7 @@
 lower_equal(const Type& left, const Type& right)
 {
     return (left.bounds().left()==right.bounds().left())
- && domain_equal<Type>(left.lower(), right.lower());
+ && domain_equal<Type>(lower(left), lower(right));
 }
 
 
@@ -844,7 +846,7 @@
 typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
 upper_equal(const Type& left, const Type& right)
 {
- return domain_equal<Type>(left.upper(), right.upper());
+ return domain_equal<Type>(upper(left), upper(right));
 }
 
 template<class Type>
@@ -866,7 +868,7 @@
 upper_equal(const Type& left, const Type& right)
 {
     return (left.bounds().right()==right.bounds().right())
- && domain_equal<Type>(left.upper(), right.upper());
+ && domain_equal<Type>(upper(left), upper(right));
 }
 
 //------------------------------------------------------------------------------
@@ -949,7 +951,7 @@
 touches(const Type& left, const Type& right)
 {
     return is_complementary(inner_bounds(left,right))
- && domain_equal<Type>(left.upper(), right.lower());
+ && domain_equal<Type>(upper(left), lower(right));
 }
 
 
@@ -1402,7 +1404,7 @@
     if(icl::is_empty(x1) || icl::is_empty(x2))
         return icl::identity_element<DiffT>::value();
     else if(domain_less<Type>(upper(x1), lower(x2)))
- return x2.lower() - x1.upper();
+ return lower(x2) - upper(x1);
     else if(domain_less<Type>(upper(x2), lower(x1)))
         return lower(x1) - upper(x2);
     else

Modified: branches/release/boost/icl/impl_config.hpp
==============================================================================
--- branches/release/boost/icl/impl_config.hpp (original)
+++ branches/release/boost/icl/impl_config.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,6 +1,6 @@
 /*-----------------------------------------------------------------------------+
 Author: Joachim Faulhaber
-Copyright (c) 2009-2009: Joachim Faulhaber
+Copyright (c) 2009-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,36 +10,37 @@
 #define BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225
 
 /*-----------------------------------------------------------------------------+
-You can choose an implementation for the basic set and map classes.
-Select at most ONE of the following defines
+| You can choose an implementation for the basic set and map classes. |
+| Select at most ONE of the following defines to change the default |
 +-----------------------------------------------------------------------------*/
 
-//#define ICL_USE_STD_IMPLEMENTATION
-//#define ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION
-//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION
+//#define ICL_USE_STD_IMPLEMENTATION // Default
+//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION // Boost.Container
+// ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION // No longer available
 
 /*-----------------------------------------------------------------------------+
-NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map as
- implementing containers (default).
-
-ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: Choose set and map implementations
- from boost::interprocess.
-
-ICL_USE_BOOST_MOVE_IMPLEMENTATION: Move aware containers from boost::container
- (NEW) are used. Currently (January 2010) this is only experimental.
- boost::move from the boost::sandbox has to be used. This is depreciated for
- production code, as long as move aware containers are not officially
- accepted into boost.
+| NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map from |
+| your local std implementation as implementing containers (DEFAULT). |
+| Whether move semantics is available depends on the version of your local |
+| STL. |
+| |
+| ICL_USE_BOOST_MOVE_IMPLEMENTATION: |
+| Use move aware containers from boost::container. |
+| |
+| NOTE: ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: This define has been |
+| available until boost version 1.48.0 and is no longer supported. |
 +-----------------------------------------------------------------------------*/
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#define ICL_IMPL_SPACE boost::interprocess
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#define ICL_IMPL_SPACE boost::container
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# define ICL_IMPL_SPACE boost::container
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# define ICL_IMPL_SPACE std
 #else
-#define ICL_IMPL_SPACE std
+# define ICL_IMPL_SPACE std
 #endif
 
+#include <boost/move/move.hpp>
+
 #endif // BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225
 
 

Modified: branches/release/boost/icl/interval_base_map.hpp
==============================================================================
--- branches/release/boost/icl/interval_base_map.hpp (original)
+++ branches/release/boost/icl/interval_base_map.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2012: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -193,6 +193,7 @@
     BOOST_STATIC_CONSTANT(int, fineness = 0);
 
 public:
+
     //==========================================================================
     //= Construct, copy, destruct
     //==========================================================================
@@ -214,13 +215,37 @@
         BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
     }
 
- /** Assignment operator */
+ /** Copy assignment operator */
     interval_base_map& operator = (const interval_base_map& src)
     {
         this->_map = src._map;
         return *this;
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /** Move constructor */
+ interval_base_map(interval_base_map&& src): _map(boost::move(src._map))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<CodomainT>));
+ BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
+ }
+
+ /** Move assignment operator */
+ interval_base_map& operator = (interval_base_map&& src)
+ {
+ this->_map = boost::move(src._map);
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     /** swap the content of containers */
     void swap(interval_base_map& object) { _map.swap(object._map); }
 

Modified: branches/release/boost/icl/interval_base_set.hpp
==============================================================================
--- branches/release/boost/icl/interval_base_set.hpp (original)
+++ branches/release/boost/icl/interval_base_set.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -11,12 +11,12 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/set.hpp>
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/set.hpp>
-#else
-#include <set>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <set>
+#else // Default for implementing containers
+# include <set>
 #endif
 
 #include <limits>
@@ -162,7 +162,11 @@
     interval_base_set(){}
 
     /** Copy constructor */
- interval_base_set(const interval_base_set& src): _set(src._set){}
+ interval_base_set(const interval_base_set& src): _set(src._set)
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ }
 
     /** Assignment operator */
     interval_base_set& operator = (const interval_base_set& src)
@@ -171,6 +175,28 @@
         return *this;
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /** Move constructor */
+ interval_base_set(interval_base_set&& src): _set(boost::move(src._set))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ }
+
+ /** Move assignment operator */
+ interval_base_set& operator = (interval_base_set&& src)
+ {
+ this->_set = boost::move(src._set);
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     /** swap the content of containers */
     void swap(interval_base_set& operand) { _set.swap(operand._set); }
 

Modified: branches/release/boost/icl/interval_map.hpp
==============================================================================
--- branches/release/boost/icl/interval_map.hpp (original)
+++ branches/release/boost/icl/interval_map.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2008-2009: Joachim Faulhaber
+Copyright (c) 2008-2012: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -72,12 +72,13 @@
     //==========================================================================
     //= Construct, copy, destruct
     //==========================================================================
+
     /// Default constructor for the empty object
     interval_map(): base_type() {}
+
     /// Copy constructor
     interval_map(const interval_map& src): base_type(src) {}
 
-
     /// Copy constructor for base_type
     template<class SubType>
     explicit interval_map
@@ -91,6 +92,7 @@
     explicit interval_map(const value_type& value_pair): base_type()
     { this->add(value_pair); }
 
+
     /// Assignment operator
     template<class SubType>
     interval_map& operator =
@@ -106,12 +108,31 @@
         typedef interval_base_map<SubType,DomainT,CodomainT,
                                   Traits,Compare,Combine,Section,Interval,Alloc> base_map_type;
         this->clear();
- // Can be implemented via _map.insert: Interval joining not necessary.
         iterator prior_ = this->_map.end();
         ICL_const_FORALL(typename base_map_type, it_, src)
             prior_ = this->add(prior_, *it_);
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ interval_map(interval_map&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ interval_map& operator = (interval_map&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
 private:
     // Private functions that shall be accessible by the baseclass:
     friend class

Modified: branches/release/boost/icl/interval_set.hpp
==============================================================================
--- branches/release/boost/icl/interval_set.hpp (original)
+++ branches/release/boost/icl/interval_set.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -93,6 +93,7 @@
     //==========================================================================
     /// Default constructor for the empty object
     interval_set(): base_type() {}
+
     /// Copy constructor
     interval_set(const interval_set& src): base_type(src) {}
 
@@ -107,6 +108,7 @@
     /// Constructor for a single element
     explicit interval_set(const domain_type& value): base_type()
     { this->add(interval_type(value)); }
+
     /// Constructor for a single interval
     explicit interval_set(const interval_type& itv): base_type()
     {
@@ -135,6 +137,24 @@
             prior_ = this->add(prior_, *it_);
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ interval_set(interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ interval_set& operator = (interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
 
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: branches/release/boost/icl/map.hpp
==============================================================================
--- branches/release/boost/icl/map.hpp (original)
+++ branches/release/boost/icl/map.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,17 +10,15 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/map.hpp>
-#include <boost/interprocess/containers/set.hpp>
-#include <boost/interprocess/containers/flat_set.hpp> //FLAS
-#include <boost/interprocess/containers/flat_map.hpp> //FLAS
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/map.hpp>
-#include <boost/container/set.hpp>
-#else
-#include <map>
-#include <set>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/map.hpp>
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <map>
+# include <set>
+#else // Default for implementing containers
+# include <map>
+# include <set>
 #endif
 
 #include <string>
@@ -194,7 +192,34 @@
         insert(key_value_pair);
     }
 
- map& operator=(const map& src) { base_type::operator=(src); return *this; }
+ map& operator = (map& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ map(map&& src)
+ : base_type(boost::move(src))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<CodomainT>));
+ BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
+ }
+
+ map& operator = (map&& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     void swap(map& src) { base_type::swap(src); }
 
     //==========================================================================
@@ -310,6 +335,14 @@
             return base_type::insert(prior, value_pair);
     }
 
+ template<class Iterator>
+ iterator insert(Iterator first, Iterator last)
+ {
+ iterator prior = end(), it = first;
+ while(it != last)
+ prior = this->insert(prior, *it++);
+ }
+
     /** With <tt>key_value_pair = (k,v)</tt> set value \c v for key \c k */
     map& set(const element_type& key_value_pair)
     {

Modified: branches/release/boost/icl/separate_interval_set.hpp
==============================================================================
--- branches/release/boost/icl/separate_interval_set.hpp (original)
+++ branches/release/boost/icl/separate_interval_set.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -82,7 +82,6 @@
     /// const_iterator for iteration over intervals
     typedef typename ImplSetT::const_iterator const_iterator;
 
-
     enum { fineness = 2 };
 
 public:
@@ -124,6 +123,24 @@
         this->_set.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ separate_interval_set(separate_interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ separate_interval_set& operator = (separate_interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
 
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: branches/release/boost/icl/set.hpp
==============================================================================
--- branches/release/boost/icl/set.hpp (original)
+++ branches/release/boost/icl/set.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,12 +10,12 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/set.hpp>
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/set.hpp>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <set>
 #else
-#include <set>
+# include <set>
 #endif
 
 #include <boost/icl/concept/associative_element_container.hpp>

Modified: branches/release/boost/icl/split_interval_map.hpp
==============================================================================
--- branches/release/boost/icl/split_interval_map.hpp (original)
+++ branches/release/boost/icl/split_interval_map.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 2007-2012: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -68,6 +68,7 @@
     //==========================================================================
     /// Default constructor for the empty object
     split_interval_map(): base_type() {}
+
     /// Copy constructor
     split_interval_map(const split_interval_map& src): base_type(src) {}
 
@@ -77,7 +78,7 @@
     explicit split_interval_map(const value_type& value_pair): base_type()
     { this->add(value_pair); }
 
- /// Assignment operator
+ /// Copy assignment operator
     template<class SubType>
     split_interval_map& operator =
         (const interval_base_map<SubType,DomainT,CodomainT,
@@ -93,6 +94,26 @@
         this->_map.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ split_interval_map(split_interval_map&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ split_interval_map& operator = (split_interval_map&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
 private:
     // Private functions that shall be accessible by the baseclass:
     friend class

Modified: branches/release/boost/icl/split_interval_set.hpp
==============================================================================
--- branches/release/boost/icl/split_interval_set.hpp (original)
+++ branches/release/boost/icl/split_interval_set.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -118,6 +118,25 @@
         this->_set.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ split_interval_set(split_interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ split_interval_set& operator = (split_interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: branches/release/boost/icl/type_traits/is_discrete.hpp
==============================================================================
--- branches/release/boost/icl/type_traits/is_discrete.hpp (original)
+++ branches/release/boost/icl/type_traits/is_discrete.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -50,7 +50,6 @@
                          <
                              has_rep_type<Type>
                            , is_discrete<typename rep_type_of<Type>::type>
- //CL , is_non_floating_point<typename rep_type_of<Type>::type>
>
>
>::value

Modified: branches/release/boost/icl/type_traits/is_numeric.hpp
==============================================================================
--- branches/release/boost/icl/type_traits/is_numeric.hpp (original)
+++ branches/release/boost/icl/type_traits/is_numeric.hpp 2011-12-30 05:16:31 EST (Fri, 30 Dec 2011)
@@ -10,6 +10,7 @@
 
 #include <limits>
 #include <complex>
+#include <functional>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/type_traits/ice.hpp>
 #include <boost/type_traits/is_integral.hpp>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk