1 | // -*- C++ -*- |
2 | //===-- algorithm_fwd.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_ALGORITHM_FWD_H |
11 | #define _PSTL_ALGORITHM_FWD_H |
12 | |
13 | #include <type_traits> |
14 | #include <utility> |
15 | |
16 | namespace __pstl |
17 | { |
18 | namespace __internal |
19 | { |
20 | |
21 | //------------------------------------------------------------------------ |
22 | // any_of |
23 | //------------------------------------------------------------------------ |
24 | |
25 | template <class _ForwardIterator, class _Pred> |
26 | bool |
27 | __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred, |
28 | /*__is_vector=*/std::false_type) noexcept; |
29 | |
30 | template <class _ForwardIterator, class _Pred> |
31 | bool |
32 | __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred, |
33 | /*__is_vector=*/std::true_type) noexcept; |
34 | |
35 | template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector> |
36 | bool |
37 | __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector, |
38 | /*parallel=*/std::false_type) noexcept; |
39 | |
40 | template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector> |
41 | bool |
42 | __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector, |
43 | /*parallel=*/std::true_type); |
44 | |
45 | //------------------------------------------------------------------------ |
46 | // walk1 (pseudo) |
47 | // |
48 | // walk1 evaluates f(x) for each dereferenced value x drawn from [first,last) |
49 | //------------------------------------------------------------------------ |
50 | |
51 | template <class _ForwardIterator, class _Function> |
52 | void __brick_walk1(_ForwardIterator, _ForwardIterator, _Function, |
53 | /*vector=*/std::false_type) noexcept; |
54 | |
55 | template <class _RandomAccessIterator, class _Function> |
56 | void __brick_walk1(_RandomAccessIterator, _RandomAccessIterator, _Function, |
57 | /*vector=*/std::true_type) noexcept; |
58 | |
59 | template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector> |
60 | void |
61 | __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector, |
62 | /*parallel=*/std::false_type) noexcept; |
63 | |
64 | template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector> |
65 | void |
66 | __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector, |
67 | /*parallel=*/std::true_type); |
68 | |
69 | template <class _ExecutionPolicy, class _ForwardIterator, class _Brick> |
70 | void |
71 | __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick, |
72 | /*parallel=*/std::false_type) noexcept; |
73 | |
74 | template <class _ExecutionPolicy, class _ForwardIterator, class _Brick> |
75 | void |
76 | __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick, |
77 | /*parallel=*/std::true_type); |
78 | |
79 | //------------------------------------------------------------------------ |
80 | // walk1_n |
81 | //------------------------------------------------------------------------ |
82 | |
83 | template <class _ForwardIterator, class _Size, class _Function> |
84 | _ForwardIterator __brick_walk1_n(_ForwardIterator, _Size, _Function, |
85 | /*_IsVectorTag=*/std::false_type); |
86 | |
87 | template <class _RandomAccessIterator, class _DifferenceType, class _Function> |
88 | _RandomAccessIterator __brick_walk1_n(_RandomAccessIterator, _DifferenceType, _Function, |
89 | /*vectorTag=*/std::true_type) noexcept; |
90 | |
91 | template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function, class _IsVector> |
92 | _ForwardIterator |
93 | __pattern_walk1_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Function, _IsVector, |
94 | /*is_parallel=*/std::false_type) noexcept; |
95 | |
96 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Function, class _IsVector> |
97 | _RandomAccessIterator |
98 | __pattern_walk1_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Function, _IsVector, |
99 | /*is_parallel=*/std::true_type); |
100 | |
101 | template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Brick> |
102 | _ForwardIterator |
103 | __pattern_walk_brick_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Brick, |
104 | /*is_parallel=*/std::false_type) noexcept; |
105 | |
106 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Brick> |
107 | _RandomAccessIterator |
108 | __pattern_walk_brick_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Brick, |
109 | /*is_parallel=*/std::true_type); |
110 | |
111 | //------------------------------------------------------------------------ |
112 | // walk2 (pseudo) |
113 | // |
114 | // walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...) |
115 | //------------------------------------------------------------------------ |
116 | |
117 | template <class _ForwardIterator1, class _ForwardIterator2, class _Function> |
118 | _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, |
119 | /*vector=*/std::false_type) noexcept; |
120 | |
121 | template <class _ForwardIterator1, class _ForwardIterator2, class _Function> |
122 | _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, |
123 | /*vector=*/std::true_type) noexcept; |
124 | |
125 | template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function> |
126 | _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function, |
127 | /*vector=*/std::false_type) noexcept; |
128 | |
129 | template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function> |
130 | _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function, |
131 | /*vector=*/std::true_type) noexcept; |
132 | |
133 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector> |
134 | _ForwardIterator2 |
135 | __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector, |
136 | /*parallel=*/std::false_type) noexcept; |
137 | |
138 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector> |
139 | _ForwardIterator2 |
140 | __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector, |
141 | /*parallel=*/std::true_type); |
142 | |
143 | template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function, |
144 | class _IsVector> |
145 | _ForwardIterator2 |
146 | __pattern_walk2_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Function, _IsVector, |
147 | /*parallel=*/std::false_type) noexcept; |
148 | |
149 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, |
150 | class _Function, class _IsVector> |
151 | _RandomAccessIterator2 |
152 | __pattern_walk2_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Function, _IsVector, |
153 | /*parallel=*/std::true_type); |
154 | |
155 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Brick> |
156 | _ForwardIterator2 |
157 | __pattern_walk2_brick(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Brick, |
158 | /*parallel=*/std::false_type) noexcept; |
159 | |
160 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Brick> |
161 | _RandomAccessIterator2 |
162 | __pattern_walk2_brick(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
163 | _Brick, |
164 | /*parallel=*/std::true_type); |
165 | |
166 | template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Brick> |
167 | _ForwardIterator2 |
168 | __pattern_walk2_brick_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Brick, |
169 | /*parallel=*/std::false_type) noexcept; |
170 | |
171 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, class _Brick> |
172 | _RandomAccessIterator2 |
173 | __pattern_walk2_brick_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Brick, |
174 | /*parallel=*/std::true_type); |
175 | |
176 | //------------------------------------------------------------------------ |
177 | // walk3 (pseudo) |
178 | // |
179 | // walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...) |
180 | //------------------------------------------------------------------------ |
181 | |
182 | template <class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, class _Function> |
183 | _ForwardIterator3 __brick_walk3(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, _Function, |
184 | /*vector=*/std::false_type) noexcept; |
185 | |
186 | template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _RandomAccessIterator3, class _Function> |
187 | _RandomAccessIterator3 __brick_walk3(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
188 | _RandomAccessIterator3, _Function, |
189 | /*vector=*/std::true_type) noexcept; |
190 | |
191 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, |
192 | class _Function, class _IsVector> |
193 | _ForwardIterator3 |
194 | __pattern_walk3(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, |
195 | _Function, _IsVector, |
196 | /*parallel=*/std::false_type) noexcept; |
197 | |
198 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, |
199 | class _RandomAccessIterator3, class _Function, class _IsVector> |
200 | _RandomAccessIterator3 |
201 | __pattern_walk3(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
202 | _RandomAccessIterator3, _Function, _IsVector, /*parallel=*/std::true_type); |
203 | |
204 | //------------------------------------------------------------------------ |
205 | // equal |
206 | //------------------------------------------------------------------------ |
207 | |
208 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
209 | bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate, |
210 | /* is_vector = */ std::false_type) noexcept; |
211 | |
212 | template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate> |
213 | bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _BinaryPredicate, |
214 | /* is_vector = */ std::true_type) noexcept; |
215 | |
216 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
217 | class _IsVector> |
218 | bool |
219 | __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate, |
220 | _IsVector, /* is_parallel = */ std::false_type) noexcept; |
221 | |
222 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate, |
223 | class _IsVector> |
224 | bool |
225 | __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
226 | _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type); |
227 | |
228 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
229 | bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate, |
230 | /* is_vector = */ std::false_type) noexcept; |
231 | |
232 | template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate> |
233 | bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _RandomAccessIterator2, |
234 | _BinaryPredicate, /* is_vector = */ std::true_type) noexcept; |
235 | |
236 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
237 | class _IsVector> |
238 | bool |
239 | __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
240 | _BinaryPredicate, _IsVector, /* is_parallel = */ std::false_type) noexcept; |
241 | |
242 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate, |
243 | class _IsVector> |
244 | bool |
245 | __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
246 | _RandomAccessIterator2, _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type); |
247 | |
248 | //------------------------------------------------------------------------ |
249 | // find_if |
250 | //------------------------------------------------------------------------ |
251 | |
252 | template <class _ForwardIterator, class _Predicate> |
253 | _ForwardIterator __brick_find_if(_ForwardIterator, _ForwardIterator, _Predicate, |
254 | /*is_vector=*/std::false_type) noexcept; |
255 | |
256 | template <class _RandomAccessIterator, class _Predicate> |
257 | _RandomAccessIterator __brick_find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, |
258 | /*is_vector=*/std::true_type) noexcept; |
259 | |
260 | template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> |
261 | _ForwardIterator |
262 | __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector, |
263 | /*is_parallel=*/std::false_type) noexcept; |
264 | |
265 | template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> |
266 | _ForwardIterator |
267 | __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector, |
268 | /*is_parallel=*/std::true_type); |
269 | |
270 | //------------------------------------------------------------------------ |
271 | // find_end |
272 | //------------------------------------------------------------------------ |
273 | |
274 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
275 | _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
276 | _BinaryPredicate, |
277 | /*__is_vector=*/std::false_type) noexcept; |
278 | |
279 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
280 | _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
281 | _BinaryPredicate, |
282 | /*__is_vector=*/std::true_type) noexcept; |
283 | |
284 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
285 | class _IsVector> |
286 | _ForwardIterator1 |
287 | __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
288 | _BinaryPredicate, _IsVector, |
289 | /*is_parallel=*/std::false_type) noexcept; |
290 | |
291 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
292 | class _IsVector> |
293 | _ForwardIterator1 |
294 | __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
295 | _BinaryPredicate, _IsVector, |
296 | /*is_parallel=*/std::true_type) noexcept; |
297 | |
298 | //------------------------------------------------------------------------ |
299 | // find_first_of |
300 | //------------------------------------------------------------------------ |
301 | |
302 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
303 | _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
304 | _BinaryPredicate, |
305 | /*__is_vector=*/std::false_type) noexcept; |
306 | |
307 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
308 | _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
309 | _BinaryPredicate, |
310 | /*__is_vector=*/std::true_type) noexcept; |
311 | |
312 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
313 | class _IsVector> |
314 | _ForwardIterator1 |
315 | __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
316 | _BinaryPredicate, _IsVector, /*is_parallel=*/std::false_type) noexcept; |
317 | |
318 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
319 | class _IsVector> |
320 | _ForwardIterator1 |
321 | __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
322 | _BinaryPredicate, _IsVector, /*is_parallel=*/std::true_type) noexcept; |
323 | |
324 | //------------------------------------------------------------------------ |
325 | // search |
326 | //------------------------------------------------------------------------ |
327 | |
328 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
329 | _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
330 | _BinaryPredicate, |
331 | /*vector=*/std::false_type) noexcept; |
332 | |
333 | template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> |
334 | _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
335 | _BinaryPredicate, |
336 | /*vector=*/std::true_type) noexcept; |
337 | |
338 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
339 | class _IsVector> |
340 | _ForwardIterator1 |
341 | __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
342 | _BinaryPredicate, _IsVector, |
343 | /*is_parallel=*/std::false_type) noexcept; |
344 | |
345 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, |
346 | class _IsVector> |
347 | _ForwardIterator1 |
348 | __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
349 | _BinaryPredicate, _IsVector, |
350 | /*is_parallel=*/std::true_type) noexcept; |
351 | |
352 | //------------------------------------------------------------------------ |
353 | // search_n |
354 | //------------------------------------------------------------------------ |
355 | |
356 | template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate> |
357 | _ForwardIterator |
358 | __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, |
359 | /*vector=*/std::false_type) noexcept; |
360 | |
361 | template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate> |
362 | _ForwardIterator |
363 | __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, |
364 | /*vector=*/std::true_type) noexcept; |
365 | |
366 | template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate, |
367 | class IsVector> |
368 | _ForwardIterator |
369 | __pattern_search_n(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, |
370 | IsVector, |
371 | /*is_parallel=*/std::false_type) noexcept; |
372 | |
373 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Tp, class _BinaryPredicate, |
374 | class IsVector> |
375 | _RandomAccessIterator |
376 | __pattern_search_n(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Size, const _Tp&, |
377 | _BinaryPredicate, IsVector, |
378 | /*is_parallel=*/std::true_type) noexcept; |
379 | |
380 | //------------------------------------------------------------------------ |
381 | // copy_n |
382 | //------------------------------------------------------------------------ |
383 | |
384 | template <class _ForwardIterator, class _Size, class _OutputIterator> |
385 | _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator, |
386 | /*vector=*/std::false_type) noexcept; |
387 | |
388 | template <class _ForwardIterator, class _Size, class _OutputIterator> |
389 | _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator, |
390 | /*vector=*/std::true_type) noexcept; |
391 | |
392 | //------------------------------------------------------------------------ |
393 | // copy |
394 | //------------------------------------------------------------------------ |
395 | |
396 | template <class _ForwardIterator, class _OutputIterator> |
397 | _OutputIterator __brick_copy(_ForwardIterator, _ForwardIterator, _OutputIterator, |
398 | /*vector=*/std::false_type) noexcept; |
399 | |
400 | template <class _RandomAccessIterator, class _OutputIterator> |
401 | _OutputIterator __brick_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, |
402 | /*vector=*/std::true_type) noexcept; |
403 | |
404 | //------------------------------------------------------------------------ |
405 | // move |
406 | //------------------------------------------------------------------------ |
407 | |
408 | template <class _ForwardIterator, class _OutputIterator> |
409 | _OutputIterator __brick_move(_ForwardIterator, _ForwardIterator, _OutputIterator, |
410 | /*vector=*/std::false_type) noexcept; |
411 | |
412 | template <class _RandomAccessIterator, class _OutputIterator> |
413 | _OutputIterator __brick_move(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, |
414 | /*vector=*/std::true_type) noexcept; |
415 | |
416 | //------------------------------------------------------------------------ |
417 | // swap_ranges |
418 | //------------------------------------------------------------------------ |
419 | template <class _ForwardIterator, class _OutputIterator> |
420 | _OutputIterator |
421 | __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, |
422 | /*vector=*/std::false_type) noexcept; |
423 | |
424 | template <class _ForwardIterator, class _OutputIterator> |
425 | _OutputIterator |
426 | __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, |
427 | /*vector=*/std::true_type) noexcept; |
428 | |
429 | //------------------------------------------------------------------------ |
430 | // copy_if |
431 | //------------------------------------------------------------------------ |
432 | |
433 | template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate> |
434 | _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, |
435 | /*vector=*/std::false_type) noexcept; |
436 | |
437 | template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate> |
438 | _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, |
439 | /*vector=*/std::true_type) noexcept; |
440 | |
441 | template <class _DifferenceType, class _ForwardIterator, class _UnaryPredicate> |
442 | std::pair<_DifferenceType, _DifferenceType> |
443 | __brick_calc_mask_1(_ForwardIterator, _ForwardIterator, bool* __restrict, _UnaryPredicate, |
444 | /*vector=*/std::false_type) noexcept; |
445 | template <class _DifferenceType, class _RandomAccessIterator, class _UnaryPredicate> |
446 | std::pair<_DifferenceType, _DifferenceType> |
447 | __brick_calc_mask_1(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _UnaryPredicate, |
448 | /*vector=*/std::true_type) noexcept; |
449 | |
450 | template <class _ForwardIterator, class _OutputIterator> |
451 | void |
452 | __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool*, |
453 | /*vector=*/std::false_type) noexcept; |
454 | |
455 | template <class _ForwardIterator, class _OutputIterator> |
456 | void |
457 | __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool* __restrict, |
458 | /*vector=*/std::true_type) noexcept; |
459 | |
460 | template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2> |
461 | void |
462 | __brick_partition_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, bool*, |
463 | /*vector=*/std::false_type) noexcept; |
464 | |
465 | template <class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2> |
466 | void |
467 | __brick_partition_by_mask(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, _OutputIterator2, bool*, |
468 | /*vector=*/std::true_type) noexcept; |
469 | |
470 | template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _UnaryPredicate, class _IsVector> |
471 | _OutputIterator |
472 | __pattern_copy_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, _IsVector, |
473 | /*parallel=*/std::false_type) noexcept; |
474 | |
475 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _UnaryPredicate, |
476 | class _IsVector> |
477 | _OutputIterator |
478 | __pattern_copy_if(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _UnaryPredicate, |
479 | _IsVector, /*parallel=*/std::true_type); |
480 | |
481 | //------------------------------------------------------------------------ |
482 | // count |
483 | //------------------------------------------------------------------------ |
484 | |
485 | template <class _ForwardIterator, class _Predicate> |
486 | typename std::iterator_traits<_ForwardIterator>::difference_type |
487 | __brick_count(_ForwardIterator, _ForwardIterator, _Predicate, |
488 | /* is_vector = */ std::true_type) noexcept; |
489 | |
490 | template <class _ForwardIterator, class _Predicate> |
491 | typename std::iterator_traits<_ForwardIterator>::difference_type |
492 | __brick_count(_ForwardIterator, _ForwardIterator, _Predicate, |
493 | /* is_vector = */ std::false_type) noexcept; |
494 | |
495 | template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> |
496 | typename std::iterator_traits<_ForwardIterator>::difference_type |
497 | __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, |
498 | /* is_parallel */ std::false_type, _IsVector) noexcept; |
499 | |
500 | template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> |
501 | typename std::iterator_traits<_ForwardIterator>::difference_type |
502 | __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, |
503 | /* is_parallel */ std::true_type, _IsVector); |
504 | |
505 | //------------------------------------------------------------------------ |
506 | // unique |
507 | //------------------------------------------------------------------------ |
508 | |
509 | template <class _ForwardIterator, class _BinaryPredicate> |
510 | _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate, |
511 | /*is_vector=*/std::false_type) noexcept; |
512 | |
513 | template <class _ForwardIterator, class _BinaryPredicate> |
514 | _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate, |
515 | /*is_vector=*/std::true_type) noexcept; |
516 | |
517 | template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> |
518 | _ForwardIterator |
519 | __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector, |
520 | /*is_parallel=*/std::false_type) noexcept; |
521 | |
522 | template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> |
523 | _ForwardIterator |
524 | __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector, |
525 | /*is_parallel=*/std::true_type) noexcept; |
526 | |
527 | //------------------------------------------------------------------------ |
528 | // unique_copy |
529 | //------------------------------------------------------------------------ |
530 | |
531 | template <class _ForwardIterator, class OutputIterator, class _BinaryPredicate> |
532 | OutputIterator __brick_unique_copy(_ForwardIterator, _ForwardIterator, OutputIterator, _BinaryPredicate, |
533 | /*vector=*/std::false_type) noexcept; |
534 | |
535 | template <class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate> |
536 | _OutputIterator __brick_unique_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _BinaryPredicate, |
537 | /*vector=*/std::true_type) noexcept; |
538 | |
539 | template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _BinaryPredicate, |
540 | class _IsVector> |
541 | _OutputIterator |
542 | __pattern_unique_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _BinaryPredicate, |
543 | _IsVector, /*parallel=*/std::false_type) noexcept; |
544 | |
545 | template <class _ExecutionPolicy, class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate> |
546 | _DifferenceType |
547 | __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate, |
548 | /*vector=*/std::false_type) noexcept; |
549 | |
550 | template <class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate> |
551 | _DifferenceType |
552 | __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate, |
553 | /*vector=*/std::true_type) noexcept; |
554 | |
555 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate, |
556 | class _IsVector> |
557 | _OutputIterator |
558 | __pattern_unique_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, |
559 | _BinaryPredicate, _IsVector, /*parallel=*/std::true_type); |
560 | |
561 | //------------------------------------------------------------------------ |
562 | // reverse |
563 | //------------------------------------------------------------------------ |
564 | |
565 | template <class _BidirectionalIterator> |
566 | void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, |
567 | /*__is_vector=*/std::false_type) noexcept; |
568 | |
569 | template <class _BidirectionalIterator> |
570 | void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, |
571 | /*__is_vector=*/std::true_type) noexcept; |
572 | |
573 | template <class _BidirectionalIterator> |
574 | void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, |
575 | /*is_vector=*/std::false_type) noexcept; |
576 | |
577 | template <class _BidirectionalIterator> |
578 | void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, |
579 | /*is_vector=*/std::true_type) noexcept; |
580 | |
581 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector> |
582 | void |
583 | __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector, |
584 | /*is_parallel=*/std::false_type) noexcept; |
585 | |
586 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector> |
587 | void |
588 | __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector, |
589 | /*is_parallel=*/std::true_type); |
590 | |
591 | //------------------------------------------------------------------------ |
592 | // reverse_copy |
593 | //------------------------------------------------------------------------ |
594 | |
595 | template <class _BidirectionalIterator, class _OutputIterator> |
596 | _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator, |
597 | /*is_vector=*/std::false_type) noexcept; |
598 | |
599 | template <class _BidirectionalIterator, class _OutputIterator> |
600 | _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator, |
601 | /*is_vector=*/std::true_type) noexcept; |
602 | |
603 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector> |
604 | _OutputIterator |
605 | __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector, |
606 | /*is_parallel=*/std::false_type) noexcept; |
607 | |
608 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector> |
609 | _OutputIterator |
610 | __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector, |
611 | /*is_parallel=*/std::true_type); |
612 | |
613 | //------------------------------------------------------------------------ |
614 | // rotate |
615 | //------------------------------------------------------------------------ |
616 | |
617 | template <class _ForwardIterator> |
618 | _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator, |
619 | /*is_vector=*/std::false_type) noexcept; |
620 | |
621 | template <class _ForwardIterator> |
622 | _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator, |
623 | /*is_vector=*/std::true_type) noexcept; |
624 | |
625 | template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector> |
626 | _ForwardIterator |
627 | __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector, |
628 | /*is_parallel=*/std::false_type) noexcept; |
629 | |
630 | template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector> |
631 | _ForwardIterator |
632 | __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector, |
633 | /*is_parallel=*/std::true_type); |
634 | |
635 | //------------------------------------------------------------------------ |
636 | // rotate_copy |
637 | //------------------------------------------------------------------------ |
638 | |
639 | template <class _ForwardIterator, class _OutputIterator> |
640 | _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, |
641 | /*__is_vector=*/std::false_type) noexcept; |
642 | |
643 | template <class _ForwardIterator, class _OutputIterator> |
644 | _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, |
645 | /*__is_vector=*/std::true_type) noexcept; |
646 | |
647 | template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector> |
648 | _OutputIterator |
649 | __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, |
650 | _IsVector, |
651 | /*is_parallel=*/std::false_type) noexcept; |
652 | |
653 | template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector> |
654 | _OutputIterator |
655 | __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, |
656 | _IsVector, |
657 | /*is_parallel=*/std::true_type); |
658 | |
659 | //------------------------------------------------------------------------ |
660 | // is_partitioned |
661 | //------------------------------------------------------------------------ |
662 | |
663 | template <class _ForwardIterator, class _UnaryPredicate> |
664 | bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate, |
665 | /*is_vector=*/std::false_type) noexcept; |
666 | |
667 | template <class _ForwardIterator, class _UnaryPredicate> |
668 | bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate, |
669 | /*is_vector=*/std::true_type) noexcept; |
670 | |
671 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
672 | bool |
673 | __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
674 | /*is_parallel=*/std::false_type) noexcept; |
675 | |
676 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
677 | bool |
678 | __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
679 | /*is_parallel=*/std::true_type); |
680 | |
681 | //------------------------------------------------------------------------ |
682 | // partition |
683 | //------------------------------------------------------------------------ |
684 | |
685 | template <class _ForwardIterator, class _UnaryPredicate> |
686 | _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate, |
687 | /*is_vector=*/std::false_type) noexcept; |
688 | |
689 | template <class _ForwardIterator, class _UnaryPredicate> |
690 | _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate, |
691 | /*is_vector=*/std::true_type) noexcept; |
692 | |
693 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
694 | _ForwardIterator |
695 | __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
696 | /*is_parallel=*/std::false_type) noexcept; |
697 | |
698 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
699 | _ForwardIterator |
700 | __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
701 | /*is_parallel=*/std::true_type); |
702 | |
703 | //------------------------------------------------------------------------ |
704 | // stable_partition |
705 | //------------------------------------------------------------------------ |
706 | |
707 | template <class _BidirectionalIterator, class _UnaryPredicate> |
708 | _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, |
709 | /*__is_vector=*/std::false_type) noexcept; |
710 | |
711 | template <class _BidirectionalIterator, class _UnaryPredicate> |
712 | _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, |
713 | /*__is_vector=*/std::true_type) noexcept; |
714 | |
715 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector> |
716 | _BidirectionalIterator |
717 | __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, |
718 | _IsVector, |
719 | /*is_parallelization=*/std::false_type) noexcept; |
720 | |
721 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector> |
722 | _BidirectionalIterator |
723 | __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, |
724 | _IsVector, |
725 | /*is_parallelization=*/std::true_type) noexcept; |
726 | |
727 | //------------------------------------------------------------------------ |
728 | // partition_copy |
729 | //------------------------------------------------------------------------ |
730 | |
731 | template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate> |
732 | std::pair<_OutputIterator1, _OutputIterator2> |
733 | __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate, |
734 | /*is_vector=*/std::false_type) noexcept; |
735 | |
736 | template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate> |
737 | std::pair<_OutputIterator1, _OutputIterator2> |
738 | __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate, |
739 | /*is_vector=*/std::true_type) noexcept; |
740 | |
741 | template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, |
742 | class _UnaryPredicate, class _IsVector> |
743 | std::pair<_OutputIterator1, _OutputIterator2> |
744 | __pattern_partition_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, |
745 | _UnaryPredicate, _IsVector, |
746 | /*is_parallelization=*/std::false_type) noexcept; |
747 | |
748 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2, |
749 | class _UnaryPredicate, class _IsVector> |
750 | std::pair<_OutputIterator1, _OutputIterator2> |
751 | __pattern_partition_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, |
752 | _OutputIterator2, _UnaryPredicate, _IsVector, |
753 | /*is_parallelization=*/std::true_type); |
754 | |
755 | //------------------------------------------------------------------------ |
756 | // sort |
757 | //------------------------------------------------------------------------ |
758 | |
759 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector, |
760 | class _IsMoveConstructible> |
761 | void |
762 | __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/, |
763 | /*is_parallel=*/std::false_type, _IsMoveConstructible) noexcept; |
764 | |
765 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
766 | void |
767 | __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/, |
768 | /*is_parallel=*/std::true_type, |
769 | /*is_move_constructible=*/std::true_type); |
770 | |
771 | //------------------------------------------------------------------------ |
772 | // stable_sort |
773 | //------------------------------------------------------------------------ |
774 | |
775 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
776 | void |
777 | __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, |
778 | _IsVector /*is_vector*/, |
779 | /*is_parallel=*/std::false_type) noexcept; |
780 | |
781 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
782 | void |
783 | __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, |
784 | _IsVector /*is_vector*/, |
785 | /*is_parallel=*/std::true_type); |
786 | |
787 | //------------------------------------------------------------------------ |
788 | // partial_sort |
789 | //------------------------------------------------------------------------ |
790 | |
791 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
792 | void |
793 | __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, |
794 | _Compare, _IsVector, |
795 | /*is_parallel=*/std::false_type) noexcept; |
796 | |
797 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
798 | void |
799 | __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, |
800 | _Compare, _IsVector, |
801 | /*is_parallel=*/std::true_type); |
802 | |
803 | //------------------------------------------------------------------------ |
804 | // partial_sort_copy |
805 | //------------------------------------------------------------------------ |
806 | |
807 | template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector> |
808 | _RandomAccessIterator |
809 | __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator, |
810 | _RandomAccessIterator, _Compare, _IsVector, |
811 | /*is_parallel=*/std::false_type) noexcept; |
812 | |
813 | template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector> |
814 | _RandomAccessIterator |
815 | __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator, |
816 | _RandomAccessIterator, _Compare, _IsVector, |
817 | /*is_parallel=*/std::true_type); |
818 | |
819 | //------------------------------------------------------------------------ |
820 | // adjacent_find |
821 | //------------------------------------------------------------------------ |
822 | |
823 | template <class _ForwardIterator, class _BinaryPredicate> |
824 | _ForwardIterator |
825 | __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate, |
826 | /* IsVector = */ std::true_type, bool) noexcept; |
827 | |
828 | template <class _ForwardIterator, class _BinaryPredicate> |
829 | _ForwardIterator |
830 | __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate, |
831 | /* IsVector = */ std::false_type, bool) noexcept; |
832 | |
833 | template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> |
834 | _ForwardIterator |
835 | __pattern_adjacent_find(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, |
836 | /* is_parallel */ std::false_type, _IsVector, bool) noexcept; |
837 | |
838 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _BinaryPredicate, class _IsVector> |
839 | _RandomAccessIterator |
840 | __pattern_adjacent_find(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _BinaryPredicate, |
841 | /* is_parallel */ std::true_type, _IsVector, bool); |
842 | |
843 | //------------------------------------------------------------------------ |
844 | // nth_element |
845 | //------------------------------------------------------------------------ |
846 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
847 | void |
848 | __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare, |
849 | _IsVector, |
850 | /*is_parallel=*/std::false_type) noexcept; |
851 | |
852 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
853 | void |
854 | __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare, |
855 | _IsVector, |
856 | /*is_parallel=*/std::true_type) noexcept; |
857 | |
858 | //------------------------------------------------------------------------ |
859 | // fill, fill_n |
860 | //------------------------------------------------------------------------ |
861 | template <class _ForwardIterator, class _Tp> |
862 | void |
863 | __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&, |
864 | /* __is_vector = */ std::true_type) noexcept; |
865 | |
866 | template <class _ForwardIterator, class _Tp> |
867 | void |
868 | __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&, |
869 | /* __is_vector = */ std::false_type) noexcept; |
870 | |
871 | template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector> |
872 | void |
873 | __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&, |
874 | /*is_parallel=*/std::false_type, _IsVector) noexcept; |
875 | |
876 | template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector> |
877 | _ForwardIterator |
878 | __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&, |
879 | /*is_parallel=*/std::true_type, _IsVector); |
880 | |
881 | template <class _OutputIterator, class _Size, class _Tp> |
882 | _OutputIterator |
883 | __brick_fill_n(_OutputIterator, _Size, const _Tp&, |
884 | /* __is_vector = */ std::true_type) noexcept; |
885 | |
886 | template <class _OutputIterator, class _Size, class _Tp> |
887 | _OutputIterator |
888 | __brick_fill_n(_OutputIterator, _Size, const _Tp&, |
889 | /* __is_vector = */ std::false_type) noexcept; |
890 | |
891 | template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector> |
892 | _OutputIterator |
893 | __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&, |
894 | /*is_parallel=*/std::false_type, _IsVector) noexcept; |
895 | |
896 | template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector> |
897 | _OutputIterator |
898 | __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&, |
899 | /*is_parallel=*/std::true_type, _IsVector); |
900 | |
901 | //------------------------------------------------------------------------ |
902 | // generate, generate_n |
903 | //------------------------------------------------------------------------ |
904 | |
905 | template <class _RandomAccessIterator, class _Generator> |
906 | void __brick_generate(_RandomAccessIterator, _RandomAccessIterator, _Generator, |
907 | /* is_vector = */ std::true_type) noexcept; |
908 | |
909 | template <class _ForwardIterator, class _Generator> |
910 | void __brick_generate(_ForwardIterator, _ForwardIterator, _Generator, |
911 | /* is_vector = */ std::false_type) noexcept; |
912 | |
913 | template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector> |
914 | void |
915 | __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator, |
916 | /*is_parallel=*/std::false_type, _IsVector) noexcept; |
917 | |
918 | template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector> |
919 | _ForwardIterator |
920 | __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator, |
921 | /*is_parallel=*/std::true_type, _IsVector); |
922 | |
923 | template <class OutputIterator, class Size, class _Generator> |
924 | OutputIterator __brick_generate_n(OutputIterator, Size, _Generator, |
925 | /* is_vector = */ std::true_type) noexcept; |
926 | |
927 | template <class OutputIterator, class Size, class _Generator> |
928 | OutputIterator __brick_generate_n(OutputIterator, Size, _Generator, |
929 | /* is_vector = */ std::false_type) noexcept; |
930 | |
931 | template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector> |
932 | OutputIterator |
933 | __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator, |
934 | /*is_parallel=*/std::false_type, _IsVector) noexcept; |
935 | |
936 | template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector> |
937 | OutputIterator |
938 | __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator, |
939 | /*is_parallel=*/std::true_type, _IsVector); |
940 | |
941 | //------------------------------------------------------------------------ |
942 | // remove |
943 | //------------------------------------------------------------------------ |
944 | template <class _ForwardIterator, class _UnaryPredicate> |
945 | _ForwardIterator __brick_remove_if(_ForwardIterator, _ForwardIterator, _UnaryPredicate, |
946 | /* __is_vector = */ std::false_type) noexcept; |
947 | |
948 | template <class _RandomAccessIterator, class _UnaryPredicate> |
949 | _RandomAccessIterator __brick_remove_if(_RandomAccessIterator, _RandomAccessIterator, _UnaryPredicate, |
950 | /* __is_vector = */ std::true_type) noexcept; |
951 | |
952 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
953 | _ForwardIterator |
954 | __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
955 | /*is_parallel*/ std::false_type) noexcept; |
956 | |
957 | template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> |
958 | _ForwardIterator |
959 | __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, |
960 | /*is_parallel*/ std::true_type) noexcept; |
961 | |
962 | //------------------------------------------------------------------------ |
963 | // merge |
964 | //------------------------------------------------------------------------ |
965 | |
966 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
967 | _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
968 | _OutputIterator, _Compare, |
969 | /* __is_vector = */ std::false_type) noexcept; |
970 | |
971 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
972 | _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
973 | _OutputIterator, _Compare, |
974 | /* __is_vector = */ std::true_type) noexcept; |
975 | |
976 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
977 | class _Compare, class _IsVector> |
978 | _OutputIterator |
979 | __pattern_merge(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
980 | _OutputIterator, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept; |
981 | |
982 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _OutputIterator, |
983 | class _Compare, class _IsVector> |
984 | _OutputIterator |
985 | __pattern_merge(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
986 | _RandomAccessIterator2, _OutputIterator, _Compare, _IsVector, |
987 | /* is_parallel = */ std::true_type); |
988 | |
989 | //------------------------------------------------------------------------ |
990 | // inplace_merge |
991 | //------------------------------------------------------------------------ |
992 | |
993 | template <class _BidirectionalIterator, class _Compare> |
994 | void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare, |
995 | /* __is_vector = */ std::false_type) noexcept; |
996 | |
997 | template <class _BidirectionalIterator, class _Compare> |
998 | void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare, |
999 | /* __is_vector = */ std::true_type) noexcept; |
1000 | |
1001 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector> |
1002 | void |
1003 | __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, |
1004 | _Compare, _IsVector, |
1005 | /* is_parallel = */ std::false_type) noexcept; |
1006 | |
1007 | template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector> |
1008 | void |
1009 | __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, |
1010 | _Compare, _IsVector, |
1011 | /*is_parallel=*/std::true_type); |
1012 | |
1013 | //------------------------------------------------------------------------ |
1014 | // includes |
1015 | //------------------------------------------------------------------------ |
1016 | |
1017 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> |
1018 | bool |
1019 | __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1020 | _Compare, _IsVector, |
1021 | /*is_parallel=*/std::false_type) noexcept; |
1022 | |
1023 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> |
1024 | bool |
1025 | __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1026 | _Compare, _IsVector, |
1027 | /*is_parallel=*/std::true_type); |
1028 | |
1029 | //------------------------------------------------------------------------ |
1030 | // set_union |
1031 | //------------------------------------------------------------------------ |
1032 | |
1033 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1034 | _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1035 | _OutputIterator, _Compare, |
1036 | /*__is_vector=*/std::false_type) noexcept; |
1037 | |
1038 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1039 | _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1040 | _OutputIterator, _Compare, |
1041 | /*__is_vector=*/std::true_type) noexcept; |
1042 | |
1043 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1044 | class _Compare, class _IsVector> |
1045 | _OutputIterator |
1046 | __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1047 | _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept; |
1048 | |
1049 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1050 | class _Compare, class _IsVector> |
1051 | _OutputIterator |
1052 | __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1053 | _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); |
1054 | |
1055 | //------------------------------------------------------------------------ |
1056 | // set_intersection |
1057 | //------------------------------------------------------------------------ |
1058 | |
1059 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1060 | _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1061 | _OutputIterator, _Compare, |
1062 | /*__is_vector=*/std::false_type) noexcept; |
1063 | |
1064 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1065 | _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1066 | _OutputIterator, _Compare, |
1067 | /*__is_vector=*/std::true_type) noexcept; |
1068 | |
1069 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1070 | class _Compare, class _IsVector> |
1071 | _OutputIterator |
1072 | __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1073 | _ForwardIterator2, _OutputIterator, _Compare, _IsVector, |
1074 | /*is_parallel=*/std::false_type) noexcept; |
1075 | |
1076 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1077 | class _Compare, class _IsVector> |
1078 | _OutputIterator |
1079 | __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1080 | _ForwardIterator2, _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); |
1081 | |
1082 | //------------------------------------------------------------------------ |
1083 | // set_difference |
1084 | //------------------------------------------------------------------------ |
1085 | |
1086 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1087 | _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1088 | _OutputIterator, _Compare, |
1089 | /*__is_vector=*/std::false_type) noexcept; |
1090 | |
1091 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1092 | _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1093 | _OutputIterator, _Compare, |
1094 | /*__is_vector=*/std::true_type) noexcept; |
1095 | |
1096 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1097 | class _Compare, class _IsVector> |
1098 | _OutputIterator |
1099 | __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1100 | _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept; |
1101 | |
1102 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1103 | class _Compare, class _IsVector> |
1104 | _OutputIterator |
1105 | __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1106 | _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); |
1107 | |
1108 | //------------------------------------------------------------------------ |
1109 | // set_symmetric_difference |
1110 | //------------------------------------------------------------------------ |
1111 | |
1112 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1113 | _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1114 | _ForwardIterator2, _OutputIterator, _Compare, |
1115 | /*__is_vector=*/std::false_type) noexcept; |
1116 | |
1117 | template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> |
1118 | _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1119 | _ForwardIterator2, _OutputIterator, _Compare, |
1120 | /*__is_vector=*/std::true_type) noexcept; |
1121 | |
1122 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1123 | class _Compare, class _IsVector> |
1124 | _OutputIterator |
1125 | __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1126 | _ForwardIterator2, _OutputIterator, _Compare, _IsVector, |
1127 | /*is_parallel=*/std::false_type) noexcept; |
1128 | |
1129 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, |
1130 | class _Compare, class _IsVector> |
1131 | _OutputIterator |
1132 | __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1133 | _ForwardIterator2, _OutputIterator, _Compare, _IsVector, |
1134 | /*is_parallel=*/std::true_type); |
1135 | |
1136 | //------------------------------------------------------------------------ |
1137 | // is_heap_until |
1138 | //------------------------------------------------------------------------ |
1139 | |
1140 | template <class _RandomAccessIterator, class _Compare> |
1141 | _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare, |
1142 | /* __is_vector = */ std::false_type) noexcept; |
1143 | |
1144 | template <class _RandomAccessIterator, class _Compare> |
1145 | _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare, |
1146 | /* __is_vector = */ std::true_type) noexcept; |
1147 | |
1148 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
1149 | _RandomAccessIterator |
1150 | __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, |
1151 | /* is_parallel = */ std::false_type) noexcept; |
1152 | |
1153 | template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> |
1154 | _RandomAccessIterator |
1155 | __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, |
1156 | /* is_parallel = */ std::true_type) noexcept; |
1157 | |
1158 | //------------------------------------------------------------------------ |
1159 | // min_element |
1160 | //------------------------------------------------------------------------ |
1161 | |
1162 | template <typename _ForwardIterator, typename _Compare> |
1163 | _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare, |
1164 | /* __is_vector = */ std::false_type) noexcept; |
1165 | |
1166 | template <typename _ForwardIterator, typename _Compare> |
1167 | _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare, |
1168 | /* __is_vector = */ std::true_type) noexcept; |
1169 | |
1170 | template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> |
1171 | _ForwardIterator |
1172 | __pattern_min_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, |
1173 | /* is_parallel = */ std::false_type) noexcept; |
1174 | |
1175 | template <typename _ExecutionPolicy, typename _RandomAccessIterator, typename _Compare, typename _IsVector> |
1176 | _RandomAccessIterator |
1177 | __pattern_min_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, |
1178 | /* is_parallel = */ std::true_type); |
1179 | |
1180 | //------------------------------------------------------------------------ |
1181 | // minmax_element |
1182 | //------------------------------------------------------------------------ |
1183 | |
1184 | template <typename _ForwardIterator, typename _Compare> |
1185 | std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare, |
1186 | /* __is_vector = */ std::false_type) noexcept; |
1187 | |
1188 | template <typename _ForwardIterator, typename _Compare> |
1189 | std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare, |
1190 | /* __is_vector = */ std::true_type) noexcept; |
1191 | |
1192 | template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> |
1193 | std::pair<_ForwardIterator, _ForwardIterator> |
1194 | __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, |
1195 | /* is_parallel = */ std::false_type) noexcept; |
1196 | |
1197 | template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> |
1198 | std::pair<_ForwardIterator, _ForwardIterator> |
1199 | __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, |
1200 | /* is_parallel = */ std::true_type); |
1201 | |
1202 | //------------------------------------------------------------------------ |
1203 | // mismatch |
1204 | //------------------------------------------------------------------------ |
1205 | |
1206 | template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate> |
1207 | std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1, |
1208 | _ForwardIterator2, _ForwardIterator2, _Predicate, |
1209 | /* __is_vector = */ std::false_type) noexcept; |
1210 | |
1211 | template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate> |
1212 | std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1, |
1213 | _ForwardIterator2, _ForwardIterator2, _Predicate, |
1214 | /* __is_vector = */ std::true_type) noexcept; |
1215 | |
1216 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate, class _IsVector> |
1217 | std::pair<_ForwardIterator1, _ForwardIterator2> |
1218 | __pattern_mismatch(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1219 | _Predicate, _IsVector, |
1220 | /* is_parallel = */ std::false_type) noexcept; |
1221 | |
1222 | template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Predicate, |
1223 | class _IsVector> |
1224 | std::pair<_RandomAccessIterator1, _RandomAccessIterator2> |
1225 | __pattern_mismatch(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, |
1226 | _RandomAccessIterator2, _Predicate, _IsVector, /* is_parallel = */ std::true_type) noexcept; |
1227 | |
1228 | //------------------------------------------------------------------------ |
1229 | // lexicographical_compare |
1230 | //------------------------------------------------------------------------ |
1231 | |
1232 | template <class _ForwardIterator1, class _ForwardIterator2, class _Compare> |
1233 | bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1234 | _Compare, |
1235 | /* __is_vector = */ std::false_type) noexcept; |
1236 | |
1237 | template <class _ForwardIterator1, class _ForwardIterator2, class _Compare> |
1238 | bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, |
1239 | _Compare, |
1240 | /* __is_vector = */ std::true_type) noexcept; |
1241 | |
1242 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> |
1243 | bool |
1244 | __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1245 | _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept; |
1246 | |
1247 | template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> |
1248 | bool |
1249 | __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, |
1250 | _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::true_type) noexcept; |
1251 | |
1252 | } // namespace __internal |
1253 | } // namespace __pstl |
1254 | #endif /* _PSTL_ALGORITHM_FWD_H */ |
1255 | |