1e406d5edSLouis Dionne //===----------------------------------------------------------------------===// 2e406d5edSLouis Dionne // 3e406d5edSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e406d5edSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5e406d5edSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e406d5edSLouis Dionne // 7e406d5edSLouis Dionne //===----------------------------------------------------------------------===// 8e406d5edSLouis Dionne 9e406d5edSLouis Dionne #ifndef _LIBCPP___ALGORITHM_PSTL_H 10e406d5edSLouis Dionne #define _LIBCPP___ALGORITHM_PSTL_H 11e406d5edSLouis Dionne 12e406d5edSLouis Dionne #include <__config> 13acb896a3SLouis Dionne 14acb896a3SLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 15acb896a3SLouis Dionne # pragma GCC system_header 16acb896a3SLouis Dionne #endif 17acb896a3SLouis Dionne 18acb896a3SLouis Dionne _LIBCPP_PUSH_MACROS 19acb896a3SLouis Dionne #include <__undef_macros> 20acb896a3SLouis Dionne 21*24e70e39SNikolas Klauser #if _LIBCPP_HAS_EXPERIMENTAL_PSTL && _LIBCPP_STD_VER >= 17 22acb896a3SLouis Dionne 23e406d5edSLouis Dionne # include <__functional/operations.h> 24e406d5edSLouis Dionne # include <__iterator/cpp17_iterator_concepts.h> 25e406d5edSLouis Dionne # include <__iterator/iterator_traits.h> 269540950aSLouis Dionne # include <__pstl/backend.h> 279540950aSLouis Dionne # include <__pstl/dispatch.h> 289540950aSLouis Dionne # include <__pstl/handle_exception.h> 29e406d5edSLouis Dionne # include <__type_traits/enable_if.h> 30e406d5edSLouis Dionne # include <__type_traits/is_execution_policy.h> 31e406d5edSLouis Dionne # include <__type_traits/remove_cvref.h> 329540950aSLouis Dionne # include <__utility/forward.h> 33e406d5edSLouis Dionne # include <__utility/move.h> 34e406d5edSLouis Dionne 35e406d5edSLouis Dionne _LIBCPP_BEGIN_NAMESPACE_STD 36e406d5edSLouis Dionne 37e406d5edSLouis Dionne template <class _ExecutionPolicy, 38e406d5edSLouis Dionne class _ForwardIterator, 39e406d5edSLouis Dionne class _Predicate, 40e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 41e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 42e406d5edSLouis Dionne [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 43e406d5edSLouis Dionne any_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 44e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "any_of requires a ForwardIterator"); 459540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__any_of, __pstl::__current_configuration, _RawPolicy>; 469540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 479540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 48e406d5edSLouis Dionne } 49e406d5edSLouis Dionne 50e406d5edSLouis Dionne template <class _ExecutionPolicy, 51e406d5edSLouis Dionne class _ForwardIterator, 52e406d5edSLouis Dionne class _Pred, 53e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 54e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 55e406d5edSLouis Dionne [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 56e406d5edSLouis Dionne all_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { 57e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "all_of requires a ForwardIterator"); 589540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__all_of, __pstl::__current_configuration, _RawPolicy>; 599540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 609540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 61e406d5edSLouis Dionne } 62e406d5edSLouis Dionne 63e406d5edSLouis Dionne template <class _ExecutionPolicy, 64e406d5edSLouis Dionne class _ForwardIterator, 65e406d5edSLouis Dionne class _Pred, 66e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 67e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 68e406d5edSLouis Dionne [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 69e406d5edSLouis Dionne none_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { 70e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "none_of requires a ForwardIterator"); 719540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__none_of, __pstl::__current_configuration, _RawPolicy>; 729540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 739540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 74e406d5edSLouis Dionne } 75e406d5edSLouis Dionne 76e406d5edSLouis Dionne template <class _ExecutionPolicy, 77e406d5edSLouis Dionne class _ForwardIterator, 78e406d5edSLouis Dionne class _ForwardOutIterator, 79e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 80e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 81e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 82e406d5edSLouis Dionne copy(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { 83e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 84e406d5edSLouis Dionne _ForwardIterator, "copy(first, last, result) requires [first, last) to be ForwardIterators"); 85e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 86e406d5edSLouis Dionne _ForwardOutIterator, "copy(first, last, result) requires result to be a ForwardIterator"); 87e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 88e406d5edSLouis Dionne _ForwardOutIterator, decltype(*__first), "copy(first, last, result) requires result to be an OutputIterator"); 899540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__copy, __pstl::__current_configuration, _RawPolicy>; 909540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 919540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); 92e406d5edSLouis Dionne } 93e406d5edSLouis Dionne 94e406d5edSLouis Dionne template <class _ExecutionPolicy, 95e406d5edSLouis Dionne class _ForwardIterator, 96e406d5edSLouis Dionne class _ForwardOutIterator, 97e406d5edSLouis Dionne class _Size, 98e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 99e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 100e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 101e406d5edSLouis Dionne copy_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _ForwardOutIterator __result) { 102e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 103e406d5edSLouis Dionne _ForwardIterator, "copy_n(first, n, result) requires first to be a ForwardIterator"); 104e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 105e406d5edSLouis Dionne _ForwardOutIterator, "copy_n(first, n, result) requires result to be a ForwardIterator"); 106e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 107e406d5edSLouis Dionne _ForwardOutIterator, decltype(*__first), "copy_n(first, n, result) requires result to be an OutputIterator"); 1089540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__copy_n, __pstl::__current_configuration, _RawPolicy>; 1099540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1109540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__result)); 111e406d5edSLouis Dionne } 112e406d5edSLouis Dionne 113e406d5edSLouis Dionne template <class _ExecutionPolicy, 114e406d5edSLouis Dionne class _ForwardIterator, 115e406d5edSLouis Dionne class _Predicate, 116e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 117e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 118e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI __iter_diff_t<_ForwardIterator> 119e406d5edSLouis Dionne count_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 120e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 121e406d5edSLouis Dionne _ForwardIterator, "count_if(first, last, pred) requires [first, last) to be ForwardIterators"); 1229540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__count_if, __pstl::__current_configuration, _RawPolicy>; 1239540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1249540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 125e406d5edSLouis Dionne } 126e406d5edSLouis Dionne 127e406d5edSLouis Dionne template <class _ExecutionPolicy, 128e406d5edSLouis Dionne class _ForwardIterator, 129e406d5edSLouis Dionne class _Tp, 130e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 131e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 132e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI __iter_diff_t<_ForwardIterator> 133e406d5edSLouis Dionne count(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 134e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( 135e406d5edSLouis Dionne _ForwardIterator, "count(first, last, val) requires [first, last) to be ForwardIterators"); 1369540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__count, __pstl::__current_configuration, _RawPolicy>; 1379540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1389540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 139e406d5edSLouis Dionne } 140e406d5edSLouis Dionne 141e406d5edSLouis Dionne template <class _ExecutionPolicy, 142e406d5edSLouis Dionne class _ForwardIterator1, 143e406d5edSLouis Dionne class _ForwardIterator2, 144e406d5edSLouis Dionne class _Pred, 145e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 146e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 147e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI bool 148e406d5edSLouis Dionne equal(_ExecutionPolicy&& __policy, 149e406d5edSLouis Dionne _ForwardIterator1 __first1, 150e406d5edSLouis Dionne _ForwardIterator1 __last1, 151e406d5edSLouis Dionne _ForwardIterator2 __first2, 152e406d5edSLouis Dionne _Pred __pred) { 153e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 154e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 1559540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; 1569540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1579540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 1589540950aSLouis Dionne std::move(__first1), 1599540950aSLouis Dionne std::move(__last1), 1609540950aSLouis Dionne std::move(__first2), 1619540950aSLouis Dionne std::move(__pred)); 162e406d5edSLouis Dionne } 163e406d5edSLouis Dionne 164e406d5edSLouis Dionne template <class _ExecutionPolicy, 165e406d5edSLouis Dionne class _ForwardIterator1, 166e406d5edSLouis Dionne class _ForwardIterator2, 1679540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 1689540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 169e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI bool 170e406d5edSLouis Dionne equal(_ExecutionPolicy&& __policy, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { 171e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 172e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 1739540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; 1749540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1759540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 176e406d5edSLouis Dionne std::move(__first1), 177e406d5edSLouis Dionne std::move(__last1), 178e406d5edSLouis Dionne std::move(__first2), 1799540950aSLouis Dionne equal_to{}); 180e406d5edSLouis Dionne } 181e406d5edSLouis Dionne 182e406d5edSLouis Dionne template <class _ExecutionPolicy, 183e406d5edSLouis Dionne class _ForwardIterator1, 184e406d5edSLouis Dionne class _ForwardIterator2, 185e406d5edSLouis Dionne class _Pred, 186e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 187e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 188e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI bool 189e406d5edSLouis Dionne equal(_ExecutionPolicy&& __policy, 190e406d5edSLouis Dionne _ForwardIterator1 __first1, 191e406d5edSLouis Dionne _ForwardIterator1 __last1, 192e406d5edSLouis Dionne _ForwardIterator2 __first2, 193e406d5edSLouis Dionne _ForwardIterator2 __last2, 194e406d5edSLouis Dionne _Pred __pred) { 195e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 196e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 1979540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; 1989540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 1999540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 2009540950aSLouis Dionne std::move(__first1), 2019540950aSLouis Dionne std::move(__last1), 2029540950aSLouis Dionne std::move(__first2), 2039540950aSLouis Dionne std::move(__last2), 2049540950aSLouis Dionne std::move(__pred)); 205e406d5edSLouis Dionne } 206e406d5edSLouis Dionne 207e406d5edSLouis Dionne template <class _ExecutionPolicy, 208e406d5edSLouis Dionne class _ForwardIterator1, 209e406d5edSLouis Dionne class _ForwardIterator2, 2109540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 2119540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 212e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI bool 213e406d5edSLouis Dionne equal(_ExecutionPolicy&& __policy, 214e406d5edSLouis Dionne _ForwardIterator1 __first1, 215e406d5edSLouis Dionne _ForwardIterator1 __last1, 216e406d5edSLouis Dionne _ForwardIterator2 __first2, 217e406d5edSLouis Dionne _ForwardIterator2 __last2) { 218e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); 219e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); 2209540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; 2219540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 2229540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 2239540950aSLouis Dionne std::move(__first1), 2249540950aSLouis Dionne std::move(__last1), 2259540950aSLouis Dionne std::move(__first2), 2269540950aSLouis Dionne std::move(__last2), 2279540950aSLouis Dionne equal_to{}); 228e406d5edSLouis Dionne } 229e406d5edSLouis Dionne 230e406d5edSLouis Dionne template <class _ExecutionPolicy, 231e406d5edSLouis Dionne class _ForwardIterator, 232e406d5edSLouis Dionne class _Tp, 233e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 234e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 235e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 236e406d5edSLouis Dionne fill(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 237e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill requires ForwardIterators"); 2389540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__fill, __pstl::__current_configuration, _RawPolicy>; 2399540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 2409540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 241e406d5edSLouis Dionne } 242e406d5edSLouis Dionne 243e406d5edSLouis Dionne template <class _ExecutionPolicy, 244e406d5edSLouis Dionne class _ForwardIterator, 2459540950aSLouis Dionne class _Size, 246e406d5edSLouis Dionne class _Tp, 247e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 248e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 249e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 2509540950aSLouis Dionne fill_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, const _Tp& __value) { 251fe4cd104SLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill_n requires a ForwardIterator"); 2529540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__fill_n, __pstl::__current_configuration, _RawPolicy>; 2539540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 2549540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), __value); 255e406d5edSLouis Dionne } 256e406d5edSLouis Dionne 257e406d5edSLouis Dionne template <class _ExecutionPolicy, 258e406d5edSLouis Dionne class _ForwardIterator, 259e406d5edSLouis Dionne class _Predicate, 260e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 261e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 2629540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardIterator 2639540950aSLouis Dionne find_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 2649540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if requires ForwardIterators"); 2659540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__find_if, __pstl::__current_configuration, _RawPolicy>; 2669540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 2679540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 268e406d5edSLouis Dionne } 269e406d5edSLouis Dionne 270e406d5edSLouis Dionne template <class _ExecutionPolicy, 271e406d5edSLouis Dionne class _ForwardIterator, 272e406d5edSLouis Dionne class _Predicate, 273e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 274e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 275e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardIterator 276e406d5edSLouis Dionne find_if_not(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 277e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if_not requires ForwardIterators"); 2789540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__find_if_not, __pstl::__current_configuration, _RawPolicy>; 2799540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 2809540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 281e406d5edSLouis Dionne } 282e406d5edSLouis Dionne 283e406d5edSLouis Dionne template <class _ExecutionPolicy, 284e406d5edSLouis Dionne class _ForwardIterator, 285e406d5edSLouis Dionne class _Tp, 286e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 287e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 288e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardIterator 289e406d5edSLouis Dionne find(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { 290e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find requires ForwardIterators"); 2919540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__find, __pstl::__current_configuration, _RawPolicy>; 2929540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 2939540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); 294e406d5edSLouis Dionne } 295e406d5edSLouis Dionne 296e406d5edSLouis Dionne template <class _ExecutionPolicy, 297e406d5edSLouis Dionne class _ForwardIterator, 298e406d5edSLouis Dionne class _Function, 299e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 300e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 3019540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 3029540950aSLouis Dionne for_each(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Function __func) { 3039540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each requires ForwardIterators"); 3049540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__for_each, __pstl::__current_configuration, _RawPolicy>; 3059540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 3069540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__func)); 307e406d5edSLouis Dionne } 308e406d5edSLouis Dionne 309e406d5edSLouis Dionne template <class _ExecutionPolicy, 310e406d5edSLouis Dionne class _ForwardIterator, 311e406d5edSLouis Dionne class _Size, 312e406d5edSLouis Dionne class _Function, 313e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 314e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 315e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 316e406d5edSLouis Dionne for_each_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __size, _Function __func) { 317e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each_n requires a ForwardIterator"); 3189540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__for_each_n, __pstl::__current_configuration, _RawPolicy>; 3199540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 3209540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__size), std::move(__func)); 321e406d5edSLouis Dionne } 322e406d5edSLouis Dionne 323e406d5edSLouis Dionne template <class _ExecutionPolicy, 324e406d5edSLouis Dionne class _ForwardIterator, 325e406d5edSLouis Dionne class _Generator, 326e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 327e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 328e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 329e406d5edSLouis Dionne generate(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Generator __gen) { 330e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate requires ForwardIterators"); 3319540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__generate, __pstl::__current_configuration, _RawPolicy>; 3329540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 3339540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__gen)); 334e406d5edSLouis Dionne } 335e406d5edSLouis Dionne 336e406d5edSLouis Dionne template <class _ExecutionPolicy, 337e406d5edSLouis Dionne class _ForwardIterator, 338e406d5edSLouis Dionne class _Size, 339e406d5edSLouis Dionne class _Generator, 340e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 341e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 342e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 343e406d5edSLouis Dionne generate_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _Generator __gen) { 344e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate_n requires a ForwardIterator"); 3459540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__generate_n, __pstl::__current_configuration, _RawPolicy>; 3469540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 3479540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__gen)); 348e406d5edSLouis Dionne } 349e406d5edSLouis Dionne 350e406d5edSLouis Dionne template <class _ExecutionPolicy, 351e406d5edSLouis Dionne class _ForwardIterator, 352e406d5edSLouis Dionne class _Predicate, 353e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 354e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 35517e0686aSNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool 356e406d5edSLouis Dionne is_partitioned(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 357e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "is_partitioned requires ForwardIterators"); 3589540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__is_partitioned, __pstl::__current_configuration, _RawPolicy>; 3599540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 3609540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); 361e406d5edSLouis Dionne } 362e406d5edSLouis Dionne 363e406d5edSLouis Dionne template <class _ExecutionPolicy, 364e406d5edSLouis Dionne class _ForwardIterator1, 365e406d5edSLouis Dionne class _ForwardIterator2, 366e406d5edSLouis Dionne class _ForwardOutIterator, 367e406d5edSLouis Dionne class _Comp, 368e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 369e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 3709540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 3719540950aSLouis Dionne merge(_ExecutionPolicy&& __policy, 3729540950aSLouis Dionne _ForwardIterator1 __first1, 3739540950aSLouis Dionne _ForwardIterator1 __last1, 3749540950aSLouis Dionne _ForwardIterator2 __first2, 3759540950aSLouis Dionne _ForwardIterator2 __last2, 3769540950aSLouis Dionne _ForwardOutIterator __result, 3779540950aSLouis Dionne _Comp __comp) { 3789540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); 3799540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); 3809540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); 3819540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); 3829540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; 3839540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 3849540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 3859540950aSLouis Dionne std::move(__first1), 3869540950aSLouis Dionne std::move(__last1), 3879540950aSLouis Dionne std::move(__first2), 3889540950aSLouis Dionne std::move(__last2), 3899540950aSLouis Dionne std::move(__result), 3909540950aSLouis Dionne std::move(__comp)); 391e406d5edSLouis Dionne } 392e406d5edSLouis Dionne 393e406d5edSLouis Dionne template <class _ExecutionPolicy, 394e406d5edSLouis Dionne class _ForwardIterator1, 395e406d5edSLouis Dionne class _ForwardIterator2, 396e406d5edSLouis Dionne class _ForwardOutIterator, 397e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 398e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 399e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 400e406d5edSLouis Dionne merge(_ExecutionPolicy&& __policy, 401e406d5edSLouis Dionne _ForwardIterator1 __first1, 402e406d5edSLouis Dionne _ForwardIterator1 __last1, 403e406d5edSLouis Dionne _ForwardIterator2 __first2, 404e406d5edSLouis Dionne _ForwardIterator2 __last2, 4059540950aSLouis Dionne _ForwardOutIterator __result) { 406e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); 407e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); 408e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); 409e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); 4109540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; 4119540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 4129540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 413e406d5edSLouis Dionne std::move(__first1), 414e406d5edSLouis Dionne std::move(__last1), 415e406d5edSLouis Dionne std::move(__first2), 416e406d5edSLouis Dionne std::move(__last2), 417e406d5edSLouis Dionne std::move(__result), 4189540950aSLouis Dionne less{}); 419e406d5edSLouis Dionne } 420e406d5edSLouis Dionne 421e406d5edSLouis Dionne template <class _ExecutionPolicy, 422e406d5edSLouis Dionne class _ForwardIterator, 423e406d5edSLouis Dionne class _ForwardOutIterator, 424e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 425e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 426e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator 427e406d5edSLouis Dionne move(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { 428e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "move requires ForwardIterators"); 429e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "move requires an OutputIterator"); 430e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 431e406d5edSLouis Dionne _ForwardOutIterator, decltype(std::move(*__first)), "move requires an OutputIterator"); 4329540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__move, __pstl::__current_configuration, _RawPolicy>; 4339540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 4349540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); 435e406d5edSLouis Dionne } 436e406d5edSLouis Dionne 437e406d5edSLouis Dionne template <class _ExecutionPolicy, 438e406d5edSLouis Dionne class _ForwardIterator, 439e406d5edSLouis Dionne class _Pred, 440e406d5edSLouis Dionne class _Tp, 441e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 442e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 443e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 444e406d5edSLouis Dionne replace_if(_ExecutionPolicy&& __policy, 445e406d5edSLouis Dionne _ForwardIterator __first, 446e406d5edSLouis Dionne _ForwardIterator __last, 447e406d5edSLouis Dionne _Pred __pred, 448e406d5edSLouis Dionne const _Tp& __new_value) { 449e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_if requires ForwardIterators"); 4509540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__replace_if, __pstl::__current_configuration, _RawPolicy>; 4519540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 4529540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred), __new_value); 453e406d5edSLouis Dionne } 454e406d5edSLouis Dionne 455e406d5edSLouis Dionne template <class _ExecutionPolicy, 456e406d5edSLouis Dionne class _ForwardIterator, 457e406d5edSLouis Dionne class _Tp, 458e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 459e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 460e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 461e406d5edSLouis Dionne replace(_ExecutionPolicy&& __policy, 462e406d5edSLouis Dionne _ForwardIterator __first, 463e406d5edSLouis Dionne _ForwardIterator __last, 464e406d5edSLouis Dionne const _Tp& __old_value, 465e406d5edSLouis Dionne const _Tp& __new_value) { 466e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace requires ForwardIterators"); 4679540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__replace, __pstl::__current_configuration, _RawPolicy>; 4689540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 4699540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __old_value, __new_value); 470e406d5edSLouis Dionne } 471e406d5edSLouis Dionne 472e406d5edSLouis Dionne template <class _ExecutionPolicy, 473e406d5edSLouis Dionne class _ForwardIterator, 474e406d5edSLouis Dionne class _ForwardOutIterator, 475e406d5edSLouis Dionne class _Pred, 476e406d5edSLouis Dionne class _Tp, 477e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 478e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 479e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void replace_copy_if( 480e406d5edSLouis Dionne _ExecutionPolicy&& __policy, 481e406d5edSLouis Dionne _ForwardIterator __first, 482e406d5edSLouis Dionne _ForwardIterator __last, 483e406d5edSLouis Dionne _ForwardOutIterator __result, 484e406d5edSLouis Dionne _Pred __pred, 485e406d5edSLouis Dionne const _Tp& __new_value) { 486e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy_if requires ForwardIterators"); 487e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy_if requires ForwardIterators"); 488e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 489e406d5edSLouis Dionne _ForwardOutIterator, decltype(*__first), "replace_copy_if requires an OutputIterator"); 490e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); 4919540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__replace_copy_if, __pstl::__current_configuration, _RawPolicy>; 4929540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 4939540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 494e406d5edSLouis Dionne std::move(__first), 495e406d5edSLouis Dionne std::move(__last), 496e406d5edSLouis Dionne std::move(__result), 4979540950aSLouis Dionne std::move(__pred), 498e406d5edSLouis Dionne __new_value); 499e406d5edSLouis Dionne } 500e406d5edSLouis Dionne 501e406d5edSLouis Dionne template <class _ExecutionPolicy, 502e406d5edSLouis Dionne class _ForwardIterator, 503e406d5edSLouis Dionne class _ForwardOutIterator, 504e406d5edSLouis Dionne class _Tp, 505e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 506e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 507e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void replace_copy( 508e406d5edSLouis Dionne _ExecutionPolicy&& __policy, 509e406d5edSLouis Dionne _ForwardIterator __first, 510e406d5edSLouis Dionne _ForwardIterator __last, 511e406d5edSLouis Dionne _ForwardOutIterator __result, 512e406d5edSLouis Dionne const _Tp& __old_value, 513e406d5edSLouis Dionne const _Tp& __new_value) { 514e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy requires ForwardIterators"); 515e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy requires ForwardIterators"); 516e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 517e406d5edSLouis Dionne _ForwardOutIterator, decltype(*__first), "replace_copy requires an OutputIterator"); 518e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); 5199540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__replace_copy, __pstl::__current_configuration, _RawPolicy>; 5209540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 5219540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 522e406d5edSLouis Dionne std::move(__first), 523e406d5edSLouis Dionne std::move(__last), 5249540950aSLouis Dionne std::move(__result), 5259540950aSLouis Dionne __old_value, 5269540950aSLouis Dionne __new_value); 527e406d5edSLouis Dionne } 528e406d5edSLouis Dionne 529e406d5edSLouis Dionne template <class _ExecutionPolicy, 530e406d5edSLouis Dionne class _ForwardIterator, 531e406d5edSLouis Dionne class _ForwardOutIterator, 532e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 533e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 534e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator rotate_copy( 535e406d5edSLouis Dionne _ExecutionPolicy&& __policy, 536e406d5edSLouis Dionne _ForwardIterator __first, 537e406d5edSLouis Dionne _ForwardIterator __middle, 538e406d5edSLouis Dionne _ForwardIterator __last, 539e406d5edSLouis Dionne _ForwardOutIterator __result) { 540e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "rotate_copy requires ForwardIterators"); 541e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "rotate_copy requires ForwardIterators"); 542e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 543e406d5edSLouis Dionne _ForwardOutIterator, decltype(*__first), "rotate_copy requires an OutputIterator"); 5449540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__rotate_copy, __pstl::__current_configuration, _RawPolicy>; 5459540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 5469540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 5479540950aSLouis Dionne std::move(__first), 5489540950aSLouis Dionne std::move(__middle), 5499540950aSLouis Dionne std::move(__last), 5509540950aSLouis Dionne std::move(__result)); 551e406d5edSLouis Dionne } 552e406d5edSLouis Dionne 553e406d5edSLouis Dionne template <class _ExecutionPolicy, 554e406d5edSLouis Dionne class _RandomAccessIterator, 555e406d5edSLouis Dionne class _Comp, 556e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 557e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 558e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 559e406d5edSLouis Dionne sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { 560e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); 5619540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; 5629540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 5639540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); 564e406d5edSLouis Dionne } 565e406d5edSLouis Dionne 566e406d5edSLouis Dionne template <class _ExecutionPolicy, 567e406d5edSLouis Dionne class _RandomAccessIterator, 568e406d5edSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 569e406d5edSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 570e406d5edSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 571e406d5edSLouis Dionne sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { 572e406d5edSLouis Dionne _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); 5739540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; 5749540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 5759540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); 5769540950aSLouis Dionne } 5779540950aSLouis Dionne 5789540950aSLouis Dionne template <class _ExecutionPolicy, 5799540950aSLouis Dionne class _RandomAccessIterator, 5809540950aSLouis Dionne class _Comp, 5819540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 5829540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 5839540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 5849540950aSLouis Dionne stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { 5859540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); 5869540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; 5879540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 5889540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); 5899540950aSLouis Dionne } 5909540950aSLouis Dionne 5919540950aSLouis Dionne template <class _ExecutionPolicy, 5929540950aSLouis Dionne class _RandomAccessIterator, 5939540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 5949540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 5959540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI void 5969540950aSLouis Dionne stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { 5979540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); 5989540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; 5999540950aSLouis Dionne __pstl::__handle_exception<_Implementation>( 6009540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); 6019540950aSLouis Dionne } 6029540950aSLouis Dionne 6039540950aSLouis Dionne template <class _ExecutionPolicy, 6049540950aSLouis Dionne class _ForwardIterator, 6059540950aSLouis Dionne class _ForwardOutIterator, 6069540950aSLouis Dionne class _UnaryOperation, 6079540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 6089540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 6099540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( 6109540950aSLouis Dionne _ExecutionPolicy&& __policy, 6119540950aSLouis Dionne _ForwardIterator __first, 6129540950aSLouis Dionne _ForwardIterator __last, 6139540950aSLouis Dionne _ForwardOutIterator __result, 6149540950aSLouis Dionne _UnaryOperation __op) { 6159540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "transform requires ForwardIterators"); 6169540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); 6179540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 6189540950aSLouis Dionne _ForwardOutIterator, decltype(__op(*__first)), "transform requires an OutputIterator"); 6199540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__transform, __pstl::__current_configuration, _RawPolicy>; 6209540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 6219540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 6229540950aSLouis Dionne std::move(__first), 6239540950aSLouis Dionne std::move(__last), 6249540950aSLouis Dionne std::move(__result), 6259540950aSLouis Dionne std::move(__op)); 6269540950aSLouis Dionne } 6279540950aSLouis Dionne 6289540950aSLouis Dionne template <class _ExecutionPolicy, 6299540950aSLouis Dionne class _ForwardIterator1, 6309540950aSLouis Dionne class _ForwardIterator2, 6319540950aSLouis Dionne class _ForwardOutIterator, 6329540950aSLouis Dionne class _BinaryOperation, 6339540950aSLouis Dionne class _RawPolicy = __remove_cvref_t<_ExecutionPolicy>, 6349540950aSLouis Dionne enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> 6359540950aSLouis Dionne _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( 6369540950aSLouis Dionne _ExecutionPolicy&& __policy, 6379540950aSLouis Dionne _ForwardIterator1 __first1, 6389540950aSLouis Dionne _ForwardIterator1 __last1, 6399540950aSLouis Dionne _ForwardIterator2 __first2, 6409540950aSLouis Dionne _ForwardOutIterator __result, 6419540950aSLouis Dionne _BinaryOperation __op) { 6429540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "transform requires ForwardIterators"); 6439540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "transform requires ForwardIterators"); 6449540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); 6459540950aSLouis Dionne _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( 6469540950aSLouis Dionne _ForwardOutIterator, decltype(__op(*__first1, *__first2)), "transform requires an OutputIterator"); 6479540950aSLouis Dionne using _Implementation = __pstl::__dispatch<__pstl::__transform_binary, __pstl::__current_configuration, _RawPolicy>; 6489540950aSLouis Dionne return __pstl::__handle_exception<_Implementation>( 6499540950aSLouis Dionne std::forward<_ExecutionPolicy>(__policy), 6509540950aSLouis Dionne std::move(__first1), 6519540950aSLouis Dionne std::move(__last1), 6529540950aSLouis Dionne std::move(__first2), 6539540950aSLouis Dionne std::move(__result), 6549540950aSLouis Dionne std::move(__op)); 655e406d5edSLouis Dionne } 656e406d5edSLouis Dionne 657e406d5edSLouis Dionne _LIBCPP_END_NAMESPACE_STD 658e406d5edSLouis Dionne 659*24e70e39SNikolas Klauser #endif // _LIBCPP_HAS_EXPERIMENTAL_PSTL && _LIBCPP_STD_VER >= 17 660e406d5edSLouis Dionne 661e406d5edSLouis Dionne _LIBCPP_POP_MACROS 662e406d5edSLouis Dionne 663e406d5edSLouis Dionne #endif // _LIBCPP___ALGORITHM_PSTL_H 664