[prev in list] [next in list] [prev in thread] [next in thread]
List: boost-commit
Subject: [Boost-commit] svn:boost r83658 - trunk/boost/geometry/index
From: adam.wulkiewicz () gmail ! com
Date: 2013-03-31 0:02:16
Message-ID: 20130331000216.437C62F809F () wowbagger ! osl ! iu ! edu
[Download RAW message or body]
Author: awulkiew
Date: 2013-03-30 20:02:15 EDT (Sat, 30 Mar 2013)
New Revision: 83658
URL: http://svn.boost.org/trac/boost/changeset/83658
Log:
rtree move ctor and assignment rearranged.
Text files modified:
trunk/boost/geometry/index/rtree.hpp | 76 +++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 35 deletions(-)
Modified: trunk/boost/geometry/index/rtree.hpp
==============================================================================
--- trunk/boost/geometry/index/rtree.hpp (original)
+++ trunk/boost/geometry/index/rtree.hpp 2013-03-30 20:02:15 EDT (Sat, 30 Mar 2013)
@@ -377,18 +377,21 @@
*/
inline rtree & operator=(BOOST_COPY_ASSIGN_REF(rtree) src)
{
- if ( this == &src )
- return *this;
+ if ( &src != this )
+ {
+ allocators_type & this_allocs = m_members.allocators();
+ allocators_type const& src_allocs = src.m_members.allocators();
- typedef boost::mpl::bool_<
- allocator_traits_type::propagate_on_container_copy_assignment::value
- > propagate;
- if ( propagate::value && !(m_members.allocators() == src.m_members.allocators()) )
- this->raw_destroy(*this);
- assign_cond(m_members.allocators(), src.m_members.allocators(), propagate());
+ typedef boost::mpl::bool_<
+ allocator_traits_type::propagate_on_container_copy_assignment::value
+ > propagate;
+ if ( propagate::value && !(this_allocs == src_allocs) )
+ this->raw_destroy(*this);
+ assign_cond(this_allocs, src_allocs, propagate());
- // It uses m_allocators
- this->raw_copy(src, *this, true);
+ // It uses m_allocators
+ this->raw_copy(src, *this, true);
+ }
return *this;
}
@@ -408,32 +411,35 @@
*/
inline rtree & operator=(BOOST_RV_REF(rtree) src)
{
- if ( this == &src )
- return *this;
-
- if ( m_members.allocators() == src.m_members.allocators() )
- {
- this->raw_destroy(*this);
-
- m_members.indexable_getter() = src.m_members.indexable_getter();
- m_members.equal_to() = src.m_members.equal_to();
- m_members.parameters() = src.m_members.parameters();
-
- boost::swap(m_members.values_count, src.m_members.values_count);
- boost::swap(m_members.leafs_level, src.m_members.leafs_level);
- boost::swap(m_members.root, src.m_members.root);
-
- typedef boost::mpl::bool_<
- allocator_traits_type::propagate_on_container_move_assignment::value
- > propagate;
- rtree::move_cond(m_members.allocators(), src.m_members.allocators(), propagate());
- }
- else
+ if ( &src != this )
{
+ allocators_type & this_allocs = m_members.allocators();
+ allocators_type & src_allocs = src.m_members.allocators();
+
+ if ( this_allocs == this_allocs )
+ {
+ this->raw_destroy(*this);
+
+ m_members.indexable_getter() = src.m_members.indexable_getter();
+ m_members.equal_to() = src.m_members.equal_to();
+ m_members.parameters() = src.m_members.parameters();
+
+ boost::swap(m_members.values_count, src.m_members.values_count);
+ boost::swap(m_members.leafs_level, src.m_members.leafs_level);
+ boost::swap(m_members.root, src.m_members.root);
+
+ typedef boost::mpl::bool_<
+ allocator_traits_type::propagate_on_container_move_assignment::value
+ > propagate;
+ rtree::move_cond(this_allocs, src_allocs, propagate());
+ }
+ else
+ {
// TODO - shouldn't here propagate_on_container_copy_assignment be checked like in operator=(const&)?
- // It uses m_allocators
- this->raw_copy(src, *this, true);
+ // It uses m_allocators
+ this->raw_copy(src, *this, true);
+ }
}
return *this;
@@ -1124,10 +1130,10 @@
static inline void assign_cond(T & l, T const& r, boost::mpl::bool_<true> const&) { l = r; }
template<class T>
- inline void move_cond(T &, T &, boost::mpl::bool_<false> const&) {}
+ static inline void move_cond(T &, T &, boost::mpl::bool_<false> const&) {}
template<class T>
- inline void move_cond(T & l, T & r, boost::mpl::bool_<true> const&) { l = ::boost::move(r); }
+ static inline void move_cond(T & l, T & r, boost::mpl::bool_<true> const&) { l = ::boost::move(r); }
struct members_holder
: public translator_type
_______________________________________________
Boost-commit mailing list
Boost-commit@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-commit
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic