$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r83383 - trunk/boost/icl
From: afojgo_at_[hidden]
Date: 2013-03-09 18:24:17
Author: jofaber
Date: 2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
New Revision: 83383
URL: http://svn.boost.org/trac/boost/changeset/83383
Log:
Simplifying operator = implementations with move using call by value ("sink arguments").
Text files modified: 
   trunk/boost/icl/impl_config.hpp           |     8 ++++----                                
   trunk/boost/icl/interval_base_map.hpp     |    20 +++++++++++---------                    
   trunk/boost/icl/interval_base_set.hpp     |    20 +++++++++++---------                    
   trunk/boost/icl/interval_map.hpp          |    35 ++++++++++++++++++++---------------     
   trunk/boost/icl/interval_set.hpp          |    37 +++++++++++++++++++------------------   
   trunk/boost/icl/map.hpp                   |    18 ++++++++++--------                      
   trunk/boost/icl/separate_interval_set.hpp |    30 ++++++++++++++++--------------          
   trunk/boost/icl/split_interval_map.hpp    |    35 ++++++++++++++++++++---------------     
   trunk/boost/icl/split_interval_set.hpp    |    32 ++++++++++++++++++--------------        
   9 files changed, 129 insertions(+), 106 deletions(-)
Modified: trunk/boost/icl/impl_config.hpp
==============================================================================
--- trunk/boost/icl/impl_config.hpp	(original)
+++ trunk/boost/icl/impl_config.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -48,10 +48,10 @@
 +-----------------------------------------------------------------------------*/
 #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
 #   define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
-#elif defined(__clang__)
-#   define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
-#elif (defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
-#   define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+//#elif defined(__clang__)
+//#   define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+//#elif (defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
+//#   define BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 #endif
 
 #include <boost/move/move.hpp>
Modified: trunk/boost/icl/interval_base_map.hpp
==============================================================================
--- trunk/boost/icl/interval_base_map.hpp	(original)
+++ trunk/boost/icl/interval_base_map.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -215,13 +215,6 @@
         BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
     }
 
-    /** Copy assignment operator */
-    interval_base_map& operator = (const interval_base_map& src) 
-    { 
-        this->_map = src._map;
-        return *this; 
-    }
-
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -237,13 +230,22 @@
     }
 
     /** Move assignment operator */
-    interval_base_map& operator = (interval_base_map&& src) 
-    { 
+    interval_base_map& operator = (interval_base_map src) 
+    {                           //call by value sice 'src' is a "sink value" 
         this->_map = boost::move(src._map);
         return *this; 
     }
 
     //==========================================================================
+#   else 
+
+    /** Copy assignment operator */
+    interval_base_map& operator = (const interval_base_map& src) 
+    { 
+        this->_map = src._map;
+        return *this; 
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
     /** swap the content of containers */
Modified: trunk/boost/icl/interval_base_set.hpp
==============================================================================
--- trunk/boost/icl/interval_base_set.hpp	(original)
+++ trunk/boost/icl/interval_base_set.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -168,13 +168,6 @@
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
     }
 
-    /** Assignment operator */
-    interval_base_set& operator = (const interval_base_set& src) 
-    { 
-        this->_set = src._set;
-        return *this; 
-    }
-
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -188,13 +181,22 @@
     }
 
     /** Move assignment operator */
