diff options
Diffstat (limited to 'libcxx/include/__algorithm/adjacent_find.h')
| -rw-r--r-- | libcxx/include/__algorithm/adjacent_find.h | 33 | 
1 files changed, 20 insertions, 13 deletions
| diff --git a/libcxx/include/__algorithm/adjacent_find.h b/libcxx/include/__algorithm/adjacent_find.h index 83d8c260f27a..30df4a976f3d 100644 --- a/libcxx/include/__algorithm/adjacent_find.h +++ b/libcxx/include/__algorithm/adjacent_find.h @@ -11,8 +11,10 @@  #define _LIBCPP___ALGORITHM_ADJACENT_FIND_H  #include <__algorithm/comp.h> +#include <__algorithm/iterator_operations.h>  #include <__config>  #include <__iterator/iterator_traits.h> +#include <__utility/move.h>  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)  #  pragma GCC system_header @@ -20,25 +22,30 @@  _LIBCPP_BEGIN_NAMESPACE_STD +template <class _Iter, class _Sent, class _BinaryPredicate> +_LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter +__adjacent_find(_Iter __first, _Sent __last, _BinaryPredicate&& __pred) { +  if (__first == __last) +    return __first; +  _Iter __i = __first; +  while (++__i != __last) { +    if (__pred(*__first, *__i)) +      return __first; +    __first = __i; +  } +  return __i; +} +  template <class _ForwardIterator, class _BinaryPredicate> -_LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator +_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator  adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { -  if (__first != __last) { -    _ForwardIterator __i = __first; -    while (++__i != __last) { -      if (__pred(*__first, *__i)) -        return __first; -      __first = __i; -    } -  } -  return __last; +  return std::__adjacent_find(std::move(__first), std::move(__last), __pred);  }  template <class _ForwardIterator> -_LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator +_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator  adjacent_find(_ForwardIterator __first, _ForwardIterator __last) { -  typedef typename iterator_traits<_ForwardIterator>::value_type __v; -  return _VSTD::adjacent_find(__first, __last, __equal_to<__v>()); +  return std::adjacent_find(std::move(__first), std::move(__last), __equal_to());  }  _LIBCPP_END_NAMESPACE_STD | 
