28 #ifndef YB_INC_ystdex_iterator_hpp_
29 #define YB_INC_ystdex_iterator_hpp_ 1
61 template<
typename _tIn,
typename _fPred>
64 typename std::iterator_traits<_tIn>::difference_type n = 1)
66 return f(*i) ? std::next(i, n) : i;
68 template<
typename _tIn,
typename _type>
71 typename std::iterator_traits<_tIn>::difference_type n = 1)
73 return *i == val ? std::next(i, n) : i;
82 template<
typename _tBi,
typename _fPred>
85 typename std::iterator_traits<_tBi>::difference_type n = 1)
87 return f(*i) ? std::prev(i, n) : i;
89 template<
typename _tBi,
typename _type>
92 typename std::iterator_traits<_tBi>::difference_type n = 1)
94 return *i == val ? std::prev(i, n) : i;
106 template<
typename _tIterator1,
typename _tIterator2>
109 std::make_pair(std::make_move_iterator(it1), std::make_move_iterator(it2)))
111 return std::make_pair(std::make_move_iterator(it1),
112 std::make_move_iterator(it2));
120 template<
typename _tRange>
138 template<
typename _type>
143 typedef typename std::iterator_traits<iterator_type>::iterator_category
145 typedef typename std::iterator_traits<iterator_type>::value_type
value_type;
146 typedef typename std::iterator_traits<iterator_type>::difference_type
148 typedef typename std::iterator_traits<iterator_type>::pointer
pointer;
149 typedef typename std::iterator_traits<iterator_type>::reference
reference;
160 template<
typename _tPo
inter>
252 template<
typename _type>
258 return pointer(x) == pointer(y);
261 template<
typename _type>
278 template<
typename _type>
284 template<
typename _type>
299 template<
typename _type,
typename _tIterator = _type*,
300 typename _tTraits = std::iterator_traits<_tIterator>>
310 typedef typename traits_type::pointer
pointer;
410 template<
typename _type,
typename _tIterator,
typename _tTraits>
418 template<
typename _type,
typename _tIterator,
typename _tTraits>
436 template<
typename _tIterator,
typename _fTransformer>
448 typedef typename std::result_of<_fTransformer&(_tIterator&)>::type
452 typedef typename add_rvalue_reference<
453 decltype(*std::declval<transformed_type>())>::type
reference;
454 typedef typename remove_reference<reference>::type
value_type;
455 typedef typename std::iterator_traits<iterator_type>::difference_type
457 typedef typename add_pointer<value_type>::type
pointer;
465 template<
typename _tIter,
typename _tTran>
482 return std::addressof(
operator*());
528 template<
typename _type,
typename _fTransformer>
533 return x.
get() == y.
get();
536 template<
typename _type,
typename _fTransformer>
552 template<
typename _tIterator,
typename _fTransformer>
553 inline transformed_iterator<typename array_ref_decay<_tIterator>::type,
566 namespace iterator_transformation
568 template<
typename _tIterator>
570 first(
const _tIterator& i) -> decltype(std::addressof(i->first))
572 return std::addressof(i->first);
574 template<
typename _tIterator>
576 second(
const _tIterator& i) -> decltype(std::addressof(i->second))
578 return std::addressof(i->second);
580 template<
typename _tIterator>
605 template<
typename _tIterator>
614 template<
typename _tIterator>
624 template<
typename _tIterator>
642 template<
typename _tMaster,
typename _tSlave,
643 class _tTraits = std::iterator_traits<_tMaster>>
654 typedef typename traits_type::pointer
pointer;
659 : std::pair<_tMaster, _tSlave>(_tMaster(), _tSlave())
663 : std::pair<_tMaster, _tSlave>(_i, _tSlave())
667 : std::pair<_tMaster, _tSlave>(_i, _s)
673 : std::pair<_tMaster, _tSlave>(std::move(_r))
748 return this->
first[_n];
766 template<
typename _tFirst,
typename _tSecond,
typename =
typename
767 std::enable_if<is_convertible<_tMaster, _tFirst>::value
768 && is_convertible<_tSlave, _tSecond>::value,
int>::type>
769 operator std::pair<_tFirst, _tSecond>()
771 return std::pair<_tFirst, _tSecond>(this->
first, this->
second);
783 template<
typename _tMaster,
typename _tSlave>
788 return x.
base().first == y.
base().first
789 && x.
base().second == y.
base().second();
792 template<
typename _tMaster,
typename _tSlave>
809 template<
class _tContainer,
typename _type>
855 return std::addressof(**
this);
937 template<
class _tContainer,
typename _type>
949 template<
class _tContainer,
typename _type>