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
#include <boost/intrusive/slist.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/minimal_pair_header.hpp>
#include <boost/intrusive/detail/twin.hpp>
// move
#include <boost/move/utility_core.hpp>
@ -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<void_pointer> 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<void_pointer, void_pointer> extract_data()
pointer_pair extract_data()
{
if(BOOST_LIKELY(!slist_impl_.empty())){
std::pair<void_pointer, void_pointer> ret
pointer_pair ret
(slist_impl_.begin().operator->()
,slist_impl_.last().operator->());
slist_impl_.clear();
return ret;
}
else {
return std::pair<void_pointer, void_pointer>();
return pointer_pair();
}
}
};
@ -218,8 +219,9 @@ class transform_multiallocation_chain
public:
typedef transform_iterator
< typename MultiallocationChain::iterator
, dtl::cast_functor <T> > iterator;
, dtl::cast_functor <T> > iterator;
typedef typename MultiallocationChain::size_type size_type;
typedef boost::intrusive::twin<pointer> 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<pointer, pointer> extract_data()
pointer_pair extract_data()
{
std::pair<void_pointer, void_pointer> data(this->MultiallocationChain::extract_data());
return std::pair<pointer, pointer>(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()

View File

@ -49,7 +49,7 @@ struct fake_segment_manager
static void deallocate_many(multiallocation_chain &chain)
{
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;
BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&dlchain, ptrs.first, ptrs.second, size);
dlmalloc_multidealloc(&dlchain);

View File

@ -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<node_ptr, node_ptr> 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<node_ptr, node_ptr> 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<node_ptr, node_ptr> 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<node_ptr, node_ptr> data(holder.extract_data());
const typename multiallocation_chain::pointer_pair data(holder.extract_data());
pool_first_ref = data.first;
pool_last_ref = data.second;
}