forked from boostorg/container
Remove std::pair dependency for multiallocation_chain
This commit is contained in:
@ -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()
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user