-    interval_base_set& operator = (interval_base_set&& src) 
-    { 
+    interval_base_set& operator = (interval_base_set src) 
+    {                           //call by value sice 'src' is a "sink value"
         this->_set = boost::move(src._set);
         return *this; 
     }
 
     //==========================================================================
+#   else
+
+    /** Copy assignment operator */
+    interval_base_set& operator = (const interval_base_set& src) 
+    { 
+        this->_set = src._set;
+        return *this; 
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
     /** swap the content of containers */
Modified: trunk/boost/icl/interval_map.hpp
==============================================================================
--- trunk/boost/icl/interval_map.hpp	(original)
+++ trunk/boost/icl/interval_map.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -93,20 +93,6 @@
     { this->add(value_pair); }
 
 
-    /// Assignment operator
-    interval_map& operator = (const interval_map& src)
-    { 
-        base_type::operator=(src);
-        return *this;
-    }
-
-    /// Assignment operator for base type
-    template<class SubType>
-    interval_map& operator =
-        (const interval_base_map<SubType,DomainT,CodomainT,
-                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
-    { this->assign(src); return *this; }
-
     /// Assignment from a base interval_map.
     template<class SubType>
     void assign(const interval_base_map<SubType,DomainT,CodomainT,
@@ -120,6 +106,16 @@
             prior_ = this->add(prior_, *it_); 
     }
 
+    /// Assignment operator for base type
+    template<class SubType>
+    interval_map& operator =
+        (const interval_base_map<SubType,DomainT,CodomainT,
+                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
+    { 
+        this->assign(src); 
+        return *this; 
+    }
+
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -131,13 +127,22 @@
     {}
 
     /// Move assignment operator
-    interval_map& operator = (interval_map&& src)
+    interval_map& operator = (interval_map src)
     { 
         base_type::operator=(boost::move(src));
         return *this;
     }
 
     //==========================================================================
+#   else
+
+    /// Assignment operator
+    interval_map& operator = (const interval_map& src)
+    { 
+        base_type::operator=(src);
+        return *this;
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
 private:
Modified: trunk/boost/icl/interval_set.hpp
==============================================================================
--- trunk/boost/icl/interval_set.hpp	(original)
+++ trunk/boost/icl/interval_set.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -115,23 +115,6 @@
         this->add(itv); 
     }
 
-    /// Assignment operator
-    interval_set& operator = (const interval_set& src)
-    { 
-        base_type::operator=(src);
-        return *this;
-    }
-
-    /// Assignment operator for base type
-    template<class SubType>
-    interval_set& operator =
-        (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
-    { 
-        this->assign(src); 
-        return *this; 
-    }
-
-
     /// Assignment from a base interval_set.
     template<class SubType>
     void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
@@ -144,6 +127,15 @@
             prior_ = this->add(prior_, *it_);
     }
 
+    /// Assignment operator for base type
+    template<class SubType>
+    interval_set& operator =
+        (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+    { 
+        this->assign(src); 
+        return *this; 
+    }
+
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -155,12 +147,21 @@
     {}
 
     /// Move assignment operator
-    interval_set& operator = (interval_set&& src)
+    interval_set& operator = (interval_set src)
     { 
         base_type::operator=(boost::move(src));
         return *this;
     }
+
     //==========================================================================
+#   else
+    /// Assignment operator
+    interval_set& operator = (const interval_set& src)
+    { 
+        base_type::operator=(src);
+        return *this;
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
 private:
Modified: trunk/boost/icl/map.hpp
==============================================================================
--- trunk/boost/icl/map.hpp	(original)
+++ trunk/boost/icl/map.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -192,12 +192,6 @@
         insert(key_value_pair); 
     }
 
-    map& operator = (const map& src) 
-    { 
-        base_type::operator=(src);
-        return *this; 
-    } 
-
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -212,12 +206,20 @@
         BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
     }
 
-    map& operator = (map&& src) 
+    map& operator = (map src) 
     { 
-        base_type::operator=(src);
+        base_type::operator=(boost::move(src));
         return *this; 
     } 
     //==========================================================================
+#   else
+
+    map& operator = (const map& src) 
+    { 
+        base_type::operator=(src);
+        return *this; 
+    } 
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
     void swap(map& src) { base_type::swap(src); }
Modified: trunk/boost/icl/separate_interval_set.hpp
==============================================================================
--- trunk/boost/icl/separate_interval_set.hpp	(original)
+++ trunk/boost/icl/separate_interval_set.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -106,11 +106,12 @@
     /// Constructor for a single interval
     explicit separate_interval_set(const interval_type& itv): base_type() { this->add(itv); }
 
-    /// Assignment operator
-    separate_interval_set& operator = (const separate_interval_set& src)
-    { 
-        base_type::operator=(src);
-        return *this;
+    /// Assignment from a base interval_set.
+    template<class SubType>
+    void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+    {
+        this->clear();
+        this->_set.insert(src.begin(), src.end());
     }
 
     /// Assignment operator for base type
@@ -122,14 +123,6 @@
         return *this; 
     }
 
-    /// Assignment from a base interval_set.
-    template<class SubType>
-    void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
-    {
-        this->clear();
-        this->_set.insert(src.begin(), src.end());
-    }
-
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -141,12 +134,21 @@
     {}
 
     /// Move assignment operator
-    separate_interval_set& operator = (separate_interval_set&& src)
+    separate_interval_set& operator = (separate_interval_set src)
     { 
         base_type::operator=(boost::move(src));
         return *this;
     }
     //==========================================================================
+#   else
+
+    /// Assignment operator
+    separate_interval_set& operator = (const separate_interval_set& src)
+    { 
+        base_type::operator=(src);
+        return *this;
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
 private:
Modified: trunk/boost/icl/split_interval_map.hpp
==============================================================================
--- trunk/boost/icl/split_interval_map.hpp	(original)
+++ trunk/boost/icl/split_interval_map.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -78,20 +78,6 @@
     explicit split_interval_map(const value_type& value_pair): base_type()
     { this->add(value_pair); }
 
-    /// Assignment operator
-    split_interval_map& operator = (const split_interval_map& src)
-    { 
-        base_type::operator=(src);
-        return *this;
-    }
-
-    /// Assignment operator for base type
-    template<class SubType>
-    split_interval_map& operator =
-        (const interval_base_map<SubType,DomainT,CodomainT,
-                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
-    { this->assign(src); return *this; }
-
     /// Assignment from a base interval_map.
     template<class SubType>
     void assign(const interval_base_map<SubType,DomainT,CodomainT,
@@ -101,6 +87,16 @@
         this->_map.insert(src.begin(), src.end());
     }
 
+    /// Assignment operator for base type
+    template<class SubType>
+    split_interval_map& operator =
+        (const interval_base_map<SubType,DomainT,CodomainT,
+                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
+    { 
+        this->assign(src); 
+        return *this; 
+    }
+
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -112,13 +108,22 @@
     {}
 
     /// Move assignment operator
-    split_interval_map& operator = (split_interval_map&& src)
+    split_interval_map& operator = (split_interval_map src)
     { 
         base_type::operator=(boost::move(src));
         return *this;
     }
 
     //==========================================================================
+#   else
+
+    /// Assignment operator
+    split_interval_map& operator = (const split_interval_map& src)
+    { 
+        base_type::operator=(src);
+        return *this;
+    }
+
 #   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
 
 private:
Modified: trunk/boost/icl/split_interval_set.hpp
==============================================================================
--- trunk/boost/icl/split_interval_set.hpp	(original)
+++ trunk/boost/icl/split_interval_set.hpp	2013-03-09 18:24:16 EST (Sat, 09 Mar 2013)
@@ -104,19 +104,6 @@
     /// Constructor for a single interval
     explicit split_interval_set(const domain_type& itv): base_type() { this->add(itv); }
 
-    /// Assignment operator
-    split_interval_set& operator = (const split_interval_set& src)
-    { 
-        base_type::operator=(src);
-        return *this;
-    }
-
-    /// Assignment operator for base type
-    template<class SubType>
-    split_interval_set& operator =
-        (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
-    { this->assign(src); return *this; }
-
     /// Assignment from a base interval_set.
     template<class SubType>
     void assign(const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
@@ -125,6 +112,15 @@
         this->_set.insert(src.begin(), src.end());
     }
 
+    /// Assignment operator for base type
+    template<class SubType>
+    split_interval_set& operator =
+        (const interval_base_set<SubType,DomainT,Compare,Interval,Alloc>& src)
+    { 
+        this->assign(src); 
+        return *this; 
+    }
+
 #   ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     //==========================================================================
     //= Move semantics
@@ -142,8 +138,16 @@
         return *this;
     }
     //==========================================================================
-#   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
+#   else
+
+    /// Assignment operator
+    split_interval_set& operator = (const split_interval_set& src)
+    { 
+        base_type::operator=(src);
+        return *this;
+    }
 
+#   endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES
     
 private:
     // Private functions that shall be accessible by the baseclass: