1 // <algorithm> parallel extensions -*- C++ -*-
3 // Copyright (C) 2007, 2008, 2009 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>
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
>
134 equal(_IIter1
, _IIter1
, _IIter2
);
136 template<typename _IIter1
, typename _IIter2
, typename Predicate
>
138 equal(_IIter1
, _IIter1
, _IIter2
, Predicate
);
140 template<typename _IIter
, typename _Tp
>
142 find(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::sequential_tag
);
144 template<typename _IIter
, typename _Tp
>
146 find(_IIter
, _IIter
, const _Tp
& val
);
148 template<typename _IIter
, typename _Tp
, typename _IterTag
>
150 find_switch(_IIter
, _IIter
, const _Tp
&, _IterTag
);
152 template<typename _RAIter
, typename _Tp
>
154 find_switch(_RAIter
, _RAIter
, const _Tp
&, random_access_iterator_tag
);
156 template<typename _IIter
, typename _Predicate
>
158 find_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::sequential_tag
);
160 template<typename _IIter
, typename _Predicate
>
162 find_if(_IIter
, _IIter
, _Predicate
);
164 template<typename _IIter
, typename _Predicate
, typename _IterTag
>
166 find_if_switch(_IIter
, _IIter
, _Predicate
, _IterTag
);
168 template<typename _RAIter
, typename _Predicate
>
170 find_if_switch(_RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
);
172 template<typename _IIter
, typename _FIter
>
174 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
,
175 __gnu_parallel::sequential_tag
);
177 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
179 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
180 __gnu_parallel::sequential_tag
);
182 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
184 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
);
186 template<typename _IIter
, typename _FIter
>
188 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
);
190 template<typename _IIter
, typename _FIter
,
191 typename _IterTag1
, typename _IterTag2
>
193 find_first_of_switch(_IIter
, _IIter
, _FIter
, _FIter
, _IterTag1
, _IterTag2
);
195 template<typename _RAIter
, typename _FIter
, typename _BiPredicate
,
198 find_first_of_switch(_RAIter
, _RAIter
, _FIter
, _FIter
, _BiPredicate
,
199 random_access_iterator_tag
, _IterTag
);
201 template<typename _IIter
, typename _FIter
, typename _BiPredicate
,
202 typename _IterTag1
, typename _IterTag2
>
204 find_first_of_switch(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
205 _IterTag1
, _IterTag2
);
208 template<typename _IIter
, typename _Function
>
210 for_each(_IIter
, _IIter
, _Function
);
212 template<typename _IIter
, typename _Function
>
214 for_each(_IIter
, _IIter
, _Function
, __gnu_parallel::sequential_tag
);
216 template<typename _Iterator
, typename _Function
>
218 for_each(_Iterator
, _Iterator
, _Function
, __gnu_parallel::_Parallelism
);
220 template<typename _IIter
, typename _Function
, typename _IterTag
>
222 for_each_switch(_IIter
, _IIter
, _Function
, _IterTag
);
224 template<typename _RAIter
, typename _Function
>
226 for_each_switch(_RAIter
, _RAIter
, _Function
, random_access_iterator_tag
,
227 __gnu_parallel::_Parallelism parallelism
228 = __gnu_parallel::parallel_balanced
);
231 template<typename _FIter
, typename _Generator
>
233 generate(_FIter
, _FIter
, _Generator
);
235 template<typename _FIter
, typename _Generator
>
237 generate(_FIter
, _FIter
, _Generator
, __gnu_parallel::sequential_tag
);
239 template<typename _FIter
, typename _Generator
>
241 generate(_FIter
, _FIter
, _Generator
, __gnu_parallel::_Parallelism
);
243 template<typename _FIter
, typename _Generator
, typename _IterTag
>
245 generate_switch(_FIter
, _FIter
, _Generator
, _IterTag
);
247 template<typename _RAIter
, typename _Generator
>
249 generate_switch(_RAIter
, _RAIter
, _Generator
, random_access_iterator_tag
,
250 __gnu_parallel::_Parallelism parallelism
251 = __gnu_parallel::parallel_balanced
);
253 template<typename _OIter
, typename _Size
, typename _Generator
>
255 generate_n(_OIter
, _Size
, _Generator
);
257 template<typename _OIter
, typename _Size
, typename _Generator
>
259 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::sequential_tag
);
261 template<typename _OIter
, typename _Size
, typename _Generator
>
263 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::_Parallelism
);
265 template<typename _OIter
, typename _Size
, typename _Generator
,
268 generate_n_switch(_OIter
, _Size
, _Generator
, _IterTag
);
270 template<typename _RAIter
, typename _Size
, typename _Generator
>
272 generate_n_switch(_RAIter
, _Size
, _Generator
, random_access_iterator_tag
,
273 __gnu_parallel::_Parallelism parallelism
274 = __gnu_parallel::parallel_balanced
);
276 template<typename _IIter1
, typename _IIter2
>
278 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
279 __gnu_parallel::sequential_tag
);
281 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
283 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
,
284 __gnu_parallel::sequential_tag
);
286 template<typename _IIter1
, typename _IIter2
>
288 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
290 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
292 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
);
294 template<typename _IIter1
, typename _IIter2
,
295 typename _Predicate
, typename _IterTag1
, typename _IterTag2
>
297 lexicographical_compare_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
298 _Predicate
, _IterTag1
, _IterTag2
);
300 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
302 lexicographical_compare_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
303 _Predicate
, random_access_iterator_tag
,
304 random_access_iterator_tag
);
307 template<typename _IIter1
, typename _IIter2
>
308 pair
<_IIter1
, _IIter2
>
309 mismatch(_IIter1
, _IIter1
, _IIter2
, __gnu_parallel::sequential_tag
);
311 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
312 pair
<_IIter1
, _IIter2
>
313 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
314 __gnu_parallel::sequential_tag
);
316 template<typename _IIter1
, typename _IIter2
>
317 pair
<_IIter1
, _IIter2
>
318 mismatch(_IIter1
, _IIter1
, _IIter2
);
320 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
321 pair
<_IIter1
, _IIter2
>
322 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
);
324 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
325 typename _IterTag1
, typename _IterTag2
>
326 pair
<_IIter1
, _IIter2
>
327 mismatch_switch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
328 _IterTag1
, _IterTag2
);
330 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
331 pair
<_RAIter1
, _RAIter2
>
332 mismatch_switch(_RAIter1
, _RAIter1
, _RAIter2
, _Predicate
,
333 random_access_iterator_tag
, random_access_iterator_tag
);
335 template<typename _FIter1
, typename _FIter2
>
337 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, __gnu_parallel::sequential_tag
);
339 template<typename _FIter1
, typename _FIter2
>
341 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
343 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
345 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
346 __gnu_parallel::sequential_tag
);
348 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
350 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
);
352 template<typename _RAIter1
, typename _RAIter2
>
354 search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
355 random_access_iterator_tag
, random_access_iterator_tag
);
357 template<typename _FIter1
, typename _FIter2
, typename _IterTag1
,
360 search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _IterTag1
, _IterTag2
);
362 template<typename _RAIter1
, typename _RAIter2
, typename _BiPredicate
>
364 search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _BiPredicate
,
365 random_access_iterator_tag
, random_access_iterator_tag
);
367 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
,
368 typename _IterTag1
, typename _IterTag2
>
370 search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
371 _IterTag1
, _IterTag2
);
373 template<typename _FIter
, typename _Integer
, typename _Tp
>
375 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&,
376 __gnu_parallel::sequential_tag
);
378 template<typename _FIter
, typename _Integer
, typename _Tp
,
379 typename _BiPredicate
>
381 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
,
382 __gnu_parallel::sequential_tag
);
384 template<typename _FIter
, typename _Integer
, typename _Tp
>
386 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&);
388 template<typename _FIter
, typename _Integer
, typename _Tp
,
389 typename _BiPredicate
>
391 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
);
393 template<typename _RAIter
, typename _Integer
, typename _Tp
,
394 typename _BiPredicate
>
396 search_n_switch(_RAIter
, _RAIter
, _Integer
, const _Tp
&,
397 _BiPredicate
, random_access_iterator_tag
);
399 template<typename _FIter
, typename _Integer
, typename _Tp
,
400 typename _BiPredicate
, typename _IterTag
>
402 search_n_switch(_FIter
, _FIter
, _Integer
, const _Tp
&,
403 _BiPredicate
, _IterTag
);
406 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
408 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
);
410 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
412 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
,
413 __gnu_parallel::sequential_tag
);
415 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
417 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
,
418 __gnu_parallel::_Parallelism
);
420 template<typename _IIter
, typename _OIter
, typename UnaryOperation
,
421 typename _IterTag1
, typename _IterTag2
>
423 transform1_switch(_IIter
, _IIter
, _OIter
, UnaryOperation
,
424 _IterTag1
, _IterTag2
);
427 template<typename _RAIIter
, typename _RAOIter
, typename UnaryOperation
>
429 transform1_switch(_RAIIter
, _RAIIter
, _RAOIter
, UnaryOperation
,
430 random_access_iterator_tag
, random_access_iterator_tag
,
431 __gnu_parallel::_Parallelism parallelism
432 = __gnu_parallel::parallel_balanced
);
435 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
436 typename _BiOperation
>
438 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
);
440 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
441 typename _BiOperation
>
443 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
444 __gnu_parallel::sequential_tag
);
446 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
447 typename _BiOperation
>
449 transform(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
450 __gnu_parallel::_Parallelism
);
452 template<typename _RAIter1
, typename _RAIter2
, typename _RAIter3
,
453 typename _BiOperation
>
455 transform2_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter3
, _BiOperation
,
456 random_access_iterator_tag
, random_access_iterator_tag
,
457 random_access_iterator_tag
,
458 __gnu_parallel::_Parallelism parallelism
459 = __gnu_parallel::parallel_balanced
);
461 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
462 typename _BiOperation
, typename _Tag1
,
463 typename _Tag2
, typename _Tag3
>
465 transform2_switch(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
466 _Tag1
, _Tag2
, _Tag3
);
469 template<typename _FIter
, typename _Tp
>
471 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&);
473 template<typename _FIter
, typename _Tp
>
475 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
476 __gnu_parallel::sequential_tag
);
478 template<typename _FIter
, typename _Tp
>
480 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
481 __gnu_parallel::_Parallelism
);
483 template<typename _FIter
, typename _Tp
, typename _IterTag
>
485 replace_switch(_FIter
, _FIter
, const _Tp
&, const _Tp
&, _IterTag
);
487 template<typename _RAIter
, typename _Tp
>
489 replace_switch(_RAIter
, _RAIter
, const _Tp
&, const _Tp
&,
490 random_access_iterator_tag
, __gnu_parallel::_Parallelism
);
493 template<typename _FIter
, typename _Predicate
, typename _Tp
>
495 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&);
497 template<typename _FIter
, typename _Predicate
, typename _Tp
>
499 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
500 __gnu_parallel::sequential_tag
);
502 template<typename _FIter
, typename _Predicate
, typename _Tp
>
504 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
505 __gnu_parallel::_Parallelism
);
507 template<typename _FIter
, typename _Predicate
, typename _Tp
,
510 replace_if_switch(_FIter
, _FIter
, _Predicate
, const _Tp
&, _IterTag
);
512 template<typename _RAIter
, typename _Predicate
, typename _Tp
>
514 replace_if_switch(_RAIter
, _RAIter
, _Predicate
, const _Tp
&,
515 random_access_iterator_tag
,
516 __gnu_parallel::_Parallelism
);
519 template<typename _FIter
>
521 max_element(_FIter
, _FIter
);
523 template<typename _FIter
>
525 max_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
527 template<typename _FIter
>
529 max_element(_FIter
, _FIter
, __gnu_parallel::_Parallelism
);
531 template<typename _FIter
, typename _Compare
>
533 max_element(_FIter
, _FIter
, _Compare
);
535 template<typename _FIter
, typename _Compare
>
537 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
539 template<typename _FIter
, typename _Compare
>
541 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
543 template<typename _FIter
, typename _Compare
, typename _IterTag
>
545 max_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
547 template<typename _RAIter
, typename _Compare
>
549 max_element_switch(_RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
550 __gnu_parallel::_Parallelism parallelism
551 = __gnu_parallel::parallel_balanced
);
554 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
556 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
557 __gnu_parallel::sequential_tag
);
559 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
562 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
563 __gnu_parallel::sequential_tag
);
565 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
568 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
570 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
572 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
574 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
575 typename _Compare
, typename _IterTag1
, typename _IterTag2
,
578 merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
579 _IterTag1
, _IterTag2
, _IterTag3
);
581 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
584 merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
585 random_access_iterator_tag
, random_access_iterator_tag
,
586 random_access_iterator_tag
);
589 template<typename _FIter
>
591 min_element(_FIter
, _FIter
);
593 template<typename _FIter
>
595 min_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
597 template<typename _FIter
>
599 min_element(_FIter
, _FIter
, __gnu_parallel::_Parallelism parallelism_tag
);
601 template<typename _FIter
, typename _Compare
>
603 min_element(_FIter
, _FIter
, _Compare
);
605 template<typename _FIter
, typename _Compare
>
607 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
609 template<typename _FIter
, typename _Compare
>
611 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
613 template<typename _FIter
, typename _Compare
, typename _IterTag
>
615 min_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
617 template<typename _RAIter
, typename _Compare
>
619 min_element_switch(_RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
620 __gnu_parallel::_Parallelism parallelism
621 = __gnu_parallel::parallel_balanced
);
623 template<typename _RAIter
>
625 nth_element(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
627 template<typename _RAIter
, typename _Compare
>
629 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
,
630 __gnu_parallel::sequential_tag
);
632 template<typename _RAIter
, typename _Compare
>
634 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
);
636 template<typename _RAIter
>
638 nth_element(_RAIter
, _RAIter
, _RAIter
);
640 template<typename _RAIter
, typename _Compare
>
642 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
,
643 __gnu_parallel::sequential_tag
);
645 template<typename _RAIter
>
647 partial_sort(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
649 template<typename _RAIter
, typename _Compare
>
651 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
);
653 template<typename _RAIter
>
655 partial_sort(_RAIter
, _RAIter
, _RAIter
);
657 template<typename _FIter
, typename Predicate
>
659 partition(_FIter
, _FIter
, Predicate
, __gnu_parallel::sequential_tag
);
661 template<typename _FIter
, typename Predicate
>
663 partition(_FIter
, _FIter
, Predicate
);
665 template<typename _FIter
, typename Predicate
, typename _IterTag
>
667 partition_switch(_FIter
, _FIter
, Predicate
, _IterTag
);
669 template<typename _RAIter
, typename Predicate
>
671 partition_switch(_RAIter
, _RAIter
, Predicate
, random_access_iterator_tag
);
673 template<typename _RAIter
>
675 random_shuffle(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
677 template<typename _RAIter
, typename _RandomNumberGenerator
>
679 random_shuffle(_RAIter
, _RAIter
, _RandomNumberGenerator
&,
680 __gnu_parallel::sequential_tag
);
682 template<typename _RAIter
>
684 random_shuffle(_RAIter
, _RAIter
);
686 template<typename _RAIter
, typename _RandomNumberGenerator
>
688 random_shuffle(_RAIter
, _RAIter
, _RandomNumberGenerator
&);
690 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
692 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
693 __gnu_parallel::sequential_tag
);
695 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
698 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, Predicate
,
699 __gnu_parallel::sequential_tag
);
701 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
703 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
705 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
708 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
710 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
711 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
714 set_union_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
715 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
717 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
720 set_union_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _Output_RAIter
,
721 _Predicate
, random_access_iterator_tag
,
722 random_access_iterator_tag
, random_access_iterator_tag
);
724 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
726 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
727 __gnu_parallel::sequential_tag
);
729 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
732 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
733 __gnu_parallel::sequential_tag
);
735 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
737 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
739 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
742 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
744 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
745 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
748 set_intersection_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
749 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
751 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
754 set_intersection_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
755 _Output_RAIter
, _Predicate
,
756 random_access_iterator_tag
,
757 random_access_iterator_tag
,
758 random_access_iterator_tag
);
760 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
762 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
763 __gnu_parallel::sequential_tag
);
765 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
768 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
769 _Predicate
, __gnu_parallel::sequential_tag
);
771 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
773 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
775 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
778 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
781 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
782 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
785 set_symmetric_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
786 _OIter
, _Predicate
, _IterTag1
, _IterTag2
,
789 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
792 set_symmetric_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
793 _Output_RAIter
, _Predicate
,
794 random_access_iterator_tag
,
795 random_access_iterator_tag
,
796 random_access_iterator_tag
);
799 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
801 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
802 __gnu_parallel::sequential_tag
);
804 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
807 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
808 __gnu_parallel::sequential_tag
);
810 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
812 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
814 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
817 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
819 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
820 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
823 set_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
824 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
826 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
829 set_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
830 _Output_RAIter
, _Predicate
,
831 random_access_iterator_tag
,
832 random_access_iterator_tag
,
833 random_access_iterator_tag
);
836 template<typename _RAIter
>
838 sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
840 template<typename _RAIter
, typename _Compare
>
842 sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
844 template<typename _RAIter
>
846 sort(_RAIter
, _RAIter
);
848 template<typename _RAIter
, typename _Compare
>
850 sort(_RAIter
, _RAIter
, _Compare
);
852 template<typename _RAIter
>
854 stable_sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
856 template<typename _RAIter
, typename _Compare
>
858 stable_sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
860 template<typename _RAIter
>
862 stable_sort(_RAIter
, _RAIter
);
864 template<typename _RAIter
, typename _Compare
>
866 stable_sort(_RAIter
, _RAIter
, _Compare
);
868 template<typename _IIter
, typename _OIter
>
870 unique_copy(_IIter
, _IIter
, _OIter
, __gnu_parallel::sequential_tag
);
872 template<typename _IIter
, typename _OIter
, typename _Predicate
>
874 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
,
875 __gnu_parallel::sequential_tag
);
877 template<typename _IIter
, typename _OIter
>
879 unique_copy(_IIter
, _IIter
, _OIter
);
881 template<typename _IIter
, typename _OIter
, typename _Predicate
>
883 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
);
885 template<typename _IIter
, typename _OIter
, typename _Predicate
,
886 typename _IterTag1
, typename _IterTag2
>
888 unique_copy_switch(_IIter
, _IIter
, _OIter
, _Predicate
,
889 _IterTag1
, _IterTag2
);
891 template<typename _RAIter
, typename _RandomAccess_OIter
, typename _Predicate
>
893 unique_copy_switch(_RAIter
, _RAIter
, _RandomAccess_OIter
, _Predicate
,
894 random_access_iterator_tag
, random_access_iterator_tag
);
895 } // end namespace __parallel
896 } // end namespace std
898 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */