Remove std::pair dependency for multiallocation_chain

This commit is contained in:
Ion Gaztañaga
2021-01-15 20:43:27 +01:00
parent dc4cf460a7
commit 1dc1e74668
3 changed files with 15 additions and 13 deletions

View File

@ -31,7 +31,7 @@
// intrusive // intrusive
#include <boost/intrusive/slist.hpp> #include <boost/intrusive/slist.hpp>
#include <boost/intrusive/pointer_traits.hpp> #include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/minimal_pair_header.hpp> #include <boost/intrusive/detail/twin.hpp>
// move // move
#include <boost/move/utility_core.hpp> #include <boost/move/utility_core.hpp>
@ -80,6 +80,7 @@ class basic_multiallocation_chain
typedef VoidPointer void_pointer; typedef VoidPointer void_pointer;
typedef typename slist_impl_t::iterator iterator; typedef typename slist_impl_t::iterator iterator;
typedef typename slist_impl_t::size_type size_type; typedef typename slist_impl_t::size_type size_type;
typedef boost::intrusive::twin<void_pointer> pointer_pair;
basic_multiallocation_chain() basic_multiallocation_chain()
: slist_impl_() : slist_impl_()
@ -171,17 +172,17 @@ class basic_multiallocation_chain
static iterator iterator_to(const void_pointer &p) static iterator iterator_to(const void_pointer &p)
{ return slist_impl_t::s_iterator_to(to_node(p)); } { return slist_impl_t::s_iterator_to(to_node(p)); }
std::pair<void_pointer, void_pointer> extract_data() pointer_pair extract_data()
{ {
if(BOOST_LIKELY(!slist_impl_.empty())){ if(BOOST_LIKELY(!slist_impl_.empty())){
std::pair<void_pointer, void_pointer> ret pointer_pair ret
(slist_impl_.begin().operator->() (slist_impl_.begin().operator->()
,slist_impl_.last().operator->()); ,slist_impl_.last().operator->());
slist_impl_.clear(); slist_impl_.clear();
return ret; return ret;
} }
else { else {
return std::pair<void_pointer, void_pointer>(); return pointer_pair();
} }
} }
}; };
@ -218,8 +219,9 @@ class transform_multiallocation_chain
public: public:
typedef transform_iterator typedef transform_iterator
< typename MultiallocationChain::iterator < typename MultiallocationChain::iterator
, dtl::cast_functor <T> > iterator; , dtl::cast_functor <T> > iterator;
typedef typename MultiallocationChain::size_type size_type; typedef typename MultiallocationChain::size_type size_type;
typedef boost::intrusive::twin<pointer> pointer_pair;
transform_multiallocation_chain() transform_multiallocation_chain()
: MultiallocationChain() : MultiallocationChain()
@ -284,10 +286,10 @@ class transform_multiallocation_chain
static iterator iterator_to(const pointer &p) static iterator iterator_to(const pointer &p)
{ return iterator(MultiallocationChain::iterator_to(p)); } { return iterator(MultiallocationChain::iterator_to(p)); }
std::pair<pointer, pointer> extract_data() pointer_pair extract_data()
{ {
std::pair<void_pointer, void_pointer> data(this->MultiallocationChain::extract_data()); typename MultiallocationChain::pointer_pair data(this->MultiallocationChain::extract_data());
return std::pair<pointer, pointer>(cast(data.first), cast(data.second)); return pointer_pair(cast(data.first), cast(data.second));
} }
/* /*
MultiallocationChain &extract_multiallocation_chain() MultiallocationChain &extract_multiallocation_chain()

View File

@ -49,7 +49,7 @@ struct fake_segment_manager
static void deallocate_many(multiallocation_chain &chain) static void deallocate_many(multiallocation_chain &chain)
{ {
std::size_t size = chain.size(); std::size_t size = chain.size();
std::pair<void*, void*> ptrs = chain.extract_data(); multiallocation_chain::pointer_pair ptrs = chain.extract_data();
dlmalloc_memchain dlchain; dlmalloc_memchain dlchain;
BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&dlchain, ptrs.first, ptrs.second, size); BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&dlchain, ptrs.first, ptrs.second, size);
dlmalloc_multidealloc(&dlchain); dlmalloc_multidealloc(&dlchain);

View File

@ -2005,7 +2005,7 @@ class stable_vector
this->allocate_individual(n, m); this->allocate_individual(n, m);
holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n); holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n);
this->internal_data.pool_size += n; this->internal_data.pool_size += n;
std::pair<node_ptr, node_ptr> data(holder.extract_data()); typename multiallocation_chain::pointer_pair data(holder.extract_data());
pool_first_ref = data.first; pool_first_ref = data.first;
pool_last_ref = data.second; pool_last_ref = data.second;
} }
@ -2021,7 +2021,7 @@ class stable_vector
, internal_data.pool_size); , internal_data.pool_size);
holder.push_front(p); holder.push_front(p);
++this->internal_data.pool_size; ++this->internal_data.pool_size;
std::pair<node_ptr, node_ptr> ret(holder.extract_data()); typename multiallocation_chain::pointer_pair ret(holder.extract_data());
pool_first_ref = ret.first; pool_first_ref = ret.first;
pool_last_ref = ret.second; pool_last_ref = ret.second;
} }
@ -2035,7 +2035,7 @@ class stable_vector
, node_ptr_traits::static_cast_from(pool_last_ref) , node_ptr_traits::static_cast_from(pool_last_ref)
, internal_data.pool_size); , internal_data.pool_size);
this->internal_data.pool_size = ch.size(); this->internal_data.pool_size = ch.size();
const std::pair<node_ptr, node_ptr> ret(ch.extract_data()); const typename multiallocation_chain::pointer_pair ret(ch.extract_data());
pool_first_ref = ret.first; pool_first_ref = ret.first;
pool_last_ref = ret.second; pool_last_ref = ret.second;
} }
@ -2057,7 +2057,7 @@ class stable_vector
pool_first_ref = pool_last_ref = node_ptr(); pool_first_ref = pool_last_ref = node_ptr();
} }
else{ else{
const std::pair<node_ptr, node_ptr> data(holder.extract_data()); const typename multiallocation_chain::pointer_pair data(holder.extract_data());
pool_first_ref = data.first; pool_first_ref = data.first;
pool_last_ref = data.second; pool_last_ref = data.second;
} }