Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__algorithm/rotate.h
Show First 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _BidirectionalIterator | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _BidirectionalIterator | ||||
__rotate_right(_BidirectionalIterator __first, _BidirectionalIterator __last) | __rotate_right(_BidirectionalIterator __first, _BidirectionalIterator __last) | ||||
{ | { | ||||
typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; | typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; | ||||
using _Ops = _IterOps<_AlgPolicy>; | using _Ops = _IterOps<_AlgPolicy>; | ||||
_BidirectionalIterator __lm1 = _Ops::prev(__last); | _BidirectionalIterator __lm1 = _Ops::prev(__last); | ||||
value_type __tmp = _Ops::__iter_move(__lm1); | value_type __tmp = _Ops::__iter_move(__lm1); | ||||
_BidirectionalIterator __fp1 = std::__move_backward<_AlgPolicy>(__first, __lm1, std::move(__last)); | auto __res = std::__move_backward<_AlgPolicy>(__first, __lm1, std::move(__last)); | ||||
*__first = _VSTD::move(__tmp); | *__first = _VSTD::move(__tmp); | ||||
return __fp1; | return __res.first; | ||||
} | } | ||||
template <class _AlgPolicy, class _ForwardIterator> | template <class _AlgPolicy, class _ForwardIterator> | ||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 _ForwardIterator | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 _ForwardIterator | ||||
__rotate_forward(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) | __rotate_forward(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) | ||||
{ | { | ||||
_ForwardIterator __i = __middle; | _ForwardIterator __i = __middle; | ||||
while (true) | while (true) | ||||
▲ Show 20 Lines • Show All 160 Lines • Show Last 20 Lines |