Inject new Boost.Move iterator functions.

This commit is contained in:
Ion Gaztañaga
2022-01-12 00:58:41 +01:00
parent afe294063b
commit 06d74a1709

View File

@ -49,6 +49,11 @@ namespace boost {
namespace intrusive { namespace intrusive {
using boost::movelib::iterator_traits; using boost::movelib::iterator_traits;
using boost::movelib::iter_difference;
using boost::movelib::iter_value;
using boost::movelib::iter_category;
using boost::movelib::iter_size;
//////////////////// ////////////////////
// iterator // iterator
@ -115,7 +120,7 @@ struct get_std_category_from_tag
template<class It> template<class It>
struct get_std_category_from_it struct get_std_category_from_it
: get_std_category_from_tag< typename boost::intrusive::iterator_traits<It>::iterator_category > : get_std_category_from_tag< typename boost::intrusive::iter_category<It>::type >
{}; {};
//////////////////////////////////////// ////////////////////////////////////////
@ -163,12 +168,12 @@ struct iterator_enable_if_convertible_tag
//////////////////////////////////////// ////////////////////////////////////////
template<class I, class Tag> template<class I, class Tag>
struct iterator_enable_if_tag_difference_type struct iterator_enable_if_tag_difference_type
: iterator_enable_if_tag<I, Tag, typename boost::intrusive::iterator_traits<I>::difference_type> : iterator_enable_if_tag<I, Tag, typename boost::intrusive::iter_difference<I>::type>
{}; {};
template<class I, class Tag> template<class I, class Tag>
struct iterator_disable_if_tag_difference_type struct iterator_disable_if_tag_difference_type
: iterator_disable_if_tag<I, Tag, typename boost::intrusive::iterator_traits<I>::difference_type> : iterator_disable_if_tag<I, Tag, typename boost::intrusive::iter_difference<I>::type>
{}; {};
//////////////////// ////////////////////
@ -177,7 +182,7 @@ struct iterator_disable_if_tag_difference_type
template<class InputIt> template<class InputIt>
BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::input_iterator_tag>::type BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::input_iterator_tag>::type
iterator_advance(InputIt& it, typename iterator_traits<InputIt>::difference_type n) iterator_advance(InputIt& it, typename iter_difference<InputIt>::type n)
{ {
while(n--) while(n--)
++it; ++it;
@ -185,7 +190,7 @@ BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::input_
template<class InputIt> template<class InputIt>
typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type
iterator_advance(InputIt& it, typename iterator_traits<InputIt>::difference_type n) iterator_advance(InputIt& it, typename iter_difference<InputIt>::type n)
{ {
while(n--) while(n--)
++it; ++it;
@ -193,7 +198,7 @@ typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type
template<class InputIt> template<class InputIt>
BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::bidirectional_iterator_tag>::type BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::bidirectional_iterator_tag>::type
iterator_advance(InputIt& it, typename iterator_traits<InputIt>::difference_type n) iterator_advance(InputIt& it, typename iter_difference<InputIt>::type n)
{ {
for (; 0 < n; --n) for (; 0 < n; --n)
++it; ++it;
@ -210,7 +215,7 @@ BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag<InputIt, std::random
template<class It> template<class It>
BOOST_INTRUSIVE_FORCEINLINE BOOST_INTRUSIVE_FORCEINLINE
void iterator_uadvance(It& it, typename iterator_traits<It>::size_type n) void iterator_uadvance(It& it, typename iter_size<It>::type n)
{ {
(iterator_advance)(it, (typename iterator_traits<It>::difference_type)n); (iterator_advance)(it, (typename iterator_traits<It>::difference_type)n);
} }
@ -223,7 +228,7 @@ typename iterator_disable_if_tag_difference_type
<InputIt, std::random_access_iterator_tag>::type <InputIt, std::random_access_iterator_tag>::type
iterator_distance(InputIt first, InputIt last) iterator_distance(InputIt first, InputIt last)
{ {
typename iterator_traits<InputIt>::difference_type off = 0; typename iter_difference<InputIt>::type off = 0;
while(first != last){ while(first != last){
++off; ++off;
++first; ++first;
@ -236,7 +241,7 @@ BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag_difference_type
<InputIt, std::random_access_iterator_tag>::type <InputIt, std::random_access_iterator_tag>::type
iterator_distance(InputIt first, InputIt last) iterator_distance(InputIt first, InputIt last)
{ {
typename iterator_traits<InputIt>::difference_type off = last - first; typename iter_difference<InputIt>::type off = last - first;
return off; return off;
} }
@ -245,10 +250,10 @@ BOOST_INTRUSIVE_FORCEINLINE typename iterator_enable_if_tag_difference_type
//////////////////////////////////////// ////////////////////////////////////////
template<class It> template<class It>
BOOST_INTRUSIVE_FORCEINLINE typename iterator_traits<It>::size_type BOOST_INTRUSIVE_FORCEINLINE typename iter_size<It>::type
iterator_udistance(It first, It last) iterator_udistance(It first, It last)
{ {
return (typename iterator_traits<It>::size_type)(iterator_distance)(first, last); return (typename iter_size<It>::type)(iterator_distance)(first, last);
} }
//////////////////////////////////////// ////////////////////////////////////////
@ -256,7 +261,7 @@ BOOST_INTRUSIVE_FORCEINLINE typename iterator_traits<It>::size_type
//////////////////////////////////////// ////////////////////////////////////////
template<class InputIt> template<class InputIt>
BOOST_INTRUSIVE_FORCEINLINE InputIt iterator_next(InputIt it, typename iterator_traits<InputIt>::difference_type n) BOOST_INTRUSIVE_FORCEINLINE InputIt iterator_next(InputIt it, typename iter_difference<InputIt>::type n)
{ {
(iterator_advance)(it, n); (iterator_advance)(it, n);
return it; return it;