1 // <algorithm> parallel extensions -*- C++ -*-
3 // Copyright (C) 2007, 2008 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 2, 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 // You should have received a copy of the GNU General Public License
17 // along with this library; see the file COPYING. If not, write to
18 // the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
19 // MA 02111-1307, USA.
21 // As a special exception, you may use this file as part of a free
22 // software library without restriction. Specifically, if other files
23 // instantiate templates or use macros or inline functions from this
24 // file, or you compile this file and link it with other files to
25 // produce an executable, this file does not by itself cause the
26 // resulting executable to be covered by the GNU General Public
27 // License. This exception does not however invalidate any other
28 // reasons why the executable file might be covered by the GNU General
31 /** @file parallel/algorithmfwd.h
32 * This file is a GNU parallel extension to the Standard C++ Library.
35 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
36 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
38 #pragma GCC system_header
40 #include <parallel/tags.h>
41 #include <parallel/settings.h>
47 template<typename _FIter
>
49 adjacent_find(_FIter
, _FIter
);
51 template<typename _FIter
>
53 adjacent_find(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
55 template<typename _FIter
, typename _IterTag
>
57 adjacent_find_switch(_FIter
, _FIter
, _IterTag
);
59 template<typename _RAIter
>
61 adjacent_find_switch(_RAIter
, _RAIter
, random_access_iterator_tag
);
64 template<typename _FIter
, typename _BiPredicate
>
66 adjacent_find(_FIter
, _FIter
, _BiPredicate
);
68 template<typename _FIter
, typename _BiPredicate
>
70 adjacent_find(_FIter
, _FIter
, _BiPredicate
,
71 __gnu_parallel::sequential_tag
);
73 template<typename _FIter
, typename _BiPredicate
, typename _IterTag
>
75 adjacent_find_switch(_FIter
, _FIter
, _BiPredicate
, _IterTag
);
77 template<typename _RAIter
, typename _BiPredicate
>
79 adjacent_find_switch(_RAIter
, _RAIter
, _BiPredicate
,
80 random_access_iterator_tag
);
83 template<typename _IIter
, typename _Tp
>
84 typename iterator_traits
<_IIter
>::difference_type
85 count(_IIter
, _IIter
, const _Tp
&);
87 template<typename _IIter
, typename _Tp
>
88 typename iterator_traits
<_IIter
>::difference_type
89 count(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::sequential_tag
);
91 template<typename _IIter
, typename _Tp
>
92 typename iterator_traits
<_IIter
>::difference_type
93 count(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::_Parallelism
);
95 template<typename _IIter
, typename _Tp
, typename _IterTag
>
96 typename iterator_traits
<_IIter
>::difference_type
97 count_switch(_IIter
, _IIter
, const _Tp
&, _IterTag
);
99 template<typename _RAIter
, typename _Tp
>
100 typename iterator_traits
<_RAIter
>::difference_type
101 count_switch(_RAIter
, _RAIter
, const _Tp
&, random_access_iterator_tag
,
102 __gnu_parallel::_Parallelism
);
105 template<typename _IIter
, typename _Predicate
>
106 typename iterator_traits
<_IIter
>::difference_type
107 count_if(_IIter
, _IIter
, _Predicate
);
109 template<typename _IIter
, typename _Predicate
>
110 typename iterator_traits
<_IIter
>::difference_type
111 count_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::sequential_tag
);
113 template<typename _IIter
, typename _Predicate
>
114 typename iterator_traits
<_IIter
>::difference_type
115 count_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::_Parallelism
);
117 template<typename _IIter
, typename _Predicate
, typename _IterTag
>
118 typename iterator_traits
<_IIter
>::difference_type
119 count_if_switch(_IIter
, _IIter
, _Predicate
, _IterTag
);
121 template<typename _RAIter
, typename _Predicate
>
122 typename iterator_traits
<_RAIter
>::difference_type
123 count_if_switch(_RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
,
124 __gnu_parallel::_Parallelism
);
127 template<typename _IIter1
, typename _IIter2
>
129 equal(_IIter1
, _IIter1
, _IIter2
, __gnu_parallel::sequential_tag
);
131 template<typename _IIter1
, typename _IIter2
, typename Predicate
>
133 equal(_IIter1
, _IIter1
, _IIter2
, Predicate
,
134 __gnu_parallel::sequential_tag
);
136 template<typename _IIter1
, typename _IIter2
>
138 equal(_IIter1
, _IIter1
, _IIter2
);
140 template<typename _IIter1
, typename _IIter2
, typename Predicate
>
142 equal(_IIter1
, _IIter1
, _IIter2
, Predicate
);
144 template<typename _IIter
, typename _Tp
>
146 find(_IIter
, _IIter
, const _Tp
&, __gnu_parallel::sequential_tag
);
148 template<typename _IIter
, typename _Tp
>
150 find(_IIter
, _IIter
, const _Tp
& val
);
152 template<typename _IIter
, typename _Tp
, typename _IterTag
>
154 find_switch(_IIter
, _IIter
, const _Tp
&, _IterTag
);
156 template<typename _RAIter
, typename _Tp
>
158 find_switch(_RAIter
, _RAIter
, const _Tp
&, random_access_iterator_tag
);
160 template<typename _IIter
, typename _Predicate
>
162 find_if(_IIter
, _IIter
, _Predicate
, __gnu_parallel::sequential_tag
);
164 template<typename _IIter
, typename _Predicate
>
166 find_if(_IIter
, _IIter
, _Predicate
);
168 template<typename _IIter
, typename _Predicate
, typename _IterTag
>
170 find_if_switch(_IIter
, _IIter
, _Predicate
, _IterTag
);
172 template<typename _RAIter
, typename _Predicate
>
174 find_if_switch(_RAIter
, _RAIter
, _Predicate
, random_access_iterator_tag
);
176 template<typename _IIter
, typename _FIter
>
178 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
,
179 __gnu_parallel::sequential_tag
);
181 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
183 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
184 __gnu_parallel::sequential_tag
);
186 template<typename _IIter
, typename _FIter
, typename _BiPredicate
>
188 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
);
190 template<typename _IIter
, typename _FIter
>
192 find_first_of(_IIter
, _IIter
, _FIter
, _FIter
);
194 template<typename _IIter
, typename _FIter
,
195 typename _IterTag1
, typename _IterTag2
>
197 find_first_of_switch(_IIter
, _IIter
, _FIter
, _FIter
, _IterTag1
, _IterTag2
);
199 template<typename _RAIter
, typename _FIter
, typename _BiPredicate
,
202 find_first_of_switch(_RAIter
, _RAIter
, _FIter
, _FIter
, _BiPredicate
,
203 random_access_iterator_tag
, _IterTag
);
205 template<typename _IIter
, typename _FIter
, typename _BiPredicate
,
206 typename _IterTag1
, typename _IterTag2
>
208 find_first_of_switch(_IIter
, _IIter
, _FIter
, _FIter
, _BiPredicate
,
209 _IterTag1
, _IterTag2
);
212 template<typename _IIter
, typename _Function
>
214 for_each(_IIter
, _IIter
, _Function
);
216 template<typename _IIter
, typename _Function
>
218 for_each(_IIter
, _IIter
, _Function
, __gnu_parallel::sequential_tag
);
220 template<typename _Iterator
, typename _Function
>
222 for_each(_Iterator
, _Iterator
, _Function
, __gnu_parallel::_Parallelism
);
224 template<typename _IIter
, typename _Function
, typename _IterTag
>
226 for_each_switch(_IIter
, _IIter
, _Function
, _IterTag
);
228 template<typename _RAIter
, typename _Function
>
230 for_each_switch(_RAIter
, _RAIter
, _Function
, random_access_iterator_tag
,
231 __gnu_parallel::_Parallelism
);
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
);
255 template<typename _OIter
, typename _Size
, typename _Generator
>
257 generate_n(_OIter
, _Size
, _Generator
);
259 template<typename _OIter
, typename _Size
, typename _Generator
>
261 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::sequential_tag
);
263 template<typename _OIter
, typename _Size
, typename _Generator
>
265 generate_n(_OIter
, _Size
, _Generator
, __gnu_parallel::_Parallelism
);
267 template<typename _OIter
, typename _Size
, typename _Generator
,
270 generate_n_switch(_OIter
, _Size
, _Generator
, _IterTag
);
272 template<typename _RAIter
, typename _Size
, typename _Generator
>
274 generate_n_switch(_RAIter
, _Size
, _Generator
, random_access_iterator_tag
,
275 __gnu_parallel::_Parallelism
);
277 template<typename _IIter1
, typename _IIter2
>
279 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
280 __gnu_parallel::sequential_tag
);
282 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
284 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
,
285 __gnu_parallel::sequential_tag
);
287 template<typename _IIter1
, typename _IIter2
>
289 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
);
291 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
293 lexicographical_compare(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _Predicate
);
295 template<typename _IIter1
, typename _IIter2
,
296 typename _Predicate
, typename _IterTag1
, typename _IterTag2
>
298 lexicographical_compare_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
299 _Predicate
, _IterTag1
, _IterTag2
);
301 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
303 lexicographical_compare_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
304 _Predicate
, random_access_iterator_tag
,
305 random_access_iterator_tag
);
308 template<typename _IIter1
, typename _IIter2
>
309 pair
<_IIter1
, _IIter2
>
310 mismatch(_IIter1
, _IIter1
, _IIter2
, __gnu_parallel::sequential_tag
);
312 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
313 pair
<_IIter1
, _IIter2
>
314 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
315 __gnu_parallel::sequential_tag
);
317 template<typename _IIter1
, typename _IIter2
>
318 pair
<_IIter1
, _IIter2
>
319 mismatch(_IIter1
, _IIter1
, _IIter2
);
321 template<typename _IIter1
, typename _IIter2
, typename _Predicate
>
322 pair
<_IIter1
, _IIter2
>
323 mismatch(_IIter1
, _IIter1
, _IIter2
, _Predicate
);
325 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
326 typename _IterTag1
, typename _IterTag2
>
327 pair
<_IIter1
, _IIter2
>
328 mismatch_switch(_IIter1
, _IIter1
, _IIter2
, _Predicate
,
329 _IterTag1
, _IterTag2
);
331 template<typename _RAIter1
, typename _RAIter2
, typename _Predicate
>
332 pair
<_RAIter1
, _RAIter2
>
333 mismatch_switch(_RAIter1
, _RAIter1
, _RAIter2
, _Predicate
,
334 random_access_iterator_tag
, random_access_iterator_tag
);
336 template<typename _FIter1
, typename _FIter2
>
338 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, __gnu_parallel::sequential_tag
);
340 template<typename _FIter1
, typename _FIter2
>
342 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
);
344 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
346 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
347 __gnu_parallel::sequential_tag
);
349 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
>
351 search(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
);
353 template<typename _RAIter1
, typename _RAIter2
>
355 search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
356 random_access_iterator_tag
, random_access_iterator_tag
);
358 template<typename _FIter1
, typename _FIter2
, typename _IterTag1
,
361 search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _IterTag1
, _IterTag2
);
363 template<typename _RAIter1
, typename _RAIter2
, typename _BiPredicate
>
365 search_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _BiPredicate
,
366 random_access_iterator_tag
, random_access_iterator_tag
);
368 template<typename _FIter1
, typename _FIter2
, typename _BiPredicate
,
369 typename _IterTag1
, typename _IterTag2
>
371 search_switch(_FIter1
, _FIter1
, _FIter2
, _FIter2
, _BiPredicate
,
372 _IterTag1
, _IterTag2
);
374 template<typename _FIter
, typename _Integer
, typename _Tp
>
376 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&,
377 __gnu_parallel::sequential_tag
);
379 template<typename _FIter
, typename _Integer
, typename _Tp
,
380 typename _BiPredicate
>
382 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
,
383 __gnu_parallel::sequential_tag
);
385 template<typename _FIter
, typename _Integer
, typename _Tp
>
387 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&);
389 template<typename _FIter
, typename _Integer
, typename _Tp
,
390 typename _BiPredicate
>
392 search_n(_FIter
, _FIter
, _Integer
, const _Tp
&, _BiPredicate
);
394 template<typename _RAIter
, typename _Integer
, typename _Tp
,
395 typename _BiPredicate
>
397 search_n_switch(_RAIter
, _RAIter
, _Integer
, const _Tp
&,
398 _BiPredicate
, random_access_iterator_tag
);
400 template<typename _FIter
, typename _Integer
, typename _Tp
,
401 typename _BiPredicate
, typename _IterTag
>
403 search_n_switch(_FIter
, _FIter
, _Integer
, const _Tp
&,
404 _BiPredicate
, _IterTag
);
407 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
409 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
);
411 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
413 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
,
414 __gnu_parallel::sequential_tag
);
416 template<typename _IIter
, typename _OIter
, typename UnaryOperation
>
418 transform(_IIter
, _IIter
, _OIter
, UnaryOperation
,
419 __gnu_parallel::_Parallelism
);
421 template<typename _IIter
, typename _OIter
, typename UnaryOperation
,
422 typename _IterTag1
, typename _IterTag2
>
424 transform1_switch(_IIter
, _IIter
, _OIter
, UnaryOperation
,
425 _IterTag1
, _IterTag2
);
428 template<typename _RAIIter
, typename _RAOIter
, typename UnaryOperation
>
430 transform1_switch(_RAIIter
, _RAIIter
, _RAOIter
, UnaryOperation
,
431 random_access_iterator_tag
, random_access_iterator_tag
,
432 __gnu_parallel::_Parallelism
);
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
);
460 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
461 typename _BiOperation
, typename _Tag1
,
462 typename _Tag2
, typename _Tag3
>
464 transform2_switch(_IIter1
, _IIter1
, _IIter2
, _OIter
, _BiOperation
,
465 _Tag1
, _Tag2
, _Tag3
);
468 template<typename _FIter
, typename _Tp
>
470 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&);
472 template<typename _FIter
, typename _Tp
>
474 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
475 __gnu_parallel::sequential_tag
);
477 template<typename _FIter
, typename _Tp
>
479 replace(_FIter
, _FIter
, const _Tp
&, const _Tp
&,
480 __gnu_parallel::_Parallelism
);
482 template<typename _FIter
, typename _Tp
, typename _IterTag
>
484 replace_switch(_FIter
, _FIter
, const _Tp
&, const _Tp
&, _IterTag
);
486 template<typename _RAIter
, typename _Tp
>
488 replace_switch(_RAIter
, _RAIter
, const _Tp
&, const _Tp
&,
489 random_access_iterator_tag
, __gnu_parallel::_Parallelism
);
492 template<typename _FIter
, typename _Predicate
, typename _Tp
>
494 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&);
496 template<typename _FIter
, typename _Predicate
, typename _Tp
>
498 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
499 __gnu_parallel::sequential_tag
);
501 template<typename _FIter
, typename _Predicate
, typename _Tp
>
503 replace_if(_FIter
, _FIter
, _Predicate
, const _Tp
&,
504 __gnu_parallel::_Parallelism
);
506 template<typename _FIter
, typename _Predicate
, typename _Tp
,
509 replace_if_switch(_FIter
, _FIter
, _Predicate
, const _Tp
&, _IterTag
);
511 template<typename _RAIter
, typename _Predicate
, typename _Tp
>
513 replace_if_switch(_RAIter
, _RAIter
, _Predicate
, const _Tp
&,
514 random_access_iterator_tag
,
515 __gnu_parallel::_Parallelism
);
518 template<typename _FIter
>
520 max_element(_FIter
, _FIter
);
522 template<typename _FIter
>
524 max_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
526 template<typename _FIter
>
528 max_element(_FIter
, _FIter
, __gnu_parallel::_Parallelism
);
530 template<typename _FIter
, typename _Compare
>
532 max_element(_FIter
, _FIter
, _Compare
);
534 template<typename _FIter
, typename _Compare
>
536 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
538 template<typename _FIter
, typename _Compare
>
540 max_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
542 template<typename _FIter
, typename _Compare
, typename _IterTag
>
544 max_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
546 template<typename _RAIter
, typename _Compare
>
548 max_element_switch(_RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
549 __gnu_parallel::_Parallelism
);
552 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
554 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
555 __gnu_parallel::sequential_tag
);
557 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
560 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
561 __gnu_parallel::sequential_tag
);
563 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
566 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
);
568 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
570 merge(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
572 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
573 typename _Compare
, typename _IterTag1
, typename _IterTag2
,
576 merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
577 _IterTag1
, _IterTag2
, _IterTag3
);
579 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
582 merge_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Compare
,
583 random_access_iterator_tag
, random_access_iterator_tag
,
584 random_access_iterator_tag
);
587 template<typename _FIter
>
589 min_element(_FIter
, _FIter
);
591 template<typename _FIter
>
593 min_element(_FIter
, _FIter
, __gnu_parallel::sequential_tag
);
595 template<typename _FIter
>
597 min_element(_FIter
, _FIter
, __gnu_parallel::_Parallelism parallelism_tag
);
599 template<typename _FIter
, typename _Compare
>
601 min_element(_FIter
, _FIter
, _Compare
);
603 template<typename _FIter
, typename _Compare
>
605 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::sequential_tag
);
607 template<typename _FIter
, typename _Compare
>
609 min_element(_FIter
, _FIter
, _Compare
, __gnu_parallel::_Parallelism
);
611 template<typename _FIter
, typename _Compare
, typename _IterTag
>
613 min_element_switch(_FIter
, _FIter
, _Compare
, _IterTag
);
615 template<typename _RAIter
, typename _Compare
>
617 min_element_switch(_RAIter
, _RAIter
, _Compare
, random_access_iterator_tag
,
618 __gnu_parallel::_Parallelism
);
620 template<typename _RAIter
>
622 nth_element(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
624 template<typename _RAIter
, typename _Compare
>
626 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
,
627 __gnu_parallel::sequential_tag
);
629 template<typename _RAIter
, typename _Compare
>
631 nth_element(_RAIter
, _RAIter
, _RAIter
, _Compare
);
633 template<typename _RAIter
>
635 nth_element(_RAIter
, _RAIter
, _RAIter
);
637 template<typename _RAIter
, typename _Compare
>
639 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
,
640 __gnu_parallel::sequential_tag
);
642 template<typename _RAIter
>
644 partial_sort(_RAIter
, _RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
646 template<typename _RAIter
, typename _Compare
>
648 partial_sort(_RAIter
, _RAIter
, _RAIter
, _Compare
);
650 template<typename _RAIter
>
652 partial_sort(_RAIter
, _RAIter
, _RAIter
);
654 template<typename _FIter
, typename Predicate
>
656 partition(_FIter
, _FIter
, Predicate
, __gnu_parallel::sequential_tag
);
658 template<typename _FIter
, typename Predicate
>
660 partition(_FIter
, _FIter
, Predicate
);
662 template<typename _FIter
, typename Predicate
, typename _IterTag
>
664 partition_switch(_FIter
, _FIter
, Predicate
, _IterTag
);
666 template<typename _RAIter
, typename Predicate
>
668 partition_switch(_RAIter
, _RAIter
, Predicate
, random_access_iterator_tag
);
670 template<typename _RAIter
>
672 random_shuffle(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
674 template<typename _RAIter
, typename _RandomNumberGenerator
>
676 random_shuffle(_RAIter
, _RAIter
, _RandomNumberGenerator
&,
677 __gnu_parallel::sequential_tag
);
679 template<typename _RAIter
>
681 random_shuffle(_RAIter
, _RAIter
);
683 template<typename _RAIter
, typename _RandomNumberGenerator
>
685 random_shuffle(_RAIter
, _RAIter
, _RandomNumberGenerator
&);
687 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
689 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
690 __gnu_parallel::sequential_tag
);
692 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
695 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, Predicate
,
696 __gnu_parallel::sequential_tag
);
698 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
700 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
702 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
705 set_union(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
707 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
708 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
711 set_union_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
712 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
714 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
717 set_union_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
, _Output_RAIter
,
718 _Predicate
, random_access_iterator_tag
,
719 random_access_iterator_tag
, random_access_iterator_tag
);
721 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
723 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
724 __gnu_parallel::sequential_tag
);
726 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
729 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
730 __gnu_parallel::sequential_tag
);
732 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
734 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
736 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
739 set_intersection(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
741 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
742 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
745 set_intersection_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
746 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
748 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
751 set_intersection_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
752 _Output_RAIter
, _Predicate
,
753 random_access_iterator_tag
,
754 random_access_iterator_tag
,
755 random_access_iterator_tag
);
757 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
759 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
760 __gnu_parallel::sequential_tag
);
762 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
765 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
766 _Predicate
, __gnu_parallel::sequential_tag
);
768 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
770 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
772 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
775 set_symmetric_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
778 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
779 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
782 set_symmetric_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
,
783 _OIter
, _Predicate
, _IterTag1
, _IterTag2
,
786 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
789 set_symmetric_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
790 _Output_RAIter
, _Predicate
,
791 random_access_iterator_tag
,
792 random_access_iterator_tag
,
793 random_access_iterator_tag
);
796 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
798 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
799 __gnu_parallel::sequential_tag
);
801 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
804 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
,
805 __gnu_parallel::sequential_tag
);
807 template<typename _IIter1
, typename _IIter2
, typename _OIter
>
809 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
);
811 template<typename _IIter1
, typename _IIter2
, typename _OIter
,
814 set_difference(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
, _Predicate
);
816 template<typename _IIter1
, typename _IIter2
, typename _Predicate
,
817 typename _OIter
, typename _IterTag1
, typename _IterTag2
,
820 set_difference_switch(_IIter1
, _IIter1
, _IIter2
, _IIter2
, _OIter
,
821 _Predicate
, _IterTag1
, _IterTag2
, _IterTag3
);
823 template<typename _RAIter1
, typename _RAIter2
, typename _Output_RAIter
,
826 set_difference_switch(_RAIter1
, _RAIter1
, _RAIter2
, _RAIter2
,
827 _Output_RAIter
, _Predicate
,
828 random_access_iterator_tag
,
829 random_access_iterator_tag
,
830 random_access_iterator_tag
);
833 template<typename _RAIter
>
835 sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
837 template<typename _RAIter
, typename _Compare
>
839 sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
841 template<typename _RAIter
>
843 sort(_RAIter
, _RAIter
);
845 template<typename _RAIter
, typename _Compare
>
847 sort(_RAIter
, _RAIter
, _Compare
);
849 template<typename _RAIter
>
851 stable_sort(_RAIter
, _RAIter
, __gnu_parallel::sequential_tag
);
853 template<typename _RAIter
, typename _Compare
>
855 stable_sort(_RAIter
, _RAIter
, _Compare
, __gnu_parallel::sequential_tag
);
857 template<typename _RAIter
>
859 stable_sort(_RAIter
, _RAIter
);
861 template<typename _RAIter
, typename _Compare
>
863 stable_sort(_RAIter
, _RAIter
, _Compare
);
865 template<typename _IIter
, typename _OIter
>
867 unique_copy(_IIter
, _IIter
, _OIter
, __gnu_parallel::sequential_tag
);
869 template<typename _IIter
, typename _OIter
, typename _Predicate
>
871 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
,
872 __gnu_parallel::sequential_tag
);
874 template<typename _IIter
, typename _OIter
>
876 unique_copy(_IIter
, _IIter
, _OIter
);
878 template<typename _IIter
, typename _OIter
, typename _Predicate
>
880 unique_copy(_IIter
, _IIter
, _OIter
, _Predicate
);
882 template<typename _IIter
, typename _OIter
, typename _Predicate
,
883 typename _IterTag1
, typename _IterTag2
>
885 unique_copy_switch(_IIter
, _IIter
, _OIter
, _Predicate
,
886 _IterTag1
, _IterTag2
);
888 template<typename _RAIter
, typename _RandomAccess_OIter
, typename _Predicate
>
890 unique_copy_switch(_RAIter
, _RAIter
, _RandomAccess_OIter
, _Predicate
,
891 random_access_iterator_tag
, random_access_iterator_tag
);
892 } // end namespace __parallel
893 } // end namespace std