1 // -*- C++ -*- 2 //===----------------------------------------------------------------------===// 3 // 4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 // See https://llvm.org/LICENSE.txt for license information. 6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef _PSTL_GLUE_ALGORITHM_DEFS_H 11 #define _PSTL_GLUE_ALGORITHM_DEFS_H 12 13 #include <functional> 14 #include <iterator> 15 16 #include "execution_defs.h" 17 #include "pstl_config.h" 18 19 _PSTL_HIDE_FROM_ABI_PUSH 20 21 namespace std 22 { 23 24 // [alg.any_of] 25 26 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 27 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 28 any_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 29 30 // [alg.all_of] 31 32 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 33 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 34 all_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 35 36 // [alg.none_of] 37 38 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 39 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 40 none_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 41 42 // [alg.foreach] 43 44 template <class _ExecutionPolicy, class _ForwardIterator, class _Function> 45 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 46 for_each(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Function __f); 47 48 template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function> 49 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 50 for_each_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, _Function __f); 51 52 // [alg.find] 53 54 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 55 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 56 find_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 57 58 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 59 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 60 find_if_not(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 61 62 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 63 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 64 find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 65 66 // [alg.find.end] 67 68 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 69 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 70 find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 71 _ForwardIterator2 __s_last, _BinaryPredicate __pred); 72 73 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 74 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 75 find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 76 _ForwardIterator2 __s_last); 77 78 // [alg.find_first_of] 79 80 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 81 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 82 find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 83 _ForwardIterator2 __s_first, _ForwardIterator2 __s_last, _BinaryPredicate __pred); 84 85 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 86 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 87 find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 88 _ForwardIterator2 __s_first, _ForwardIterator2 __s_last); 89 90 // [alg.adjacent_find] 91 92 template <class _ExecutionPolicy, class _ForwardIterator> 93 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 94 adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 95 96 template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate> 97 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 98 adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 99 100 // [alg.count] 101 102 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 103 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 104 typename iterator_traits<_ForwardIterator>::difference_type> 105 count(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 106 107 template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate> 108 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 109 typename iterator_traits<_ForwardIterator>::difference_type> 110 count_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred); 111 112 // [alg.search] 113 114 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 115 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 116 search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 117 _ForwardIterator2 __s_last, _BinaryPredicate __pred); 118 119 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 120 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1> 121 search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first, 122 _ForwardIterator2 __s_last); 123 124 template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate> 125 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 126 search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 127 const _Tp& __value, _BinaryPredicate __pred); 128 129 template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp> 130 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 131 search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count, 132 const _Tp& __value); 133 134 // [alg.copy] 135 136 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 137 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 138 copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 139 140 template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2> 141 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 142 copy_n(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Size __n, _ForwardIterator2 __result); 143 144 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate> 145 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 146 copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 result, 147 _Predicate __pred); 148 149 // [alg.swap] 150 151 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 152 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 153 swap_ranges(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 154 _ForwardIterator2 __first2); 155 156 // [alg.transform] 157 158 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation> 159 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 160 transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 161 _UnaryOperation __op); 162 163 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 164 class _BinaryOperation> 165 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 166 transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 167 _ForwardIterator __result, _BinaryOperation __op); 168 169 // [alg.replace] 170 171 template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _Tp> 172 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 173 replace_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred, 174 const _Tp& __new_value); 175 176 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 177 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 178 replace(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value, 179 const _Tp& __new_value); 180 181 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryPredicate, class _Tp> 182 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 183 replace_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 184 _ForwardIterator2 __result, _UnaryPredicate __pred, const _Tp& __new_value); 185 186 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp> 187 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 188 replace_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 189 const _Tp& __old_value, const _Tp& __new_value); 190 191 // [alg.fill] 192 193 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 194 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 195 fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 196 197 template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp> 198 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 199 fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count, const _Tp& __value); 200 201 // [alg.generate] 202 template <class _ExecutionPolicy, class _ForwardIterator, class _Generator> 203 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 204 generate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Generator __g); 205 206 template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Generator> 207 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 208 generate_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size count, _Generator __g); 209 210 // [alg.remove] 211 212 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate> 213 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 214 remove_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 215 _ForwardIterator2 __result, _Predicate __pred); 216 217 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp> 218 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 219 remove_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 220 const _Tp& __value); 221 222 template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate> 223 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 224 remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 225 226 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 227 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 228 remove(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value); 229 230 // [alg.unique] 231 232 template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate> 233 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 234 unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred); 235 236 template <class _ExecutionPolicy, class _ForwardIterator> 237 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 238 unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 239 240 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 241 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 242 unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result, 243 _BinaryPredicate __pred); 244 245 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 246 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 247 unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result); 248 249 // [alg.reverse] 250 251 template <class _ExecutionPolicy, class _BidirectionalIterator> 252 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 253 reverse(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last); 254 255 template <class _ExecutionPolicy, class _BidirectionalIterator, class _ForwardIterator> 256 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 257 reverse_copy(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 258 _ForwardIterator __d_first); 259 260 // [alg.rotate] 261 262 template <class _ExecutionPolicy, class _ForwardIterator> 263 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 264 rotate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last); 265 266 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 267 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 268 rotate_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __middle, _ForwardIterator1 __last, 269 _ForwardIterator2 __result); 270 271 // [alg.partitions] 272 273 template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate> 274 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 275 is_partitioned(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 276 277 template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate> 278 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 279 partition(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred); 280 281 template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate> 282 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _BidirectionalIterator> 283 stable_partition(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last, 284 _UnaryPredicate __pred); 285 286 template <class _ExecutionPolicy, class _ForwardIterator, class _ForwardIterator1, class _ForwardIterator2, 287 class _UnaryPredicate> 288 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 289 partition_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 290 _ForwardIterator1 __out_true, _ForwardIterator2 __out_false, _UnaryPredicate __pred); 291 292 // [alg.sort] 293 294 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 295 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 296 sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 297 298 template <class _ExecutionPolicy, class _RandomAccessIterator> 299 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 300 sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 301 302 // [stable.sort] 303 304 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 305 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 306 stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 307 308 template <class _ExecutionPolicy, class _RandomAccessIterator> 309 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 310 stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 311 312 // [mismatch] 313 314 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 315 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 316 mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 317 _ForwardIterator2 __last2, _BinaryPredicate __pred); 318 319 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 320 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 321 mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 322 _BinaryPredicate __pred); 323 324 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 325 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 326 mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 327 _ForwardIterator2 __last2); 328 329 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 330 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>> 331 mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 332 333 // [alg.equal] 334 335 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 336 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 337 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 338 _BinaryPredicate __p); 339 340 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 341 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 342 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); 343 344 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 345 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 346 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 347 _ForwardIterator2 __last2, _BinaryPredicate __p); 348 349 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 350 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 351 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 352 _ForwardIterator2 __last2); 353 354 // [alg.move] 355 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 356 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 357 move(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __d_first); 358 359 // [partial.sort] 360 361 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 362 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 363 partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 364 _RandomAccessIterator __last, _Compare __comp); 365 366 template <class _ExecutionPolicy, class _RandomAccessIterator> 367 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 368 partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle, 369 _RandomAccessIterator __last); 370 371 // [partial.sort.copy] 372 373 template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare> 374 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 375 partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 376 _RandomAccessIterator __d_first, _RandomAccessIterator __d_last, _Compare __comp); 377 378 template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator> 379 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 380 partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, 381 _RandomAccessIterator __d_first, _RandomAccessIterator __d_last); 382 383 // [is.sorted] 384 template <class _ExecutionPolicy, class _ForwardIterator, class _Compare> 385 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 386 is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 387 388 template <class _ExecutionPolicy, class _ForwardIterator> 389 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 390 is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 391 392 template <class _ExecutionPolicy, class _ForwardIterator, class _Compare> 393 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 394 is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 395 396 template <class _ExecutionPolicy, class _ForwardIterator> 397 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 398 is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 399 400 // [alg.nth.element] 401 402 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 403 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 404 nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 405 _RandomAccessIterator __last, _Compare __comp); 406 407 template <class _ExecutionPolicy, class _RandomAccessIterator> 408 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 409 nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth, 410 _RandomAccessIterator __last); 411 412 // [alg.merge] 413 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 414 class _Compare> 415 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 416 merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 417 _ForwardIterator2 __last2, _ForwardIterator __d_first, _Compare __comp); 418 419 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator> 420 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 421 merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 422 _ForwardIterator2 __last2, _ForwardIterator __d_first); 423 424 template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare> 425 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 426 inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 427 _BidirectionalIterator __last, _Compare __comp); 428 429 template <class _ExecutionPolicy, class _BidirectionalIterator> 430 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void> 431 inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle, 432 _BidirectionalIterator __last); 433 434 // [includes] 435 436 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare> 437 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 438 includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 439 _ForwardIterator2 __last2, _Compare __comp); 440 441 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 442 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 443 includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 444 _ForwardIterator2 __last2); 445 446 // [set.union] 447 448 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 449 class _Compare> 450 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 451 set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 452 _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 453 454 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator> 455 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 456 set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, 457 _ForwardIterator2 __last2, _ForwardIterator __result); 458 459 // [set.intersection] 460 461 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 462 class _Compare> 463 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 464 set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 465 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 466 467 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator> 468 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 469 set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 470 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 471 472 // [set.difference] 473 474 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 475 class _Compare> 476 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 477 set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 478 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp); 479 480 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator> 481 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 482 set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 483 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 484 485 // [set.symmetric.difference] 486 487 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator, 488 class _Compare> 489 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 490 set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 491 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator result, 492 _Compare __comp); 493 494 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator> 495 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 496 set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 497 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result); 498 499 // [is.heap] 500 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 501 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 502 is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 503 504 template <class _ExecutionPolicy, class _RandomAccessIterator> 505 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator> 506 is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 507 508 template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare> 509 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 510 is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp); 511 512 template <class _ExecutionPolicy, class _RandomAccessIterator> 513 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 514 is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last); 515 516 // [alg.min.max] 517 518 template <class _ExecutionPolicy, class _ForwardIterator, class _Compare> 519 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 520 min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 521 522 template <class _ExecutionPolicy, class _ForwardIterator> 523 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 524 min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 525 526 template <class _ExecutionPolicy, class _ForwardIterator, class _Compare> 527 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 528 max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 529 530 template <class _ExecutionPolicy, class _ForwardIterator> 531 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator> 532 max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 533 534 template <class _ExecutionPolicy, class _ForwardIterator, class _Compare> 535 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 536 minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp); 537 538 template <class _ExecutionPolicy, class _ForwardIterator> 539 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>> 540 minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 541 542 // [alg.lex.comparison] 543 544 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare> 545 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 546 lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 547 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _Compare __comp); 548 549 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 550 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool> 551 lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 552 _ForwardIterator2 __first2, _ForwardIterator2 __last2); 553 554 } // namespace std 555 556 _PSTL_HIDE_FROM_ABI_POP 557 558 #endif /* _PSTL_GLUE_ALGORITHM_DEFS_H */ 559