xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/pstl/glue_algorithm_defs.h (revision 4c3eb207d36f67d31994830c0a694161fc1ca39b)
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 */
552