1e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===// 2e78f53d1SNikolas Klauser // 3e78f53d1SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e78f53d1SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 5e78f53d1SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e78f53d1SNikolas Klauser // 7e78f53d1SNikolas Klauser //===----------------------------------------------------------------------===// 8e78f53d1SNikolas Klauser 9*ce777190SNikolas Klauser #ifndef _LIBCPP___CXX03___ALGORITHM_PSTL_H 10*ce777190SNikolas Klauser #define _LIBCPP___CXX03___ALGORITHM_PSTL_H 11e78f53d1SNikolas Klauser 1273fbae83SNikolas Klauser #include <__cxx03/__config> 13e78f53d1SNikolas Klauser 14e78f53d1SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 15e78f53d1SNikolas Klauser # pragma GCC system_header 16e78f53d1SNikolas Klauser #endif 17e78f53d1SNikolas Klauser 18e78f53d1SNikolas Klauser _LIBCPP_PUSH_MACROS 1973fbae83SNikolas Klauser #include <__cxx03/__undef_macros> 20e78f53d1SNikolas Klauser 21e78f53d1SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17 22e78f53d1SNikolas Klauser 2373fbae83SNikolas Klauser # include <__cxx03/__functional/operations.h> 2473fbae83SNikolas Klauser # include <__cxx03/__iterator/cpp17_iterator_concepts.h> 2573fbae83SNikolas Klauser # include <__cxx03/__iterator/iterator_traits.h> 2673fbae83SNikolas Klauser # include <__cxx03/__pstl/backend.h> 2773fbae83SNikolas Klauser # include <__cxx03/__pstl/dispatch.h> 2873fbae83SNikolas Klauser # include <__cxx03/__pstl/handle_exception.h> 2973fbae83SNikolas Klauser # include <__cxx03/__type_traits/enable_if.h> 3073fbae83SNikolas Klauser # include <__cxx03/__type_traits/is_execution_policy.h> 3173fbae83SNikolas Klauser # include <__cxx03/__type_traits/remove_cvref.h> 3273fbae83SNikolas Klauser # include <__cxx03/__utility/forward.h> 3373fbae83SNikolas Klauser # include <__cxx03/__utility/move.h> 34e78f53d1SNikolas Klauser 35e78f53d1SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 36e78f53d1SNikolas Klauser 37e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 38e78f53d1SNikolas Klauser class _ForwardIterator, 39e78f53d1SNikolas Klauser class _Predicate, 40e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 41e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 42e78f53d1SNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 43e78f53d1SNikolas Klauser any_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 44e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "any_of requires a ForwardIterator"); 45e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__any_of, __pstl::__current_configuration, _RawPolicy>; 46e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 47e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 48e78f53d1SNikolas Klauser } 49e78f53d1SNikolas Klauser 50e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 51e78f53d1SNikolas Klauser class _ForwardIterator, 52e78f53d1SNikolas Klauser class _Pred, 53e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 54e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 55e78f53d1SNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 56e78f53d1SNikolas Klauser all_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { 57e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "all_of requires a ForwardIterator"); 58e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__all_of, __pstl::__current_configuration, _RawPolicy>; 59e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 60e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 61e78f53d1SNikolas Klauser } 62e78f53d1SNikolas Klauser 63e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 64e78f53d1SNikolas Klauser class _ForwardIterator, 65e78f53d1SNikolas Klauser class _Pred, 66e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 67e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 68e78f53d1SNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 69e78f53d1SNikolas Klauser none_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { 70e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "none_of requires a ForwardIterator"); 71e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__none_of, __pstl::__current_configuration, _RawPolicy>; 72e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 73e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 74e78f53d1SNikolas Klauser } 75e78f53d1SNikolas Klauser 76e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 77e78f53d1SNikolas Klauser class _ForwardIterator, 78e78f53d1SNikolas Klauser class _ForwardOutIterator, 79e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 80e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 81e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 82e78f53d1SNikolas Klauser copy(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { 83e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 84e78f53d1SNikolas Klauser _ForwardIterator, "copy(first, last, result) requires [first, last) to be ForwardIterators"); 85e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 86e78f53d1SNikolas Klauser _ForwardOutIterator, "copy(first, last, result) requires result to be a ForwardIterator"); 87e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 88e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(*__first), "copy(first, last, result) requires result to be an OutputIterator"); 89e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__copy, __pstl::__current_configuration, _RawPolicy>; 90e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 91e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); 92e78f53d1SNikolas Klauser } 93e78f53d1SNikolas Klauser 94e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 95e78f53d1SNikolas Klauser class _ForwardIterator, 96e78f53d1SNikolas Klauser class _ForwardOutIterator, 97e78f53d1SNikolas Klauser class _Size, 98e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 99e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 100e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 101e78f53d1SNikolas Klauser copy_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _ForwardOutIterator __result) { 102e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 103e78f53d1SNikolas Klauser _ForwardIterator, "copy_n(first, n, result) requires first to be a ForwardIterator"); 104e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 105e78f53d1SNikolas Klauser _ForwardOutIterator, "copy_n(first, n, result) requires result to be a ForwardIterator"); 106e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 107e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(*__first), "copy_n(first, n, result) requires result to be an OutputIterator"); 108e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__copy_n, __pstl::__current_configuration, _RawPolicy>; 109e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 110e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__result)); 111e78f53d1SNikolas Klauser } 112e78f53d1SNikolas Klauser 113e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 114e78f53d1SNikolas Klauser class _ForwardIterator, 115e78f53d1SNikolas Klauser class _Predicate, 116e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 117e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 118e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI __iter_diff_t<_ForwardIterator> 119e78f53d1SNikolas Klauser count_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 120e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 121e78f53d1SNikolas Klauser _ForwardIterator, "count_if(first, last, pred) requires [first, last) to be ForwardIterators"); 122e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__count_if, __pstl::__current_configuration, _RawPolicy>; 123e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 124e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 125e78f53d1SNikolas Klauser } 126e78f53d1SNikolas Klauser 127e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 128e78f53d1SNikolas Klauser class _ForwardIterator, 129e78f53d1SNikolas Klauser class _Tp, 130e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 131e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 132e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI __iter_diff_t<_ForwardIterator> 133e78f53d1SNikolas Klauser count(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 134e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 135e78f53d1SNikolas Klauser _ForwardIterator, "count(first, last, val) requires [first, last) to be ForwardIterators"); 136e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__count, __pstl::__current_configuration, _RawPolicy>; 137e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 138e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 139e78f53d1SNikolas Klauser } 140e78f53d1SNikolas Klauser 141e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 142e78f53d1SNikolas Klauser class _ForwardIterator1, 143e78f53d1SNikolas Klauser class _ForwardIterator2, 144e78f53d1SNikolas Klauser class _Pred, 145e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 146e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 147e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool 148e78f53d1SNikolas Klauser equal(_ExecutionPolicy&& __policy, 149e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 150e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 151e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 152e78f53d1SNikolas Klauser _Pred __pred) { 153e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 154e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 155e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; 156e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 157e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 158e78f53d1SNikolas Klauser std::move(__first1), 159e78f53d1SNikolas Klauser std::move(__last1), 160e78f53d1SNikolas Klauser std::move(__first2), 161e78f53d1SNikolas Klauser std::move(__pred)); 162e78f53d1SNikolas Klauser } 163e78f53d1SNikolas Klauser 164e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 165e78f53d1SNikolas Klauser class _ForwardIterator1, 166e78f53d1SNikolas Klauser class _ForwardIterator2, 167e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 168e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 169e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool 170e78f53d1SNikolas Klauser equal(_ExecutionPolicy&& __policy, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { 171e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 172e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 173e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; 174e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 175e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 176e78f53d1SNikolas Klauser std::move(__first1), 177e78f53d1SNikolas Klauser std::move(__last1), 178e78f53d1SNikolas Klauser std::move(__first2), 179e78f53d1SNikolas Klauser equal_to{}); 180e78f53d1SNikolas Klauser } 181e78f53d1SNikolas Klauser 182e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 183e78f53d1SNikolas Klauser class _ForwardIterator1, 184e78f53d1SNikolas Klauser class _ForwardIterator2, 185e78f53d1SNikolas Klauser class _Pred, 186e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 187e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 188e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool 189e78f53d1SNikolas Klauser equal(_ExecutionPolicy&& __policy, 190e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 191e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 192e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 193e78f53d1SNikolas Klauser _ForwardIterator2 __last2, 194e78f53d1SNikolas Klauser _Pred __pred) { 195e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 196e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 197e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; 198e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 199e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 200e78f53d1SNikolas Klauser std::move(__first1), 201e78f53d1SNikolas Klauser std::move(__last1), 202e78f53d1SNikolas Klauser std::move(__first2), 203e78f53d1SNikolas Klauser std::move(__last2), 204e78f53d1SNikolas Klauser std::move(__pred)); 205e78f53d1SNikolas Klauser } 206e78f53d1SNikolas Klauser 207e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 208e78f53d1SNikolas Klauser class _ForwardIterator1, 209e78f53d1SNikolas Klauser class _ForwardIterator2, 210e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 211e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 212e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool 213e78f53d1SNikolas Klauser equal(_ExecutionPolicy&& __policy, 214e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 215e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 216e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 217e78f53d1SNikolas Klauser _ForwardIterator2 __last2) { 218e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 219e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 220e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; 221e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 222e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 223e78f53d1SNikolas Klauser std::move(__first1), 224e78f53d1SNikolas Klauser std::move(__last1), 225e78f53d1SNikolas Klauser std::move(__first2), 226e78f53d1SNikolas Klauser std::move(__last2), 227e78f53d1SNikolas Klauser equal_to{}); 228e78f53d1SNikolas Klauser } 229e78f53d1SNikolas Klauser 230e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 231e78f53d1SNikolas Klauser class _ForwardIterator, 232e78f53d1SNikolas Klauser class _Tp, 233e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 234e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 235e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 236e78f53d1SNikolas Klauser fill(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 237e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill requires ForwardIterators"); 238e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__fill, __pstl::__current_configuration, _RawPolicy>; 239e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 240e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 241e78f53d1SNikolas Klauser } 242e78f53d1SNikolas Klauser 243e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 244e78f53d1SNikolas Klauser class _ForwardIterator, 245e78f53d1SNikolas Klauser class _Size, 246e78f53d1SNikolas Klauser class _Tp, 247e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 248e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 249e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 250e78f53d1SNikolas Klauser fill_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, const _Tp& __value) { 251e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill_n requires a ForwardIterator"); 252e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__fill_n, __pstl::__current_configuration, _RawPolicy>; 253e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 254e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), __value); 255e78f53d1SNikolas Klauser } 256e78f53d1SNikolas Klauser 257e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 258e78f53d1SNikolas Klauser class _ForwardIterator, 259e78f53d1SNikolas Klauser class _Predicate, 260e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 261e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 262e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardIterator 263e78f53d1SNikolas Klauser find_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 264e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if requires ForwardIterators"); 265e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__find_if, __pstl::__current_configuration, _RawPolicy>; 266e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 267e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 268e78f53d1SNikolas Klauser } 269e78f53d1SNikolas Klauser 270e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 271e78f53d1SNikolas Klauser class _ForwardIterator, 272e78f53d1SNikolas Klauser class _Predicate, 273e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 274e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 275e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardIterator 276e78f53d1SNikolas Klauser find_if_not(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 277e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if_not requires ForwardIterators"); 278e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__find_if_not, __pstl::__current_configuration, _RawPolicy>; 279e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 280e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 281e78f53d1SNikolas Klauser } 282e78f53d1SNikolas Klauser 283e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 284e78f53d1SNikolas Klauser class _ForwardIterator, 285e78f53d1SNikolas Klauser class _Tp, 286e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 287e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 288e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardIterator 289e78f53d1SNikolas Klauser find(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 290e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find requires ForwardIterators"); 291e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__find, __pstl::__current_configuration, _RawPolicy>; 292e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 293e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 294e78f53d1SNikolas Klauser } 295e78f53d1SNikolas Klauser 296e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 297e78f53d1SNikolas Klauser class _ForwardIterator, 298e78f53d1SNikolas Klauser class _Function, 299e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 300e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 301e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 302e78f53d1SNikolas Klauser for_each(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Function __func) { 303e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each requires ForwardIterators"); 304e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__for_each, __pstl::__current_configuration, _RawPolicy>; 305e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 306e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__func)); 307e78f53d1SNikolas Klauser } 308e78f53d1SNikolas Klauser 309e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 310e78f53d1SNikolas Klauser class _ForwardIterator, 311e78f53d1SNikolas Klauser class _Size, 312e78f53d1SNikolas Klauser class _Function, 313e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 314e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 315e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 316e78f53d1SNikolas Klauser for_each_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __size, _Function __func) { 317e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each_n requires a ForwardIterator"); 318e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__for_each_n, __pstl::__current_configuration, _RawPolicy>; 319e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 320e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__size), std::move(__func)); 321e78f53d1SNikolas Klauser } 322e78f53d1SNikolas Klauser 323e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 324e78f53d1SNikolas Klauser class _ForwardIterator, 325e78f53d1SNikolas Klauser class _Generator, 326e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 327e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 328e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 329e78f53d1SNikolas Klauser generate(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Generator __gen) { 330e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate requires ForwardIterators"); 331e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__generate, __pstl::__current_configuration, _RawPolicy>; 332e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 333e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__gen)); 334e78f53d1SNikolas Klauser } 335e78f53d1SNikolas Klauser 336e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 337e78f53d1SNikolas Klauser class _ForwardIterator, 338e78f53d1SNikolas Klauser class _Size, 339e78f53d1SNikolas Klauser class _Generator, 340e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 341e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 342e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 343e78f53d1SNikolas Klauser generate_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _Generator __gen) { 344e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate_n requires a ForwardIterator"); 345e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__generate_n, __pstl::__current_configuration, _RawPolicy>; 346e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 347e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__gen)); 348e78f53d1SNikolas Klauser } 349e78f53d1SNikolas Klauser 350e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 351e78f53d1SNikolas Klauser class _ForwardIterator, 352e78f53d1SNikolas Klauser class _Predicate, 353e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 354e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 355e78f53d1SNikolas Klauser _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool 356e78f53d1SNikolas Klauser is_partitioned(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 357e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "is_partitioned requires ForwardIterators"); 358e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__is_partitioned, __pstl::__current_configuration, _RawPolicy>; 359e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 360e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 361e78f53d1SNikolas Klauser } 362e78f53d1SNikolas Klauser 363e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 364e78f53d1SNikolas Klauser class _ForwardIterator1, 365e78f53d1SNikolas Klauser class _ForwardIterator2, 366e78f53d1SNikolas Klauser class _ForwardOutIterator, 367e78f53d1SNikolas Klauser class _Comp, 368e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 369e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 370e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 371e78f53d1SNikolas Klauser merge(_ExecutionPolicy&& __policy, 372e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 373e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 374e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 375e78f53d1SNikolas Klauser _ForwardIterator2 __last2, 376e78f53d1SNikolas Klauser _ForwardOutIterator __result, 377e78f53d1SNikolas Klauser _Comp __comp) { 378e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); 379e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); 380e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); 381e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); 382e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; 383e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 384e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 385e78f53d1SNikolas Klauser std::move(__first1), 386e78f53d1SNikolas Klauser std::move(__last1), 387e78f53d1SNikolas Klauser std::move(__first2), 388e78f53d1SNikolas Klauser std::move(__last2), 389e78f53d1SNikolas Klauser std::move(__result), 390e78f53d1SNikolas Klauser std::move(__comp)); 391e78f53d1SNikolas Klauser } 392e78f53d1SNikolas Klauser 393e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 394e78f53d1SNikolas Klauser class _ForwardIterator1, 395e78f53d1SNikolas Klauser class _ForwardIterator2, 396e78f53d1SNikolas Klauser class _ForwardOutIterator, 397e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 398e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 399e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 400e78f53d1SNikolas Klauser merge(_ExecutionPolicy&& __policy, 401e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 402e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 403e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 404e78f53d1SNikolas Klauser _ForwardIterator2 __last2, 405e78f53d1SNikolas Klauser _ForwardOutIterator __result) { 406e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); 407e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); 408e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); 409e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); 410e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; 411e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 412e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 413e78f53d1SNikolas Klauser std::move(__first1), 414e78f53d1SNikolas Klauser std::move(__last1), 415e78f53d1SNikolas Klauser std::move(__first2), 416e78f53d1SNikolas Klauser std::move(__last2), 417e78f53d1SNikolas Klauser std::move(__result), 418e78f53d1SNikolas Klauser less{}); 419e78f53d1SNikolas Klauser } 420e78f53d1SNikolas Klauser 421e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 422e78f53d1SNikolas Klauser class _ForwardIterator, 423e78f53d1SNikolas Klauser class _ForwardOutIterator, 424e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 425e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 426e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 427e78f53d1SNikolas Klauser move(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { 428e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "move requires ForwardIterators"); 429e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "move requires an OutputIterator"); 430e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 431e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(std::move(*__first)), "move requires an OutputIterator"); 432e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__move, __pstl::__current_configuration, _RawPolicy>; 433e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 434e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); 435e78f53d1SNikolas Klauser } 436e78f53d1SNikolas Klauser 437e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 438e78f53d1SNikolas Klauser class _ForwardIterator, 439e78f53d1SNikolas Klauser class _Pred, 440e78f53d1SNikolas Klauser class _Tp, 441e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 442e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 443e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 444e78f53d1SNikolas Klauser replace_if(_ExecutionPolicy&& __policy, 445e78f53d1SNikolas Klauser _ForwardIterator __first, 446e78f53d1SNikolas Klauser _ForwardIterator __last, 447e78f53d1SNikolas Klauser _Pred __pred, 448e78f53d1SNikolas Klauser const _Tp& __new_value) { 449e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_if requires ForwardIterators"); 450e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__replace_if, __pstl::__current_configuration, _RawPolicy>; 451e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 452e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred), __new_value); 453e78f53d1SNikolas Klauser } 454e78f53d1SNikolas Klauser 455e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 456e78f53d1SNikolas Klauser class _ForwardIterator, 457e78f53d1SNikolas Klauser class _Tp, 458e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 459e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 460e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 461e78f53d1SNikolas Klauser replace(_ExecutionPolicy&& __policy, 462e78f53d1SNikolas Klauser _ForwardIterator __first, 463e78f53d1SNikolas Klauser _ForwardIterator __last, 464e78f53d1SNikolas Klauser const _Tp& __old_value, 465e78f53d1SNikolas Klauser const _Tp& __new_value) { 466e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace requires ForwardIterators"); 467e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__replace, __pstl::__current_configuration, _RawPolicy>; 468e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 469e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __old_value, __new_value); 470e78f53d1SNikolas Klauser } 471e78f53d1SNikolas Klauser 472e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 473e78f53d1SNikolas Klauser class _ForwardIterator, 474e78f53d1SNikolas Klauser class _ForwardOutIterator, 475e78f53d1SNikolas Klauser class _Pred, 476e78f53d1SNikolas Klauser class _Tp, 477e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 478e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 479e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void replace_copy_if( 480e78f53d1SNikolas Klauser _ExecutionPolicy&& __policy, 481e78f53d1SNikolas Klauser _ForwardIterator __first, 482e78f53d1SNikolas Klauser _ForwardIterator __last, 483e78f53d1SNikolas Klauser _ForwardOutIterator __result, 484e78f53d1SNikolas Klauser _Pred __pred, 485e78f53d1SNikolas Klauser const _Tp& __new_value) { 486e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy_if requires ForwardIterators"); 487e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy_if requires ForwardIterators"); 488e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 489e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(*__first), "replace_copy_if requires an OutputIterator"); 490e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); 491e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__replace_copy_if, __pstl::__current_configuration, _RawPolicy>; 492e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 493e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 494e78f53d1SNikolas Klauser std::move(__first), 495e78f53d1SNikolas Klauser std::move(__last), 496e78f53d1SNikolas Klauser std::move(__result), 497e78f53d1SNikolas Klauser std::move(__pred), 498e78f53d1SNikolas Klauser __new_value); 499e78f53d1SNikolas Klauser } 500e78f53d1SNikolas Klauser 501e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 502e78f53d1SNikolas Klauser class _ForwardIterator, 503e78f53d1SNikolas Klauser class _ForwardOutIterator, 504e78f53d1SNikolas Klauser class _Tp, 505e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 506e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 507e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void replace_copy( 508e78f53d1SNikolas Klauser _ExecutionPolicy&& __policy, 509e78f53d1SNikolas Klauser _ForwardIterator __first, 510e78f53d1SNikolas Klauser _ForwardIterator __last, 511e78f53d1SNikolas Klauser _ForwardOutIterator __result, 512e78f53d1SNikolas Klauser const _Tp& __old_value, 513e78f53d1SNikolas Klauser const _Tp& __new_value) { 514e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy requires ForwardIterators"); 515e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy requires ForwardIterators"); 516e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 517e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(*__first), "replace_copy requires an OutputIterator"); 518e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); 519e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__replace_copy, __pstl::__current_configuration, _RawPolicy>; 520e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 521e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 522e78f53d1SNikolas Klauser std::move(__first), 523e78f53d1SNikolas Klauser std::move(__last), 524e78f53d1SNikolas Klauser std::move(__result), 525e78f53d1SNikolas Klauser __old_value, 526e78f53d1SNikolas Klauser __new_value); 527e78f53d1SNikolas Klauser } 528e78f53d1SNikolas Klauser 529e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 530e78f53d1SNikolas Klauser class _ForwardIterator, 531e78f53d1SNikolas Klauser class _ForwardOutIterator, 532e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 533e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 534e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator rotate_copy( 535e78f53d1SNikolas Klauser _ExecutionPolicy&& __policy, 536e78f53d1SNikolas Klauser _ForwardIterator __first, 537e78f53d1SNikolas Klauser _ForwardIterator __middle, 538e78f53d1SNikolas Klauser _ForwardIterator __last, 539e78f53d1SNikolas Klauser _ForwardOutIterator __result) { 540e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "rotate_copy requires ForwardIterators"); 541e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "rotate_copy requires ForwardIterators"); 542e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 543e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(*__first), "rotate_copy requires an OutputIterator"); 544e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__rotate_copy, __pstl::__current_configuration, _RawPolicy>; 545e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 546e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 547e78f53d1SNikolas Klauser std::move(__first), 548e78f53d1SNikolas Klauser std::move(__middle), 549e78f53d1SNikolas Klauser std::move(__last), 550e78f53d1SNikolas Klauser std::move(__result)); 551e78f53d1SNikolas Klauser } 552e78f53d1SNikolas Klauser 553e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 554e78f53d1SNikolas Klauser class _RandomAccessIterator, 555e78f53d1SNikolas Klauser class _Comp, 556e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 557e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 558e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 559e78f53d1SNikolas Klauser sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { 560e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); 561e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; 562e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 563e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); 564e78f53d1SNikolas Klauser } 565e78f53d1SNikolas Klauser 566e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 567e78f53d1SNikolas Klauser class _RandomAccessIterator, 568e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 569e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 570e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 571e78f53d1SNikolas Klauser sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { 572e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); 573e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; 574e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 575e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); 576e78f53d1SNikolas Klauser } 577e78f53d1SNikolas Klauser 578e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 579e78f53d1SNikolas Klauser class _RandomAccessIterator, 580e78f53d1SNikolas Klauser class _Comp, 581e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 582e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 583e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 584e78f53d1SNikolas Klauser stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { 585e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); 586e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; 587e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 588e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); 589e78f53d1SNikolas Klauser } 590e78f53d1SNikolas Klauser 591e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 592e78f53d1SNikolas Klauser class _RandomAccessIterator, 593e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 594e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 595e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void 596e78f53d1SNikolas Klauser stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { 597e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); 598e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; 599e78f53d1SNikolas Klauser __pstl::__handle_exception<_Implementation>( 600e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); 601e78f53d1SNikolas Klauser } 602e78f53d1SNikolas Klauser 603e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 604e78f53d1SNikolas Klauser class _ForwardIterator, 605e78f53d1SNikolas Klauser class _ForwardOutIterator, 606e78f53d1SNikolas Klauser class _UnaryOperation, 607e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 608e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 609e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( 610e78f53d1SNikolas Klauser _ExecutionPolicy&& __policy, 611e78f53d1SNikolas Klauser _ForwardIterator __first, 612e78f53d1SNikolas Klauser _ForwardIterator __last, 613e78f53d1SNikolas Klauser _ForwardOutIterator __result, 614e78f53d1SNikolas Klauser _UnaryOperation __op) { 615e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "transform requires ForwardIterators"); 616e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); 617e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 618e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(__op(*__first)), "transform requires an OutputIterator"); 619e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__transform, __pstl::__current_configuration, _RawPolicy>; 620e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 621e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 622e78f53d1SNikolas Klauser std::move(__first), 623e78f53d1SNikolas Klauser std::move(__last), 624e78f53d1SNikolas Klauser std::move(__result), 625e78f53d1SNikolas Klauser std::move(__op)); 626e78f53d1SNikolas Klauser } 627e78f53d1SNikolas Klauser 628e78f53d1SNikolas Klauser template <class _ExecutionPolicy, 629e78f53d1SNikolas Klauser class _ForwardIterator1, 630e78f53d1SNikolas Klauser class _ForwardIterator2, 631e78f53d1SNikolas Klauser class _ForwardOutIterator, 632e78f53d1SNikolas Klauser class _BinaryOperation, 633e78f53d1SNikolas Klauser class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 634e78f53d1SNikolas Klauser enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 635e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( 636e78f53d1SNikolas Klauser _ExecutionPolicy&& __policy, 637e78f53d1SNikolas Klauser _ForwardIterator1 __first1, 638e78f53d1SNikolas Klauser _ForwardIterator1 __last1, 639e78f53d1SNikolas Klauser _ForwardIterator2 __first2, 640e78f53d1SNikolas Klauser _ForwardOutIterator __result, 641e78f53d1SNikolas Klauser _BinaryOperation __op) { 642e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "transform requires ForwardIterators"); 643e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "transform requires ForwardIterators"); 644e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); 645e78f53d1SNikolas Klauser _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 646e78f53d1SNikolas Klauser _ForwardOutIterator, decltype(__op(*__first1, *__first2)), "transform requires an OutputIterator"); 647e78f53d1SNikolas Klauser using _Implementation = __pstl::__dispatch<__pstl::__transform_binary, __pstl::__current_configuration, _RawPolicy>; 648e78f53d1SNikolas Klauser return __pstl::__handle_exception<_Implementation>( 649e78f53d1SNikolas Klauser std::forward<_ExecutionPolicy>(__policy), 650e78f53d1SNikolas Klauser std::move(__first1), 651e78f53d1SNikolas Klauser std::move(__last1), 652e78f53d1SNikolas Klauser std::move(__first2), 653e78f53d1SNikolas Klauser std::move(__result), 654e78f53d1SNikolas Klauser std::move(__op)); 655e78f53d1SNikolas Klauser } 656e78f53d1SNikolas Klauser 657e78f53d1SNikolas Klauser _LIBCPP_END_NAMESPACE_STD 658e78f53d1SNikolas Klauser 659e78f53d1SNikolas Klauser #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17 660e78f53d1SNikolas Klauser 661e78f53d1SNikolas Klauser _LIBCPP_POP_MACROS 662e78f53d1SNikolas Klauser 663*ce777190SNikolas Klauser #endif // _LIBCPP___CXX03___ALGORITHM_PSTL_H 664