From 1dc1e7466865433d64fb0bf2bfd00c4f746195f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Fri, 15 Jan 2021 20:43:27 +0100 Subject: [PATCH] Remove std::pair dependency for multiallocation_chain --- .../container/detail/multiallocation_chain.hpp | 18 ++++++++++-------- .../container/detail/pool_common_alloc.hpp | 2 +- include/boost/container/stable_vector.hpp | 8 ++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/boost/container/detail/multiallocation_chain.hpp b/include/boost/container/detail/multiallocation_chain.hpp index 1031de2..192e14d 100644 --- a/include/boost/container/detail/multiallocation_chain.hpp +++ b/include/boost/container/detail/multiallocation_chain.hpp @@ -31,7 +31,7 @@ // intrusive #include #include -#include +#include // move #include @@ -80,6 +80,7 @@ class basic_multiallocation_chain typedef VoidPointer void_pointer; typedef typename slist_impl_t::iterator iterator; typedef typename slist_impl_t::size_type size_type; + typedef boost::intrusive::twin pointer_pair; basic_multiallocation_chain() : slist_impl_() @@ -171,17 +172,17 @@ class basic_multiallocation_chain static iterator iterator_to(const void_pointer &p) { return slist_impl_t::s_iterator_to(to_node(p)); } - std::pair extract_data() + pointer_pair extract_data() { if(BOOST_LIKELY(!slist_impl_.empty())){ - std::pair ret + pointer_pair ret (slist_impl_.begin().operator->() ,slist_impl_.last().operator->()); slist_impl_.clear(); return ret; } else { - return std::pair(); + return pointer_pair(); } } }; @@ -218,8 +219,9 @@ class transform_multiallocation_chain public: typedef transform_iterator < typename MultiallocationChain::iterator - , dtl::cast_functor > iterator; + , dtl::cast_functor > iterator; typedef typename MultiallocationChain::size_type size_type; + typedef boost::intrusive::twin pointer_pair; transform_multiallocation_chain() : MultiallocationChain() @@ -284,10 +286,10 @@ class transform_multiallocation_chain static iterator iterator_to(const pointer &p) { return iterator(MultiallocationChain::iterator_to(p)); } - std::pair extract_data() + pointer_pair extract_data() { - std::pair data(this->MultiallocationChain::extract_data()); - return std::pair(cast(data.first), cast(data.second)); + typename MultiallocationChain::pointer_pair data(this->MultiallocationChain::extract_data()); + return pointer_pair(cast(data.first), cast(data.second)); } /* MultiallocationChain &extract_multiallocation_chain() diff --git a/include/boost/container/detail/pool_common_alloc.hpp b/include/boost/container/detail/pool_common_alloc.hpp index bfb82f5..f58c5e7 100644 --- a/include/boost/container/detail/pool_common_alloc.hpp +++ b/include/boost/container/detail/pool_common_alloc.hpp @@ -49,7 +49,7 @@ struct fake_segment_manager static void deallocate_many(multiallocation_chain &chain) { std::size_t size = chain.size(); - std::pair ptrs = chain.extract_data(); + multiallocation_chain::pointer_pair ptrs = chain.extract_data(); dlmalloc_memchain dlchain; BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&dlchain, ptrs.first, ptrs.second, size); dlmalloc_multidealloc(&dlchain); diff --git a/include/boost/container/stable_vector.hpp b/include/boost/container/stable_vector.hpp index d62fb52..68be7c0 100644 --- a/include/boost/container/stable_vector.hpp +++ b/include/boost/container/stable_vector.hpp @@ -2005,7 +2005,7 @@ class stable_vector this->allocate_individual(n, m); holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n); this->internal_data.pool_size += n; - std::pair data(holder.extract_data()); + typename multiallocation_chain::pointer_pair data(holder.extract_data()); pool_first_ref = data.first; pool_last_ref = data.second; } @@ -2021,7 +2021,7 @@ class stable_vector , internal_data.pool_size); holder.push_front(p); ++this->internal_data.pool_size; - std::pair ret(holder.extract_data()); + typename multiallocation_chain::pointer_pair ret(holder.extract_data()); pool_first_ref = ret.first; pool_last_ref = ret.second; } @@ -2035,7 +2035,7 @@ class stable_vector , node_ptr_traits::static_cast_from(pool_last_ref) , internal_data.pool_size); this->internal_data.pool_size = ch.size(); - const std::pair ret(ch.extract_data()); + const typename multiallocation_chain::pointer_pair ret(ch.extract_data()); pool_first_ref = ret.first; pool_last_ref = ret.second; } @@ -2057,7 +2057,7 @@ class stable_vector pool_first_ref = pool_last_ref = node_ptr(); } else{ - const std::pair data(holder.extract_data()); + const typename multiallocation_chain::pointer_pair data(holder.extract_data()); pool_first_ref = data.first; pool_last_ref = data.second; }