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