1 // <parallel/algorithm> Forward declarations -*- C++ -*-
3 // Copyright (C) 2007-2023 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the terms
7 // of the GNU General Public License as published by the Free Software
8 // Foundation; either version 3, or (at your option) any later
11 // This library is distributed in the hope that it will be useful, but
12 // WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // General Public License for more details.
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 // <http://www.gnu.org/licenses/>.
25 /** @file parallel/algorithmfwd.h
26 * This file is a GNU parallel extension to the Standard C++ Library.
29 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
30 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
32 #pragma GCC system_header
34 #include <parallel/tags.h>
35 #include <parallel/settings.h>
37 namespace std
_GLIBCXX_VISIBILITY(default)
41 template<typename _FIter
>
43 adjacent_find(_FIter
, _FIter
);
45 template<typename _FIter
>
47 adjacent_find(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
49 template<typename _FIter
, typename _IterTag
>
51 __adjacent_find_switch(_FIter
, _FIter
, _IterTag
);
53 template<typename _RAIter
>
55 __adjacent_find_switch(_RAIter
, _RAIter
, random_access_iterator_tag
);
58 template<typename _FIter
, typename _BiPredicate
>
60 adjacent_find(_FIter
, _FIter
, _BiPredicate
);
62 template<typename _FIter
, typename _BiPredicate
>
64 adjacent_find(_FIter
, _FIter
, _BiPredicate
,
65 __gnu_parallel::sequential_tag
);
67 template<typename _FIter
, typename _BiPredicate
, typename _IterTag
>
69 __adjacent_find_switch(_FIter
, _FIter
, _BiPredicate
, _IterTag
);
71 template<typename _RAIter
, typename _BiPredicate
>
73 __adjacent_find_switch(_RAIter
, _RAIter
, _BiPredicate
,
74 random_access_iterator_tag
);
77 template<typename _IIter
, typename _Tp
>
78 typename iterator_traits
<_IIter
>::difference_type
79 count(_IIter
, _IIter
, const _Tp
&);
81 template<typename _IIter
, typename _Tp
>
82 typename iterator_traits
<_IIter
>::difference_type
83 count(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::sequential_tag
);
85 template<typename _IIter
, typename _Tp
>
86 typename iterator_traits
<_IIter
>::difference_type
87 count(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::_Parallelism
);
89 template<typename _IIter
, typename _Tp
, typename _IterTag
>
90 typename iterator_traits
<_IIter
>::difference_type
91 __count_switch(_IIter
, _IIter
, const _Tp
&, _IterTag
);
93 template<typename _RAIter
, typename _Tp
>
94 typename iterator_traits
<_RAIter
>::difference_type
95 __count_switch(_RAIter
, _RAIter
, const _Tp
&, random_access_iterator_tag
,
96 __gnu_parallel::_Parallelism __parallelism
97 = __gnu_parallel::parallel_unbalanced
);
100 template<typename _IIter
, typename _Predicate
>
101 typename iterator_traits
<_IIter
>::difference_type
102 count_if(_IIter
, _IIter
, _Predicate
);
104 template<typename _IIter
, typename _Predicate
>
105 typename iterator_traits
<_IIter
>::difference_type
106 count_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::sequential_tag
);
108 template<typename _IIter
, typename _Predicate
>
109 typename iterator_traits
<_IIter
>::difference_type
110 count_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::_Parallelism
);
112 template<typename _IIter
, typename _Predicate
, typename _IterTag
>
113 typename iterator_traits
<_IIter
>::difference_type
114 __count_if_switch(_IIter
, _IIter
, _Predicate
, _IterTag
);
116 template<typename _RAIter
, typename _Predicate
>
117 typename iterator_traits
<_RAIter
>::difference_type
118 __count_if_switch(_RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
,
119 __gnu_parallel::_Parallelism __parallelism
120 = __gnu_parallel::parallel_unbalanced
);
123 template<typename _IIter1
, typename _IIter2
>
125 equal(_IIter1
, _IIter1
, _IIter2
, __gnu_parallel::sequential_tag
);
127 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
129 equal(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
130 __gnu_parallel::sequential_tag
);
132 template<typename _IIter1
, typename _IIter2
>
135 equal(_IIter1
, _IIter1
, _IIter2
);
137 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
140 equal(_IIter1
, _IIter1
, _IIter2
, _Predicate
);
142 template<typename _IIter
, typename _Tp
>
144 find(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::sequential_tag
);
146 template<typename _IIter
, typename _Tp
>
148 find(_IIter
, _IIter
, const _Tp
& __val
);
150 template<typename _IIter
, typename _Tp
, typename _IterTag
>
152 __find_switch(_IIter
, _IIter
, const _Tp
&, _IterTag
);
154 template<typename _RAIter
, typename _Tp
>
156 __find_switch(_RAIter
, _RAIter
, const _Tp
&, random_access_iterator_tag
);
158 template<typename _IIter
, typename _Predicate
>
160 find_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::sequential_tag
);
162 template<typename _IIter
, typename _Predicate
>
164 find_if(_IIter
, _IIter
, _Predicate
);
166 template<typename _IIter
, typename _Predicate
, typename _IterTag
>
168 __find_if_switch(_IIter
, _IIter
, _Predicate
, _IterTag
);
170 template<typename _RAIter
, typename _Predicate
>
172 __find_if_switch(_RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
);
174 template<typename _IIter
, typename _FIter
>
176 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
,
177 __gnu_parallel::sequential_tag
);
179 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
181 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
182 __gnu_parallel::sequential_tag
);
184 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
186 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
);
188 template<typename _IIter
, typename _FIter
>
190 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
);
192 template<typename _IIter
, typename _FIter
,
193 typename _IterTag1
, typename _IterTag2
>
195 __find_first_of_switch(
196 _IIter
, _IIter
, _FIter
, _FIter
, _IterTag1
, _IterTag2
);
198 template<typename _RAIter
, typename _FIter
, typename _BiPredicate
,
201 __find_first_of_switch(_RAIter
, _RAIter
, _FIter
, _FIter
, _BiPredicate
,
202 random_access_iterator_tag
, _IterTag
);
204 template<typename _IIter
, typename _FIter
, typename _BiPredicate
,
205 typename _IterTag1
, typename _IterTag2
>
207 __find_first_of_switch(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
208 _IterTag1
, _IterTag2
);
211 template<typename _IIter
, typename _Function
>
213 for_each(_IIter
, _IIter
, _Function
);
215 template<typename _IIter
, typename _Function
>
217 for_each(_IIter
, _IIter
, _Function
, __gnu_parallel::sequential_tag
);
219 template<typename _Iterator
, typename _Function
>
221 for_each(_Iterator
, _Iterator
, _Function
, __gnu_parallel::_Parallelism
);
223 template<typename _IIter
, typename _Function
, typename _IterTag
>
225 __for_each_switch(_IIter
, _IIter
, _Function
, _IterTag
);
227 template<typename _RAIter
, typename _Function
>
229 __for_each_switch(_RAIter
, _RAIter
, _Function
, random_access_iterator_tag
,
230 __gnu_parallel::_Parallelism __parallelism
231 = __gnu_parallel::parallel_balanced
);
234 template<typename _FIter
, typename _Generator
>
236 generate(_FIter
, _FIter
, _Generator
);
238 template<typename _FIter
, typename _Generator
>
240 generate(_FIter
, _FIter
, _Generator
, __gnu_parallel::sequential_tag
);
242 template<typename _FIter
, typename _Generator
>
244 generate(_FIter
, _FIter
, _Generator
, __gnu_parallel::_Parallelism
);
246 template<typename _FIter
, typename _Generator
, typename _IterTag
>
248 __generate_switch(_FIter
, _FIter
, _Generator
, _IterTag
);
250 template<typename _RAIter
, typename _Generator
>
252 __generate_switch(_RAIter
, _RAIter
, _Generator
, random_access_iterator_tag
,
253 __gnu_parallel::_Parallelism __parallelism
254 = __gnu_parallel::parallel_balanced
);
256 template<typename _OIter
, typename _Size
, typename _Generator
>
258 generate_n(_OIter
, _Size
, _Generator
);
260 template<typename _OIter
, typename _Size
, typename _Generator
>
262 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::sequential_tag
);
264 template<typename _OIter
, typename _Size
, typename _Generator
>
266 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::_Parallelism
);
268 template<typename _OIter
, typename _Size
, typename _Generator
,
271 __generate_n_switch(_OIter
, _Size
, _Generator
, _IterTag
);
273 template<typename _RAIter
, typename _Size
, typename _Generator
>
275 __generate_n_switch(_RAIter
, _Size
, _Generator
, random_access_iterator_tag
,
276 __gnu_parallel::_Parallelism __parallelism
277 = __gnu_parallel::parallel_balanced
);
279 template<typename _IIter1
, typename _IIter2
>
281 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
282 __gnu_parallel::sequential_tag
);
284 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
286 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
,
287 __gnu_parallel::sequential_tag
);
289 template<typename _IIter1
, typename _IIter2
>
292 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
294 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
297 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
);
299 template<typename _IIter1
, typename _IIter2
,
300 typename _Predicate
, typename _IterTag1
, typename _IterTag2
>
302 __lexicographical_compare_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
303 _Predicate
, _IterTag1
, _IterTag2
);
305 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
307 __lexicographical_compare_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
308 _Predicate
, random_access_iterator_tag
,
309 random_access_iterator_tag
);
312 template<typename _IIter1
, typename _IIter2
>
313 pair
<_IIter1
, _IIter2
>
314 mismatch(_IIter1
, _IIter1
, _IIter2
, __gnu_parallel::sequential_tag
);
316 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
317 pair
<_IIter1
, _IIter2
>
318 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
319 __gnu_parallel::sequential_tag
);
321 template<typename _IIter1
, typename _IIter2
>
322 pair
<_IIter1
, _IIter2
>
323 mismatch(_IIter1
, _IIter1
, _IIter2
);
325 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
326 pair
<_IIter1
, _IIter2
>
327 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
);
329 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
330 typename _IterTag1
, typename _IterTag2
>
331 pair
<_IIter1
, _IIter2
>
332 __mismatch_switch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
333 _IterTag1
, _IterTag2
);
335 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
336 pair
<_RAIter1
, _RAIter2
>
337 __mismatch_switch(_RAIter1
, _RAIter1
, _RAIter2
, _Predicate
,
338 random_access_iterator_tag
, random_access_iterator_tag
);
340 template<typename _FIter1
, typename _FIter2
>
342 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, __gnu_parallel::sequential_tag
);
344 template<typename _FIter1
, typename _FIter2
>
346 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
348 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
350 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
351 __gnu_parallel::sequential_tag
);
353 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
355 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
);
357 template<typename _RAIter1
, typename _RAIter2
>
359 __search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
360 random_access_iterator_tag
, random_access_iterator_tag
);
362 template<typename _FIter1
, typename _FIter2
, typename _IterTag1
,
365 __search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _IterTag1
, _IterTag2
);
367 template<typename _RAIter1
, typename _RAIter2
, typename _BiPredicate
>
369 __search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _BiPredicate
,
370 random_access_iterator_tag
, random_access_iterator_tag
);
372 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
,
373 typename _IterTag1
, typename _IterTag2
>
375 __search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
376 _IterTag1
, _IterTag2
);
378 template<typename _FIter
, typename _Integer
, typename _Tp
>
380 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&,
381 __gnu_parallel::sequential_tag
);
383 template<typename _FIter
, typename _Integer
, typename _Tp
,
384 typename _BiPredicate
>
386 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
,
387 __gnu_parallel::sequential_tag
);
389 template<typename _FIter
, typename _Integer
, typename _Tp
>
391 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&);
393 template<typename _FIter
, typename _Integer
, typename _Tp
,
394 typename _BiPredicate
>
396 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
);
398 template<typename _RAIter
, typename _Integer
, typename _Tp
,
399 typename _BiPredicate
>
401 __search_n_switch(_RAIter
, _RAIter
, _Integer
, const _Tp
&,
402 _BiPredicate
, random_access_iterator_tag
);
404 template<typename _FIter
, typename _Integer
, typename _Tp
,
405 typename _BiPredicate
, typename _IterTag
>
407 __search_n_switch(_FIter
, _FIter
, _Integer
, const _Tp
&,
408 _BiPredicate
, _IterTag
);
411 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
>
413 transform(_IIter
, _IIter
, _OIter
, _UnaryOperation
);
415 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
>
417 transform(_IIter
, _IIter
, _OIter
, _UnaryOperation
,
418 __gnu_parallel::sequential_tag
);
420 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
>
422 transform(_IIter
, _IIter
, _OIter
, _UnaryOperation
,
423 __gnu_parallel::_Parallelism
);
425 template<typename _IIter
, typename _OIter
, typename _UnaryOperation
,
426 typename _IterTag1
, typename _IterTag2
>
428 __transform1_switch(_IIter
, _IIter
, _OIter
, _UnaryOperation
,
429 _IterTag1
, _IterTag2
);
432 template<typename _RAIIter
, typename _RAOIter
, typename _UnaryOperation
>
434 __transform1_switch(_RAIIter
, _RAIIter
, _RAOIter
, _UnaryOperation
,
435 random_access_iterator_tag
, random_access_iterator_tag
,
436 __gnu_parallel::_Parallelism __parallelism
437 = __gnu_parallel::parallel_balanced
);
440 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
441 typename _BiOperation
>
443 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
);
445 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
446 typename _BiOperation
>
448 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
449 __gnu_parallel::sequential_tag
);
451 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
452 typename _BiOperation
>
454 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
455 __gnu_parallel::_Parallelism
);
457 template<typename _RAIter1
, typename _RAIter2
, typename _RAIter3
,
458 typename _BiOperation
>
460 __transform2_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter3
, _BiOperation
,
461 random_access_iterator_tag
, random_access_iterator_tag
,
462 random_access_iterator_tag
,
463 __gnu_parallel::_Parallelism __parallelism
464 = __gnu_parallel::parallel_balanced
);
466 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
467 typename _BiOperation
, typename _Tag1
,
468 typename _Tag2
, typename _Tag3
>
470 __transform2_switch(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
471 _Tag1
, _Tag2
, _Tag3
);
474 template<typename _FIter
, typename _Tp
>
476 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&);
478 template<typename _FIter
, typename _Tp
>
480 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
481 __gnu_parallel::sequential_tag
);
483 template<typename _FIter
, typename _Tp
>
485 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
486 __gnu_parallel::_Parallelism
);
488 template<typename _FIter
, typename _Tp
, typename _IterTag
>
490 __replace_switch(_FIter
, _FIter
, const _Tp
&, const _Tp
&, _IterTag
);
492 template<typename _RAIter
, typename _Tp
>
494 __replace_switch(_RAIter
, _RAIter
, const _Tp
&, const _Tp
&,
495 random_access_iterator_tag
, __gnu_parallel::_Parallelism
);
498 template<typename _FIter
, typename _Predicate
, typename _Tp
>
500 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&);
502 template<typename _FIter
, typename _Predicate
, typename _Tp
>
504 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
505 __gnu_parallel::sequential_tag
);
507 template<typename _FIter
, typename _Predicate
, typename _Tp
>
509 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
510 __gnu_parallel::_Parallelism
);
512 template<typename _FIter
, typename _Predicate
, typename _Tp
,
515 __replace_if_switch(_FIter
, _FIter
, _Predicate
, const _Tp
&, _IterTag
);
517 template<typename _RAIter
, typename _Predicate
, typename _Tp
>
519 __replace_if_switch(_RAIter
, _RAIter
, _Predicate
, const _Tp
&,
520 random_access_iterator_tag
,
521 __gnu_parallel::_Parallelism
);
524 template<typename _FIter
>
526 max_element(_FIter
, _FIter
);
528 template<typename _FIter
>
530 max_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
532 template<typename _FIter
>
534 max_element(_FIter
, _FIter
, __gnu_parallel::_Parallelism
);
536 template<typename _FIter
, typename _Compare
>
538 max_element(_FIter
, _FIter
, _Compare
);
540 template<typename _FIter
, typename _Compare
>
542 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
544 template<typename _FIter
, typename _Compare
>
546 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
548 template<typename _FIter
, typename _Compare
, typename _IterTag
>
550 __max_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
552 template<typename _RAIter
, typename _Compare
>
554 __max_element_switch(
555 _RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
556 __gnu_parallel::_Parallelism __parallelism
557 = __gnu_parallel::parallel_balanced
);
560 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
562 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
563 __gnu_parallel::sequential_tag
);
565 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
568 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
569 __gnu_parallel::sequential_tag
);
571 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
574 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
576 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
578 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
580 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
581 typename _Compare
, typename _IterTag1
, typename _IterTag2
,
584 __merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
585 _IterTag1
, _IterTag2
, _IterTag3
);
587 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
590 __merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
591 random_access_iterator_tag
, random_access_iterator_tag
,
592 random_access_iterator_tag
);
595 template<typename _FIter
>
597 min_element(_FIter
, _FIter
);
599 template<typename _FIter
>
601 min_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
603 template<typename _FIter
>
605 min_element(_FIter
, _FIter
,
606 __gnu_parallel::_Parallelism __parallelism_tag
);
608 template<typename _FIter
, typename _Compare
>
610 min_element(_FIter
, _FIter
, _Compare
);
612 template<typename _FIter
, typename _Compare
>
614 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
616 template<typename _FIter
, typename _Compare
>
618 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
620 template<typename _FIter
, typename _Compare
, typename _IterTag
>
622 __min_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
624 template<typename _RAIter
, typename _Compare
>
626 __min_element_switch(
627 _RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
628 __gnu_parallel::_Parallelism __parallelism
629 = __gnu_parallel::parallel_balanced
);
631 template<typename _RAIter
>
633 nth_element(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
635 template<typename _RAIter
, typename _Compare
>
637 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
,
638 __gnu_parallel::sequential_tag
);
640 template<typename _RAIter
, typename _Compare
>
642 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
);
644 template<typename _RAIter
>
646 nth_element(_RAIter
, _RAIter
, _RAIter
);
648 template<typename _RAIter
, typename _Compare
>
650 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
,
651 __gnu_parallel::sequential_tag
);
653 template<typename _RAIter
>
655 partial_sort(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
657 template<typename _RAIter
, typename _Compare
>
659 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
);
661 template<typename _RAIter
>
663 partial_sort(_RAIter
, _RAIter
, _RAIter
);
665 template<typename _FIter
, typename _Predicate
>
667 partition(_FIter
, _FIter
, _Predicate
, __gnu_parallel::sequential_tag
);
669 template<typename _FIter
, typename _Predicate
>
671 partition(_FIter
, _FIter
, _Predicate
);
673 template<typename _FIter
, typename _Predicate
, typename _IterTag
>
675 __partition_switch(_FIter
, _FIter
, _Predicate
, _IterTag
);
677 template<typename _RAIter
, typename _Predicate
>
680 _RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
);
682 template<typename _RAIter
>
684 random_shuffle(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
686 template<typename _RAIter
, typename _RandomNumberGenerator
>
688 random_shuffle(_RAIter
, _RAIter
, _RandomNumberGenerator
&,
689 __gnu_parallel::sequential_tag
);
691 template<typename _RAIter
>
693 random_shuffle(_RAIter
, _RAIter
);
695 template<typename _RAIter
, typename _RandomNumberGenerator
>
697 random_shuffle(_RAIter
, _RAIter
,
698 #if __cplusplus >= 201103L
699 _RandomNumberGenerator
&&);
701 _RandomNumberGenerator
&);
704 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
706 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
707 __gnu_parallel::sequential_tag
);
709 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
712 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
713 __gnu_parallel::sequential_tag
);
715 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
717 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
719 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
722 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
724 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
725 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
728 __set_union_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
729 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
731 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
734 __set_union_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _Output_RAIter
,
735 _Predicate
, random_access_iterator_tag
,
736 random_access_iterator_tag
, random_access_iterator_tag
);
738 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
740 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
741 __gnu_parallel::sequential_tag
);
743 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
746 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
747 __gnu_parallel::sequential_tag
);
749 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
751 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
753 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
756 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
758 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
759 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
762 __set_intersection_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
763 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
765 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
768 __set_intersection_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
769 _Output_RAIter
, _Predicate
,
770 random_access_iterator_tag
,
771 random_access_iterator_tag
,
772 random_access_iterator_tag
);
774 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
776 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
777 __gnu_parallel::sequential_tag
);
779 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
782 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
783 _Predicate
, __gnu_parallel::sequential_tag
);
785 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
787 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
789 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
792 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
795 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
796 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
799 __set_symmetric_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
800 _OIter
, _Predicate
, _IterTag1
, _IterTag2
,
803 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
806 __set_symmetric_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
807 _Output_RAIter
, _Predicate
,
808 random_access_iterator_tag
,
809 random_access_iterator_tag
,
810 random_access_iterator_tag
);
813 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
815 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
816 __gnu_parallel::sequential_tag
);
818 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
821 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
822 __gnu_parallel::sequential_tag
);
824 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
826 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
828 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
831 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
833 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
834 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
837 __set_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
838 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
840 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
843 __set_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
844 _Output_RAIter
, _Predicate
,
845 random_access_iterator_tag
,
846 random_access_iterator_tag
,
847 random_access_iterator_tag
);
850 template<typename _RAIter
>
852 sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
854 template<typename _RAIter
, typename _Compare
>
856 sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
858 template<typename _RAIter
>
860 sort(_RAIter
, _RAIter
);
862 template<typename _RAIter
, typename _Compare
>
864 sort(_RAIter
, _RAIter
, _Compare
);
866 template<typename _RAIter
>
868 stable_sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
870 template<typename _RAIter
, typename _Compare
>
872 stable_sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
874 template<typename _RAIter
>
876 stable_sort(_RAIter
, _RAIter
);
878 template<typename _RAIter
, typename _Compare
>
880 stable_sort(_RAIter
, _RAIter
, _Compare
);
882 template<typename _IIter
, typename _OIter
>
884 unique_copy(_IIter
, _IIter
, _OIter
, __gnu_parallel::sequential_tag
);
886 template<typename _IIter
, typename _OIter
, typename _Predicate
>
888 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
,
889 __gnu_parallel::sequential_tag
);
891 template<typename _IIter
, typename _OIter
>
893 unique_copy(_IIter
, _IIter
, _OIter
);
895 template<typename _IIter
, typename _OIter
, typename _Predicate
>
897 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
);
899 template<typename _IIter
, typename _OIter
, typename _Predicate
,
900 typename _IterTag1
, typename _IterTag2
>
902 __unique_copy_switch(_IIter
, _IIter
, _OIter
, _Predicate
,
903 _IterTag1
, _IterTag2
);
905 template<typename _RAIter
, typename _RandomAccess_OIter
, typename _Predicate
>
907 __unique_copy_switch(_RAIter
, _RAIter
, _RandomAccess_OIter
, _Predicate
,
908 random_access_iterator_tag
, random_access_iterator_tag
);
909 } // end namespace __parallel
910 } // end namespace std
912 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */