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