2 //===-- algorithm_fwd.h --------------------------------------------------===//
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
8 //===----------------------------------------------------------------------===//
10 #ifndef _PSTL_ALGORITHM_FWD_H
11 #define _PSTL_ALGORITHM_FWD_H
13 #include <type_traits>
21 //------------------------------------------------------------------------
23 //------------------------------------------------------------------------
25 template <class _ForwardIterator
, class _Pred
>
27 __brick_any_of(const _ForwardIterator
, const _ForwardIterator
, _Pred
,
28 /*__is_vector=*/std::false_type
) noexcept
;
30 template <class _ForwardIterator
, class _Pred
>
32 __brick_any_of(const _ForwardIterator
, const _ForwardIterator
, _Pred
,
33 /*__is_vector=*/std::true_type
) noexcept
;
35 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Pred
, class _IsVector
>
37 __pattern_any_of(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Pred
, _IsVector
,
38 /*parallel=*/std::false_type
) noexcept
;
40 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Pred
, class _IsVector
>
42 __pattern_any_of(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Pred
, _IsVector
,
43 /*parallel=*/std::true_type
);
45 //------------------------------------------------------------------------
48 // walk1 evaluates f(x) for each dereferenced value x drawn from [first,last)
49 //------------------------------------------------------------------------
51 template <class _ForwardIterator
, class _Function
>
52 void __brick_walk1(_ForwardIterator
, _ForwardIterator
, _Function
,
53 /*vector=*/std::false_type
) noexcept
;
55 template <class _RandomAccessIterator
, class _Function
>
56 void __brick_walk1(_RandomAccessIterator
, _RandomAccessIterator
, _Function
,
57 /*vector=*/std::true_type
) noexcept
;
59 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Function
, class _IsVector
>
61 __pattern_walk1(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Function
, _IsVector
,
62 /*parallel=*/std::false_type
) noexcept
;
64 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Function
, class _IsVector
>
66 __pattern_walk1(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Function
, _IsVector
,
67 /*parallel=*/std::true_type
);
69 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Brick
>
71 __pattern_walk_brick(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Brick
,
72 /*parallel=*/std::false_type
) noexcept
;
74 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Brick
>
76 __pattern_walk_brick(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Brick
,
77 /*parallel=*/std::true_type
);
79 //------------------------------------------------------------------------
81 //------------------------------------------------------------------------
83 template <class _ForwardIterator
, class _Size
, class _Function
>
84 _ForwardIterator
__brick_walk1_n(_ForwardIterator
, _Size
, _Function
,
85 /*_IsVectorTag=*/std::false_type
);
87 template <class _RandomAccessIterator
, class _DifferenceType
, class _Function
>
88 _RandomAccessIterator
__brick_walk1_n(_RandomAccessIterator
, _DifferenceType
, _Function
,
89 /*vectorTag=*/std::true_type
) noexcept
;
91 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Size
, class _Function
, class _IsVector
>
93 __pattern_walk1_n(_ExecutionPolicy
&&, _ForwardIterator
, _Size
, _Function
, _IsVector
,
94 /*is_parallel=*/std::false_type
) noexcept
;
96 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Size
, class _Function
, class _IsVector
>
98 __pattern_walk1_n(_ExecutionPolicy
&&, _RandomAccessIterator
, _Size
, _Function
, _IsVector
,
99 /*is_parallel=*/std::true_type
);
101 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Size
, class _Brick
>
103 __pattern_walk_brick_n(_ExecutionPolicy
&&, _ForwardIterator
, _Size
, _Brick
,
104 /*is_parallel=*/std::false_type
) noexcept
;
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
);
111 //------------------------------------------------------------------------
114 // walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...)
115 //------------------------------------------------------------------------
117 template <class _ForwardIterator1
, class _ForwardIterator2
, class _Function
>
118 _ForwardIterator2
__brick_walk2(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _Function
,
119 /*vector=*/std::false_type
) noexcept
;
121 template <class _ForwardIterator1
, class _ForwardIterator2
, class _Function
>
122 _ForwardIterator2
__brick_walk2(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _Function
,
123 /*vector=*/std::true_type
) noexcept
;
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
;
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
;
133 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Function
, class _IsVector
>
135 __pattern_walk2(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _Function
, _IsVector
,
136 /*parallel=*/std::false_type
) noexcept
;
138 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Function
, class _IsVector
>
140 __pattern_walk2(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _Function
, _IsVector
,
141 /*parallel=*/std::true_type
);
143 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _Size
, class _ForwardIterator2
, class _Function
,
146 __pattern_walk2_n(_ExecutionPolicy
&&, _ForwardIterator1
, _Size
, _ForwardIterator2
, _Function
, _IsVector
,
147 /*parallel=*/std::false_type
) noexcept
;
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
);
155 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Brick
>
157 __pattern_walk2_brick(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _Brick
,
158 /*parallel=*/std::false_type
) noexcept
;
160 template <class _ExecutionPolicy
, class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _Brick
>
161 _RandomAccessIterator2
162 __pattern_walk2_brick(_ExecutionPolicy
&&, _RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
,
164 /*parallel=*/std::true_type
);
166 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _Size
, class _ForwardIterator2
, class _Brick
>
168 __pattern_walk2_brick_n(_ExecutionPolicy
&&, _ForwardIterator1
, _Size
, _ForwardIterator2
, _Brick
,
169 /*parallel=*/std::false_type
) noexcept
;
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
);
176 //------------------------------------------------------------------------
179 // walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...)
180 //------------------------------------------------------------------------
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
;
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
;
191 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _ForwardIterator3
,
192 class _Function
, class _IsVector
>
194 __pattern_walk3(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator3
,
195 _Function
, _IsVector
,
196 /*parallel=*/std::false_type
) noexcept
;
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
);
204 //------------------------------------------------------------------------
206 //------------------------------------------------------------------------
208 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
209 bool __brick_equal(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _BinaryPredicate
,
210 /* is_vector = */ std::false_type
) noexcept
;
212 template <class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _BinaryPredicate
>
213 bool __brick_equal(_RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
, _BinaryPredicate
,
214 /* is_vector = */ std::true_type
) noexcept
;
216 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
219 __pattern_equal(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _BinaryPredicate
,
220 _IsVector
, /* is_parallel = */ std::false_type
) noexcept
;
222 template <class _ExecutionPolicy
, class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _BinaryPredicate
,
225 __pattern_equal(_ExecutionPolicy
&&, _RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
,
226 _BinaryPredicate
, _IsVector
, /* is_parallel = */ std::true_type
);
228 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
229 bool __brick_equal(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
, _BinaryPredicate
,
230 /* is_vector = */ std::false_type
) noexcept
;
232 template <class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _BinaryPredicate
>
233 bool __brick_equal(_RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
, _RandomAccessIterator2
,
234 _BinaryPredicate
, /* is_vector = */ std::true_type
) noexcept
;
236 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
239 __pattern_equal(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
240 _BinaryPredicate
, _IsVector
, /* is_parallel = */ std::false_type
) noexcept
;
242 template <class _ExecutionPolicy
, class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _BinaryPredicate
,
245 __pattern_equal(_ExecutionPolicy
&&, _RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
,
246 _RandomAccessIterator2
, _BinaryPredicate
, _IsVector
, /* is_parallel = */ std::true_type
);
248 //------------------------------------------------------------------------
250 //------------------------------------------------------------------------
252 template <class _ForwardIterator
, class _Predicate
>
253 _ForwardIterator
__brick_find_if(_ForwardIterator
, _ForwardIterator
, _Predicate
,
254 /*is_vector=*/std::false_type
) noexcept
;
256 template <class _RandomAccessIterator
, class _Predicate
>
257 _RandomAccessIterator
__brick_find_if(_RandomAccessIterator
, _RandomAccessIterator
, _Predicate
,
258 /*is_vector=*/std::true_type
) noexcept
;
260 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Predicate
, class _IsVector
>
262 __pattern_find_if(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Predicate
, _IsVector
,
263 /*is_parallel=*/std::false_type
) noexcept
;
265 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Predicate
, class _IsVector
>
267 __pattern_find_if(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Predicate
, _IsVector
,
268 /*is_parallel=*/std::true_type
);
270 //------------------------------------------------------------------------
272 //------------------------------------------------------------------------
274 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
275 _ForwardIterator1
__brick_find_end(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
277 /*__is_vector=*/std::false_type
) noexcept
;
279 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
280 _ForwardIterator1
__brick_find_end(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
282 /*__is_vector=*/std::true_type
) noexcept
;
284 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
287 __pattern_find_end(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
288 _BinaryPredicate
, _IsVector
,
289 /*is_parallel=*/std::false_type
) noexcept
;
291 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
294 __pattern_find_end(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
295 _BinaryPredicate
, _IsVector
,
296 /*is_parallel=*/std::true_type
) noexcept
;
298 //------------------------------------------------------------------------
300 //------------------------------------------------------------------------
302 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
303 _ForwardIterator1
__brick_find_first_of(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
305 /*__is_vector=*/std::false_type
) noexcept
;
307 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
308 _ForwardIterator1
__brick_find_first_of(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
310 /*__is_vector=*/std::true_type
) noexcept
;
312 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
315 __pattern_find_first_of(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
316 _BinaryPredicate
, _IsVector
, /*is_parallel=*/std::false_type
) noexcept
;
318 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
321 __pattern_find_first_of(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
322 _BinaryPredicate
, _IsVector
, /*is_parallel=*/std::true_type
) noexcept
;
324 //------------------------------------------------------------------------
326 //------------------------------------------------------------------------
328 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
329 _ForwardIterator1
__brick_search(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
331 /*vector=*/std::false_type
) noexcept
;
333 template <class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
>
334 _ForwardIterator1
__brick_search(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
336 /*vector=*/std::true_type
) noexcept
;
338 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
341 __pattern_search(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
342 _BinaryPredicate
, _IsVector
,
343 /*is_parallel=*/std::false_type
) noexcept
;
345 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _BinaryPredicate
,
348 __pattern_search(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
349 _BinaryPredicate
, _IsVector
,
350 /*is_parallel=*/std::true_type
) noexcept
;
352 //------------------------------------------------------------------------
354 //------------------------------------------------------------------------
356 template <class _ForwardIterator
, class _Size
, class _Tp
, class _BinaryPredicate
>
358 __brick_search_n(_ForwardIterator
, _ForwardIterator
, _Size
, const _Tp
&, _BinaryPredicate
,
359 /*vector=*/std::false_type
) noexcept
;
361 template <class _ForwardIterator
, class _Size
, class _Tp
, class _BinaryPredicate
>
363 __brick_search_n(_ForwardIterator
, _ForwardIterator
, _Size
, const _Tp
&, _BinaryPredicate
,
364 /*vector=*/std::true_type
) noexcept
;
366 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Size
, class _Tp
, class _BinaryPredicate
,
369 __pattern_search_n(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Size
, const _Tp
&, _BinaryPredicate
,
371 /*is_parallel=*/std::false_type
) noexcept
;
373 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Size
, class _Tp
, class _BinaryPredicate
,
375 _RandomAccessIterator
376 __pattern_search_n(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _Size
, const _Tp
&,
377 _BinaryPredicate
, IsVector
,
378 /*is_parallel=*/std::true_type
) noexcept
;
380 //------------------------------------------------------------------------
382 //------------------------------------------------------------------------
384 template <class _ForwardIterator
, class _Size
, class _OutputIterator
>
385 _OutputIterator
__brick_copy_n(_ForwardIterator
, _Size
, _OutputIterator
,
386 /*vector=*/std::false_type
) noexcept
;
388 template <class _ForwardIterator
, class _Size
, class _OutputIterator
>
389 _OutputIterator
__brick_copy_n(_ForwardIterator
, _Size
, _OutputIterator
,
390 /*vector=*/std::true_type
) noexcept
;
392 //------------------------------------------------------------------------
394 //------------------------------------------------------------------------
396 template <class _ForwardIterator
, class _OutputIterator
>
397 _OutputIterator
__brick_copy(_ForwardIterator
, _ForwardIterator
, _OutputIterator
,
398 /*vector=*/std::false_type
) noexcept
;
400 template <class _RandomAccessIterator
, class _OutputIterator
>
401 _OutputIterator
__brick_copy(_RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator
,
402 /*vector=*/std::true_type
) noexcept
;
404 //------------------------------------------------------------------------
406 //------------------------------------------------------------------------
408 template <class _ForwardIterator
, class _OutputIterator
>
409 _OutputIterator
__brick_move(_ForwardIterator
, _ForwardIterator
, _OutputIterator
,
410 /*vector=*/std::false_type
) noexcept
;
412 template <class _RandomAccessIterator
, class _OutputIterator
>
413 _OutputIterator
__brick_move(_RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator
,
414 /*vector=*/std::true_type
) noexcept
;
416 //------------------------------------------------------------------------
418 //------------------------------------------------------------------------
419 template <class _ForwardIterator
, class _OutputIterator
>
421 __brick_swap_ranges(_ForwardIterator __first
, _ForwardIterator __last
, _OutputIterator __result
,
422 /*vector=*/std::false_type
) noexcept
;
424 template <class _ForwardIterator
, class _OutputIterator
>
426 __brick_swap_ranges(_ForwardIterator __first
, _ForwardIterator __last
, _OutputIterator __result
,
427 /*vector=*/std::true_type
) noexcept
;
429 //------------------------------------------------------------------------
431 //------------------------------------------------------------------------
433 template <class _ForwardIterator
, class _OutputIterator
, class _UnaryPredicate
>
434 _OutputIterator
__brick_copy_if(_ForwardIterator
, _ForwardIterator
, _OutputIterator
, _UnaryPredicate
,
435 /*vector=*/std::false_type
) noexcept
;
437 template <class _ForwardIterator
, class _OutputIterator
, class _UnaryPredicate
>
438 _OutputIterator
__brick_copy_if(_ForwardIterator
, _ForwardIterator
, _OutputIterator
, _UnaryPredicate
,
439 /*vector=*/std::true_type
) noexcept
;
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
;
450 template <class _ForwardIterator
, class _OutputIterator
>
452 __brick_copy_by_mask(_ForwardIterator
, _ForwardIterator
, _OutputIterator
, bool*,
453 /*vector=*/std::false_type
) noexcept
;
455 template <class _ForwardIterator
, class _OutputIterator
>
457 __brick_copy_by_mask(_ForwardIterator
, _ForwardIterator
, _OutputIterator
, bool* __restrict
,
458 /*vector=*/std::true_type
) noexcept
;
460 template <class _ForwardIterator
, class _OutputIterator1
, class _OutputIterator2
>
462 __brick_partition_by_mask(_ForwardIterator
, _ForwardIterator
, _OutputIterator1
, _OutputIterator2
, bool*,
463 /*vector=*/std::false_type
) noexcept
;
465 template <class _RandomAccessIterator
, class _OutputIterator1
, class _OutputIterator2
>
467 __brick_partition_by_mask(_RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator1
, _OutputIterator2
, bool*,
468 /*vector=*/std::true_type
) noexcept
;
470 template <class _ExecutionPolicy
, class _ForwardIterator
, class _OutputIterator
, class _UnaryPredicate
, class _IsVector
>
472 __pattern_copy_if(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _OutputIterator
, _UnaryPredicate
, _IsVector
,
473 /*parallel=*/std::false_type
) noexcept
;
475 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _OutputIterator
, class _UnaryPredicate
,
478 __pattern_copy_if(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator
, _UnaryPredicate
,
479 _IsVector
, /*parallel=*/std::true_type
);
481 //------------------------------------------------------------------------
483 //------------------------------------------------------------------------
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
;
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
;
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
;
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
);
505 //------------------------------------------------------------------------
507 //------------------------------------------------------------------------
509 template <class _ForwardIterator
, class _BinaryPredicate
>
510 _ForwardIterator
__brick_unique(_ForwardIterator
, _ForwardIterator
, _BinaryPredicate
,
511 /*is_vector=*/std::false_type
) noexcept
;
513 template <class _ForwardIterator
, class _BinaryPredicate
>
514 _ForwardIterator
__brick_unique(_ForwardIterator
, _ForwardIterator
, _BinaryPredicate
,
515 /*is_vector=*/std::true_type
) noexcept
;
517 template <class _ExecutionPolicy
, class _ForwardIterator
, class _BinaryPredicate
, class _IsVector
>
519 __pattern_unique(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _BinaryPredicate
, _IsVector
,
520 /*is_parallel=*/std::false_type
) noexcept
;
522 template <class _ExecutionPolicy
, class _ForwardIterator
, class _BinaryPredicate
, class _IsVector
>
524 __pattern_unique(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _BinaryPredicate
, _IsVector
,
525 /*is_parallel=*/std::true_type
) noexcept
;
527 //------------------------------------------------------------------------
529 //------------------------------------------------------------------------
531 template <class _ForwardIterator
, class OutputIterator
, class _BinaryPredicate
>
532 OutputIterator
__brick_unique_copy(_ForwardIterator
, _ForwardIterator
, OutputIterator
, _BinaryPredicate
,
533 /*vector=*/std::false_type
) noexcept
;
535 template <class _RandomAccessIterator
, class _OutputIterator
, class _BinaryPredicate
>
536 _OutputIterator
__brick_unique_copy(_RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator
, _BinaryPredicate
,
537 /*vector=*/std::true_type
) noexcept
;
539 template <class _ExecutionPolicy
, class _ForwardIterator
, class _OutputIterator
, class _BinaryPredicate
,
542 __pattern_unique_copy(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _OutputIterator
, _BinaryPredicate
,
543 _IsVector
, /*parallel=*/std::false_type
) noexcept
;
545 template <class _ExecutionPolicy
, class _DifferenceType
, class _RandomAccessIterator
, class _BinaryPredicate
>
547 __brick_calc_mask_2(_RandomAccessIterator
, _RandomAccessIterator
, bool* __restrict
, _BinaryPredicate
,
548 /*vector=*/std::false_type
) noexcept
;
550 template <class _DifferenceType
, class _RandomAccessIterator
, class _BinaryPredicate
>
552 __brick_calc_mask_2(_RandomAccessIterator
, _RandomAccessIterator
, bool* __restrict
, _BinaryPredicate
,
553 /*vector=*/std::true_type
) noexcept
;
555 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _OutputIterator
, class _BinaryPredicate
,
558 __pattern_unique_copy(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _OutputIterator
,
559 _BinaryPredicate
, _IsVector
, /*parallel=*/std::true_type
);
561 //------------------------------------------------------------------------
563 //------------------------------------------------------------------------
565 template <class _BidirectionalIterator
>
566 void __brick_reverse(_BidirectionalIterator
, _BidirectionalIterator
,
567 /*__is_vector=*/std::false_type
) noexcept
;
569 template <class _BidirectionalIterator
>
570 void __brick_reverse(_BidirectionalIterator
, _BidirectionalIterator
,
571 /*__is_vector=*/std::true_type
) noexcept
;
573 template <class _BidirectionalIterator
>
574 void __brick_reverse(_BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
,
575 /*is_vector=*/std::false_type
) noexcept
;
577 template <class _BidirectionalIterator
>
578 void __brick_reverse(_BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
,
579 /*is_vector=*/std::true_type
) noexcept
;
581 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _IsVector
>
583 __pattern_reverse(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _IsVector
,
584 /*is_parallel=*/std::false_type
) noexcept
;
586 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _IsVector
>
588 __pattern_reverse(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _IsVector
,
589 /*is_parallel=*/std::true_type
);
591 //------------------------------------------------------------------------
593 //------------------------------------------------------------------------
595 template <class _BidirectionalIterator
, class _OutputIterator
>
596 _OutputIterator
__brick_reverse_copy(_BidirectionalIterator
, _BidirectionalIterator
, _OutputIterator
,
597 /*is_vector=*/std::false_type
) noexcept
;
599 template <class _BidirectionalIterator
, class _OutputIterator
>
600 _OutputIterator
__brick_reverse_copy(_BidirectionalIterator
, _BidirectionalIterator
, _OutputIterator
,
601 /*is_vector=*/std::true_type
) noexcept
;
603 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _OutputIterator
, class _IsVector
>
605 __pattern_reverse_copy(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _OutputIterator
, _IsVector
,
606 /*is_parallel=*/std::false_type
) noexcept
;
608 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _OutputIterator
, class _IsVector
>
610 __pattern_reverse_copy(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _OutputIterator
, _IsVector
,
611 /*is_parallel=*/std::true_type
);
613 //------------------------------------------------------------------------
615 //------------------------------------------------------------------------
617 template <class _ForwardIterator
>
618 _ForwardIterator
__brick_rotate(_ForwardIterator
, _ForwardIterator
, _ForwardIterator
,
619 /*is_vector=*/std::false_type
) noexcept
;
621 template <class _ForwardIterator
>
622 _ForwardIterator
__brick_rotate(_ForwardIterator
, _ForwardIterator
, _ForwardIterator
,
623 /*is_vector=*/std::true_type
) noexcept
;
625 template <class _ExecutionPolicy
, class _ForwardIterator
, class _IsVector
>
627 __pattern_rotate(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _IsVector
,
628 /*is_parallel=*/std::false_type
) noexcept
;
630 template <class _ExecutionPolicy
, class _ForwardIterator
, class _IsVector
>
632 __pattern_rotate(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _IsVector
,
633 /*is_parallel=*/std::true_type
);
635 //------------------------------------------------------------------------
637 //------------------------------------------------------------------------
639 template <class _ForwardIterator
, class _OutputIterator
>
640 _OutputIterator
__brick_rotate_copy(_ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _OutputIterator
,
641 /*__is_vector=*/std::false_type
) noexcept
;
643 template <class _ForwardIterator
, class _OutputIterator
>
644 _OutputIterator
__brick_rotate_copy(_ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _OutputIterator
,
645 /*__is_vector=*/std::true_type
) noexcept
;
647 template <class _ExecutionPolicy
, class _ForwardIterator
, class _OutputIterator
, class _IsVector
>
649 __pattern_rotate_copy(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _OutputIterator
,
651 /*is_parallel=*/std::false_type
) noexcept
;
653 template <class _ExecutionPolicy
, class _ForwardIterator
, class _OutputIterator
, class _IsVector
>
655 __pattern_rotate_copy(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _ForwardIterator
, _OutputIterator
,
657 /*is_parallel=*/std::true_type
);
659 //------------------------------------------------------------------------
661 //------------------------------------------------------------------------
663 template <class _ForwardIterator
, class _UnaryPredicate
>
664 bool __brick_is_partitioned(_ForwardIterator
, _ForwardIterator
, _UnaryPredicate
,
665 /*is_vector=*/std::false_type
) noexcept
;
667 template <class _ForwardIterator
, class _UnaryPredicate
>
668 bool __brick_is_partitioned(_ForwardIterator
, _ForwardIterator
, _UnaryPredicate
,
669 /*is_vector=*/std::true_type
) noexcept
;
671 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
673 __pattern_is_partitioned(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
674 /*is_parallel=*/std::false_type
) noexcept
;
676 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
678 __pattern_is_partitioned(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
679 /*is_parallel=*/std::true_type
);
681 //------------------------------------------------------------------------
683 //------------------------------------------------------------------------
685 template <class _ForwardIterator
, class _UnaryPredicate
>
686 _ForwardIterator
__brick_partition(_ForwardIterator
, _ForwardIterator
, _UnaryPredicate
,
687 /*is_vector=*/std::false_type
) noexcept
;
689 template <class _ForwardIterator
, class _UnaryPredicate
>
690 _ForwardIterator
__brick_partition(_ForwardIterator
, _ForwardIterator
, _UnaryPredicate
,
691 /*is_vector=*/std::true_type
) noexcept
;
693 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
695 __pattern_partition(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
696 /*is_parallel=*/std::false_type
) noexcept
;
698 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
700 __pattern_partition(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
701 /*is_parallel=*/std::true_type
);
703 //------------------------------------------------------------------------
705 //------------------------------------------------------------------------
707 template <class _BidirectionalIterator
, class _UnaryPredicate
>
708 _BidirectionalIterator
__brick_stable_partition(_BidirectionalIterator
, _BidirectionalIterator
, _UnaryPredicate
,
709 /*__is_vector=*/std::false_type
) noexcept
;
711 template <class _BidirectionalIterator
, class _UnaryPredicate
>
712 _BidirectionalIterator
__brick_stable_partition(_BidirectionalIterator
, _BidirectionalIterator
, _UnaryPredicate
,
713 /*__is_vector=*/std::true_type
) noexcept
;
715 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _UnaryPredicate
, class _IsVector
>
716 _BidirectionalIterator
717 __pattern_stable_partition(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _UnaryPredicate
,
719 /*is_parallelization=*/std::false_type
) noexcept
;
721 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _UnaryPredicate
, class _IsVector
>
722 _BidirectionalIterator
723 __pattern_stable_partition(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _UnaryPredicate
,
725 /*is_parallelization=*/std::true_type
) noexcept
;
727 //------------------------------------------------------------------------
729 //------------------------------------------------------------------------
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
;
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
;
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
;
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
);
755 //------------------------------------------------------------------------
757 //------------------------------------------------------------------------
759 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
,
760 class _IsMoveConstructible
>
762 __pattern_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
, _IsVector
/*is_vector*/,
763 /*is_parallel=*/std::false_type
, _IsMoveConstructible
) noexcept
;
765 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
767 __pattern_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
, _IsVector
/*is_vector*/,
768 /*is_parallel=*/std::true_type
,
769 /*is_move_constructible=*/std::true_type
);
771 //------------------------------------------------------------------------
773 //------------------------------------------------------------------------
775 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
777 __pattern_stable_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
778 _IsVector
/*is_vector*/,
779 /*is_parallel=*/std::false_type
) noexcept
;
781 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
783 __pattern_stable_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
784 _IsVector
/*is_vector*/,
785 /*is_parallel=*/std::true_type
);
787 //------------------------------------------------------------------------
789 //------------------------------------------------------------------------
791 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
793 __pattern_partial_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _RandomAccessIterator
,
795 /*is_parallel=*/std::false_type
) noexcept
;
797 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
799 __pattern_partial_sort(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _RandomAccessIterator
,
801 /*is_parallel=*/std::true_type
);
803 //------------------------------------------------------------------------
805 //------------------------------------------------------------------------
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
;
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
);
819 //------------------------------------------------------------------------
821 //------------------------------------------------------------------------
823 template <class _ForwardIterator
, class _BinaryPredicate
>
825 __brick_adjacent_find(_ForwardIterator
, _ForwardIterator
, _BinaryPredicate
,
826 /* IsVector = */ std::true_type
, bool) noexcept
;
828 template <class _ForwardIterator
, class _BinaryPredicate
>
830 __brick_adjacent_find(_ForwardIterator
, _ForwardIterator
, _BinaryPredicate
,
831 /* IsVector = */ std::false_type
, bool) noexcept
;
833 template <class _ExecutionPolicy
, class _ForwardIterator
, class _BinaryPredicate
, class _IsVector
>
835 __pattern_adjacent_find(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _BinaryPredicate
,
836 /* is_parallel */ std::false_type
, _IsVector
, bool) noexcept
;
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);
843 //------------------------------------------------------------------------
845 //------------------------------------------------------------------------
846 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
848 __pattern_nth_element(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
850 /*is_parallel=*/std::false_type
) noexcept
;
852 template <class _ExecutionPolicy
, class _RandomAccessIterator
, class _Compare
, class _IsVector
>
854 __pattern_nth_element(_ExecutionPolicy
&&, _RandomAccessIterator
, _RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
856 /*is_parallel=*/std::true_type
) noexcept
;
858 //------------------------------------------------------------------------
860 //------------------------------------------------------------------------
861 template <class _ForwardIterator
, class _Tp
>
863 __brick_fill(_ForwardIterator
, _ForwardIterator
, const _Tp
&,
864 /* __is_vector = */ std::true_type
) noexcept
;
866 template <class _ForwardIterator
, class _Tp
>
868 __brick_fill(_ForwardIterator
, _ForwardIterator
, const _Tp
&,
869 /* __is_vector = */ std::false_type
) noexcept
;
871 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Tp
, class _IsVector
>
873 __pattern_fill(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, const _Tp
&,
874 /*is_parallel=*/std::false_type
, _IsVector
) noexcept
;
876 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Tp
, class _IsVector
>
878 __pattern_fill(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, const _Tp
&,
879 /*is_parallel=*/std::true_type
, _IsVector
);
881 template <class _OutputIterator
, class _Size
, class _Tp
>
883 __brick_fill_n(_OutputIterator
, _Size
, const _Tp
&,
884 /* __is_vector = */ std::true_type
) noexcept
;
886 template <class _OutputIterator
, class _Size
, class _Tp
>
888 __brick_fill_n(_OutputIterator
, _Size
, const _Tp
&,
889 /* __is_vector = */ std::false_type
) noexcept
;
891 template <class _ExecutionPolicy
, class _OutputIterator
, class _Size
, class _Tp
, class _IsVector
>
893 __pattern_fill_n(_ExecutionPolicy
&&, _OutputIterator
, _Size
, const _Tp
&,
894 /*is_parallel=*/std::false_type
, _IsVector
) noexcept
;
896 template <class _ExecutionPolicy
, class _OutputIterator
, class _Size
, class _Tp
, class _IsVector
>
898 __pattern_fill_n(_ExecutionPolicy
&&, _OutputIterator
, _Size
, const _Tp
&,
899 /*is_parallel=*/std::true_type
, _IsVector
);
901 //------------------------------------------------------------------------
902 // generate, generate_n
903 //------------------------------------------------------------------------
905 template <class _RandomAccessIterator
, class _Generator
>
906 void __brick_generate(_RandomAccessIterator
, _RandomAccessIterator
, _Generator
,
907 /* is_vector = */ std::true_type
) noexcept
;
909 template <class _ForwardIterator
, class _Generator
>
910 void __brick_generate(_ForwardIterator
, _ForwardIterator
, _Generator
,
911 /* is_vector = */ std::false_type
) noexcept
;
913 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Generator
, class _IsVector
>
915 __pattern_generate(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Generator
,
916 /*is_parallel=*/std::false_type
, _IsVector
) noexcept
;
918 template <class _ExecutionPolicy
, class _ForwardIterator
, class _Generator
, class _IsVector
>
920 __pattern_generate(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Generator
,
921 /*is_parallel=*/std::true_type
, _IsVector
);
923 template <class OutputIterator
, class Size
, class _Generator
>
924 OutputIterator
__brick_generate_n(OutputIterator
, Size
, _Generator
,
925 /* is_vector = */ std::true_type
) noexcept
;
927 template <class OutputIterator
, class Size
, class _Generator
>
928 OutputIterator
__brick_generate_n(OutputIterator
, Size
, _Generator
,
929 /* is_vector = */ std::false_type
) noexcept
;
931 template <class _ExecutionPolicy
, class OutputIterator
, class Size
, class _Generator
, class _IsVector
>
933 __pattern_generate_n(_ExecutionPolicy
&&, OutputIterator
, Size
, _Generator
,
934 /*is_parallel=*/std::false_type
, _IsVector
) noexcept
;
936 template <class _ExecutionPolicy
, class OutputIterator
, class Size
, class _Generator
, class _IsVector
>
938 __pattern_generate_n(_ExecutionPolicy
&&, OutputIterator
, Size
, _Generator
,
939 /*is_parallel=*/std::true_type
, _IsVector
);
941 //------------------------------------------------------------------------
943 //------------------------------------------------------------------------
944 template <class _ForwardIterator
, class _UnaryPredicate
>
945 _ForwardIterator
__brick_remove_if(_ForwardIterator
, _ForwardIterator
, _UnaryPredicate
,
946 /* __is_vector = */ std::false_type
) noexcept
;
948 template <class _RandomAccessIterator
, class _UnaryPredicate
>
949 _RandomAccessIterator
__brick_remove_if(_RandomAccessIterator
, _RandomAccessIterator
, _UnaryPredicate
,
950 /* __is_vector = */ std::true_type
) noexcept
;
952 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
954 __pattern_remove_if(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
955 /*is_parallel*/ std::false_type
) noexcept
;
957 template <class _ExecutionPolicy
, class _ForwardIterator
, class _UnaryPredicate
, class _IsVector
>
959 __pattern_remove_if(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _UnaryPredicate
, _IsVector
,
960 /*is_parallel*/ std::true_type
) noexcept
;
962 //------------------------------------------------------------------------
964 //------------------------------------------------------------------------
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
;
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
;
976 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
977 class _Compare
, class _IsVector
>
979 __pattern_merge(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
980 _OutputIterator
, _Compare
, _IsVector
, /* is_parallel = */ std::false_type
) noexcept
;
982 template <class _ExecutionPolicy
, class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _OutputIterator
,
983 class _Compare
, class _IsVector
>
985 __pattern_merge(_ExecutionPolicy
&&, _RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
,
986 _RandomAccessIterator2
, _OutputIterator
, _Compare
, _IsVector
,
987 /* is_parallel = */ std::true_type
);
989 //------------------------------------------------------------------------
991 //------------------------------------------------------------------------
993 template <class _BidirectionalIterator
, class _Compare
>
994 void __brick_inplace_merge(_BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
, _Compare
,
995 /* __is_vector = */ std::false_type
) noexcept
;
997 template <class _BidirectionalIterator
, class _Compare
>
998 void __brick_inplace_merge(_BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
, _Compare
,
999 /* __is_vector = */ std::true_type
) noexcept
;
1001 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _Compare
, class _IsVector
>
1003 __pattern_inplace_merge(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
,
1004 _Compare
, _IsVector
,
1005 /* is_parallel = */ std::false_type
) noexcept
;
1007 template <class _ExecutionPolicy
, class _BidirectionalIterator
, class _Compare
, class _IsVector
>
1009 __pattern_inplace_merge(_ExecutionPolicy
&&, _BidirectionalIterator
, _BidirectionalIterator
, _BidirectionalIterator
,
1010 _Compare
, _IsVector
,
1011 /*is_parallel=*/std::true_type
);
1013 //------------------------------------------------------------------------
1015 //------------------------------------------------------------------------
1017 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
, class _IsVector
>
1019 __pattern_includes(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1020 _Compare
, _IsVector
,
1021 /*is_parallel=*/std::false_type
) noexcept
;
1023 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
, class _IsVector
>
1025 __pattern_includes(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1026 _Compare
, _IsVector
,
1027 /*is_parallel=*/std::true_type
);
1029 //------------------------------------------------------------------------
1031 //------------------------------------------------------------------------
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
;
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
;
1043 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1044 class _Compare
, class _IsVector
>
1046 __pattern_set_union(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1047 _OutputIterator
, _Compare
, _IsVector
, /*is_parallel=*/std::false_type
) noexcept
;
1049 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1050 class _Compare
, class _IsVector
>
1052 __pattern_set_union(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1053 _OutputIterator
, _Compare
, _IsVector
, /*is_parallel=*/std::true_type
);
1055 //------------------------------------------------------------------------
1057 //------------------------------------------------------------------------
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
;
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
;
1069 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1070 class _Compare
, class _IsVector
>
1072 __pattern_set_intersection(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1073 _ForwardIterator2
, _OutputIterator
, _Compare
, _IsVector
,
1074 /*is_parallel=*/std::false_type
) noexcept
;
1076 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1077 class _Compare
, class _IsVector
>
1079 __pattern_set_intersection(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1080 _ForwardIterator2
, _OutputIterator
, _Compare
, _IsVector
, /*is_parallel=*/std::true_type
);
1082 //------------------------------------------------------------------------
1084 //------------------------------------------------------------------------
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
;
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
;
1096 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1097 class _Compare
, class _IsVector
>
1099 __pattern_set_difference(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1100 _OutputIterator
, _Compare
, _IsVector
, /*is_parallel=*/std::false_type
) noexcept
;
1102 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1103 class _Compare
, class _IsVector
>
1105 __pattern_set_difference(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1106 _OutputIterator
, _Compare
, _IsVector
, /*is_parallel=*/std::true_type
);
1108 //------------------------------------------------------------------------
1109 // set_symmetric_difference
1110 //------------------------------------------------------------------------
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
;
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
;
1122 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1123 class _Compare
, class _IsVector
>
1125 __pattern_set_symmetric_difference(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1126 _ForwardIterator2
, _OutputIterator
, _Compare
, _IsVector
,
1127 /*is_parallel=*/std::false_type
) noexcept
;
1129 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _OutputIterator
,
1130 class _Compare
, class _IsVector
>
1132 __pattern_set_symmetric_difference(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1133 _ForwardIterator2
, _OutputIterator
, _Compare
, _IsVector
,
1134 /*is_parallel=*/std::true_type
);
1136 //------------------------------------------------------------------------
1138 //------------------------------------------------------------------------
1140 template <class _RandomAccessIterator
, class _Compare
>
1141 _RandomAccessIterator
__brick_is_heap_until(_RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
1142 /* __is_vector = */ std::false_type
) noexcept
;
1144 template <class _RandomAccessIterator
, class _Compare
>
1145 _RandomAccessIterator
__brick_is_heap_until(_RandomAccessIterator
, _RandomAccessIterator
, _Compare
,
1146 /* __is_vector = */ std::true_type
) noexcept
;
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
;
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
;
1158 //------------------------------------------------------------------------
1160 //------------------------------------------------------------------------
1162 template <typename _ForwardIterator
, typename _Compare
>
1163 _ForwardIterator
__brick_min_element(_ForwardIterator
, _ForwardIterator
, _Compare
,
1164 /* __is_vector = */ std::false_type
) noexcept
;
1166 template <typename _ForwardIterator
, typename _Compare
>
1167 _ForwardIterator
__brick_min_element(_ForwardIterator
, _ForwardIterator
, _Compare
,
1168 /* __is_vector = */ std::true_type
) noexcept
;
1170 template <typename _ExecutionPolicy
, typename _ForwardIterator
, typename _Compare
, typename _IsVector
>
1172 __pattern_min_element(_ExecutionPolicy
&&, _ForwardIterator
, _ForwardIterator
, _Compare
, _IsVector
,
1173 /* is_parallel = */ std::false_type
) noexcept
;
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
);
1180 //------------------------------------------------------------------------
1182 //------------------------------------------------------------------------
1184 template <typename _ForwardIterator
, typename _Compare
>
1185 std::pair
<_ForwardIterator
, _ForwardIterator
> __brick_minmax_element(_ForwardIterator
, _ForwardIterator
, _Compare
,
1186 /* __is_vector = */ std::false_type
) noexcept
;
1188 template <typename _ForwardIterator
, typename _Compare
>
1189 std::pair
<_ForwardIterator
, _ForwardIterator
> __brick_minmax_element(_ForwardIterator
, _ForwardIterator
, _Compare
,
1190 /* __is_vector = */ std::true_type
) noexcept
;
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
;
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
);
1202 //------------------------------------------------------------------------
1204 //------------------------------------------------------------------------
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
;
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
;
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
;
1222 template <class _ExecutionPolicy
, class _RandomAccessIterator1
, class _RandomAccessIterator2
, class _Predicate
,
1224 std::pair
<_RandomAccessIterator1
, _RandomAccessIterator2
>
1225 __pattern_mismatch(_ExecutionPolicy
&&, _RandomAccessIterator1
, _RandomAccessIterator1
, _RandomAccessIterator2
,
1226 _RandomAccessIterator2
, _Predicate
, _IsVector
, /* is_parallel = */ std::true_type
) noexcept
;
1228 //------------------------------------------------------------------------
1229 // lexicographical_compare
1230 //------------------------------------------------------------------------
1232 template <class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
>
1233 bool __brick_lexicographical_compare(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1235 /* __is_vector = */ std::false_type
) noexcept
;
1237 template <class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
>
1238 bool __brick_lexicographical_compare(_ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
, _ForwardIterator2
,
1240 /* __is_vector = */ std::true_type
) noexcept
;
1242 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
, class _IsVector
>
1244 __pattern_lexicographical_compare(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1245 _ForwardIterator2
, _Compare
, _IsVector
, /* is_parallel = */ std::false_type
) noexcept
;
1247 template <class _ExecutionPolicy
, class _ForwardIterator1
, class _ForwardIterator2
, class _Compare
, class _IsVector
>
1249 __pattern_lexicographical_compare(_ExecutionPolicy
&&, _ForwardIterator1
, _ForwardIterator1
, _ForwardIterator2
,
1250 _ForwardIterator2
, _Compare
, _IsVector
, /* is_parallel = */ std::true_type
) noexcept
;
1252 } // namespace __internal
1253 } // namespace __pstl
1254 #endif /* _PSTL_ALGORITHM_FWD_H */