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