libstdc++

parallel/algorithmfwd.h
Go to the documentation of this file.
1 // <algorithm> parallel extensions -*- C++ -*-
2
3 // Copyright (C) 2007-2013 Free Software Foundation, Inc.
4 //
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
9 // version.
10
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.
15
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.
19
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/>.
24
25 /** @file parallel/algorithmfwd.h
26 * This file is a GNU parallel extension to the Standard C++ Library.
27 */
28
29 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
30 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
31
32 #pragma GCC system_header
33
34 #include <parallel/tags.h>
35 #include <parallel/settings.h>
36
37 namespace std _GLIBCXX_VISIBILITY(default)
38 {
39 namespace __parallel
40 {
41 template<typename _FIter>
42 _FIter
43 adjacent_find(_FIter, _FIter);
44
45 template<typename _FIter>
46 _FIter
47 adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
48
49 template<typename _FIter, typename _IterTag>
50 _FIter
51 __adjacent_find_switch(_FIter, _FIter, _IterTag);
52
53 template<typename _RAIter>
54 _RAIter
55 __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
56
57
58 template<typename _FIter, typename _BiPredicate>
59 _FIter
60 adjacent_find(_FIter, _FIter, _BiPredicate);
61
62 template<typename _FIter, typename _BiPredicate>
63 _FIter
64 adjacent_find(_FIter, _FIter, _BiPredicate,
65 __gnu_parallel::sequential_tag);
66
67 template<typename _FIter, typename _BiPredicate, typename _IterTag>
68 _FIter
69 __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
70
71 template<typename _RAIter, typename _BiPredicate>
72 _RAIter
73 __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
74 random_access_iterator_tag);
75
76
77 template<typename _IIter, typename _Tp>
78 typename iterator_traits<_IIter>::difference_type
79 count(_IIter, _IIter, const _Tp&);
80
81 template<typename _IIter, typename _Tp>
82 typename iterator_traits<_IIter>::difference_type
83 count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
84
85 template<typename _IIter, typename _Tp>
86 typename iterator_traits<_IIter>::difference_type
87 count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
88
89 template<typename _IIter, typename _Tp, typename _IterTag>
90 typename iterator_traits<_IIter>::difference_type
91 __count_switch(_IIter, _IIter, const _Tp&, _IterTag);
92
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);
98
99
100 template<typename _IIter, typename _Predicate>
101 typename iterator_traits<_IIter>::difference_type
102 count_if(_IIter, _IIter, _Predicate);
103
104 template<typename _IIter, typename _Predicate>
105 typename iterator_traits<_IIter>::difference_type
106 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
107
108 template<typename _IIter, typename _Predicate>
109 typename iterator_traits<_IIter>::difference_type
110 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
111
112 template<typename _IIter, typename _Predicate, typename _IterTag>
113 typename iterator_traits<_IIter>::difference_type
114 __count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
115
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);
121
122 // algobase.h
123 template<typename _IIter1, typename _IIter2>
124 bool
125 equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
126
127 template<typename _IIter1, typename _IIter2, typename _Predicate>
128 bool
129 equal(_IIter1, _IIter1, _IIter2, _Predicate,
130 __gnu_parallel::sequential_tag);
131
132 template<typename _IIter1, typename _IIter2>
133 bool
134 equal(_IIter1, _IIter1, _IIter2);
135
136 template<typename _IIter1, typename _IIter2, typename _Predicate>
137 bool
138 equal(_IIter1, _IIter1, _IIter2, _Predicate);
139
140 template<typename _IIter, typename _Tp>
141 _IIter
142 find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
143
144 template<typename _IIter, typename _Tp>
145 _IIter
146 find(_IIter, _IIter, const _Tp& __val);
147
148 template<typename _IIter, typename _Tp, typename _IterTag>
149 _IIter
150 __find_switch(_IIter, _IIter, const _Tp&, _IterTag);
151
152 template<typename _RAIter, typename _Tp>
153 _RAIter
154 __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
155
156 template<typename _IIter, typename _Predicate>
157 _IIter
158 find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
159
160 template<typename _IIter, typename _Predicate>
161 _IIter
162 find_if(_IIter, _IIter, _Predicate);
163
164 template<typename _IIter, typename _Predicate, typename _IterTag>
165 _IIter
166 __find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
167
168 template<typename _RAIter, typename _Predicate>
169 _RAIter
170 __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
171
172 template<typename _IIter, typename _FIter>
173 _IIter
174 find_first_of(_IIter, _IIter, _FIter, _FIter,
175 __gnu_parallel::sequential_tag);
176
177 template<typename _IIter, typename _FIter, typename _BiPredicate>
178 _IIter
179 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
180 __gnu_parallel::sequential_tag);
181
182 template<typename _IIter, typename _FIter, typename _BiPredicate>
183 _IIter
184 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
185
186 template<typename _IIter, typename _FIter>
187 _IIter
188 find_first_of(_IIter, _IIter, _FIter, _FIter);
189
190 template<typename _IIter, typename _FIter,
191 typename _IterTag1, typename _IterTag2>
192 _IIter
193 __find_first_of_switch(
194 _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
195
196 template<typename _RAIter, typename _FIter, typename _BiPredicate,
197 typename _IterTag>
198 _RAIter
199 __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
200 random_access_iterator_tag, _IterTag);
201
202 template<typename _IIter, typename _FIter, typename _BiPredicate,
203 typename _IterTag1, typename _IterTag2>
204 _IIter
205 __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
206 _IterTag1, _IterTag2);
207
208
209 template<typename _IIter, typename _Function>
210 _Function
211 for_each(_IIter, _IIter, _Function);
212
213 template<typename _IIter, typename _Function>
214 _Function
215 for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
216
217 template<typename _Iterator, typename _Function>
218 _Function
219 for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
220
221 template<typename _IIter, typename _Function, typename _IterTag>
222 _Function
223 __for_each_switch(_IIter, _IIter, _Function, _IterTag);
224
225 template<typename _RAIter, typename _Function>
226 _Function
227 __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
228 __gnu_parallel::_Parallelism __parallelism
229 = __gnu_parallel::parallel_balanced);
230
231
232 template<typename _FIter, typename _Generator>
233 void
234 generate(_FIter, _FIter, _Generator);
235
236 template<typename _FIter, typename _Generator>
237 void
238 generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
239
240 template<typename _FIter, typename _Generator>
241 void
242 generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
243
244 template<typename _FIter, typename _Generator, typename _IterTag>
245 void
246 __generate_switch(_FIter, _FIter, _Generator, _IterTag);
247
248 template<typename _RAIter, typename _Generator>
249 void
250 __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
251 __gnu_parallel::_Parallelism __parallelism
252 = __gnu_parallel::parallel_balanced);
253
254 template<typename _OIter, typename _Size, typename _Generator>
255 _OIter
256 generate_n(_OIter, _Size, _Generator);
257
258 template<typename _OIter, typename _Size, typename _Generator>
259 _OIter
260 generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
261
262 template<typename _OIter, typename _Size, typename _Generator>
263 _OIter
264 generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
265
266 template<typename _OIter, typename _Size, typename _Generator,
267 typename _IterTag>
268 _OIter
269 __generate_n_switch(_OIter, _Size, _Generator, _IterTag);
270
271 template<typename _RAIter, typename _Size, typename _Generator>
272 _RAIter
273 __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
274 __gnu_parallel::_Parallelism __parallelism
275 = __gnu_parallel::parallel_balanced);
276
277 template<typename _IIter1, typename _IIter2>
278 bool
279 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
280 __gnu_parallel::sequential_tag);
281
282 template<typename _IIter1, typename _IIter2, typename _Predicate>
283 bool
284 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
285 __gnu_parallel::sequential_tag);
286
287 template<typename _IIter1, typename _IIter2>
288 bool
289 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
290
291 template<typename _IIter1, typename _IIter2, typename _Predicate>
292 bool
293 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
294
295 template<typename _IIter1, typename _IIter2,
296 typename _Predicate, typename _IterTag1, typename _IterTag2>
297 bool
298 __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
299 _Predicate, _IterTag1, _IterTag2);
300
301 template<typename _RAIter1, typename _RAIter2, typename _Predicate>
302 bool
303 __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
304 _Predicate, random_access_iterator_tag,
305 random_access_iterator_tag);
306
307 // algo.h
308 template<typename _IIter1, typename _IIter2>
309 pair<_IIter1, _IIter2>
310 mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
311
312 template<typename _IIter1, typename _IIter2, typename _Predicate>
313 pair<_IIter1, _IIter2>
314 mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
315 __gnu_parallel::sequential_tag);
316
317 template<typename _IIter1, typename _IIter2>
318 pair<_IIter1, _IIter2>
319 mismatch(_IIter1, _IIter1, _IIter2);
320
321 template<typename _IIter1, typename _IIter2, typename _Predicate>
322 pair<_IIter1, _IIter2>
323 mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
324
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);
330
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);
335
336 template<typename _FIter1, typename _FIter2>
337 _FIter1
338 search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
339
340 template<typename _FIter1, typename _FIter2>
341 _FIter1
342 search(_FIter1, _FIter1, _FIter2, _FIter2);
343
344 template<typename _FIter1, typename _FIter2, typename _BiPredicate>
345 _FIter1
346 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
347 __gnu_parallel::sequential_tag);
348
349 template<typename _FIter1, typename _FIter2, typename _BiPredicate>
350 _FIter1
351 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
352
353 template<typename _RAIter1, typename _RAIter2>
354 _RAIter1
355 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
356 random_access_iterator_tag, random_access_iterator_tag);
357
358 template<typename _FIter1, typename _FIter2, typename _IterTag1,
359 typename _IterTag2>
360 _FIter1
361 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
362
363 template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
364 _RAIter1
365 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
366 random_access_iterator_tag, random_access_iterator_tag);
367
368 template<typename _FIter1, typename _FIter2, typename _BiPredicate,
369 typename _IterTag1, typename _IterTag2>
370 _FIter1
371 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
372 _IterTag1, _IterTag2);
373
374 template<typename _FIter, typename _Integer, typename _Tp>
375 _FIter
376 search_n(_FIter, _FIter, _Integer, const _Tp&,
377 __gnu_parallel::sequential_tag);
378
379 template<typename _FIter, typename _Integer, typename _Tp,
380 typename _BiPredicate>
381 _FIter
382 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
383 __gnu_parallel::sequential_tag);
384
385 template<typename _FIter, typename _Integer, typename _Tp>
386 _FIter
387 search_n(_FIter, _FIter, _Integer, const _Tp&);
388
389 template<typename _FIter, typename _Integer, typename _Tp,
390 typename _BiPredicate>
391 _FIter
392 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
393
394 template<typename _RAIter, typename _Integer, typename _Tp,
395 typename _BiPredicate>
396 _RAIter
397 __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
398 _BiPredicate, random_access_iterator_tag);
399
400 template<typename _FIter, typename _Integer, typename _Tp,
401 typename _BiPredicate, typename _IterTag>
402 _FIter
403 __search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
404 _BiPredicate, _IterTag);
405
406
407 template<typename _IIter, typename _OIter, typename _UnaryOperation>
408 _OIter
409 transform(_IIter, _IIter, _OIter, _UnaryOperation);
410
411 template<typename _IIter, typename _OIter, typename _UnaryOperation>
412 _OIter
413 transform(_IIter, _IIter, _OIter, _UnaryOperation,
414 __gnu_parallel::sequential_tag);
415
416 template<typename _IIter, typename _OIter, typename _UnaryOperation>
417 _OIter
418 transform(_IIter, _IIter, _OIter, _UnaryOperation,
419 __gnu_parallel::_Parallelism);
420
421 template<typename _IIter, typename _OIter, typename _UnaryOperation,
422 typename _IterTag1, typename _IterTag2>
423 _OIter
424 __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation,
425 _IterTag1, _IterTag2);
426
427
428 template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation>
429 _RAOIter
430 __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation,
431 random_access_iterator_tag, random_access_iterator_tag,
432 __gnu_parallel::_Parallelism __parallelism
433 = __gnu_parallel::parallel_balanced);
434
435
436 template<typename _IIter1, typename _IIter2, typename _OIter,
437 typename _BiOperation>
438 _OIter
439 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
440
441 template<typename _IIter1, typename _IIter2, typename _OIter,
442 typename _BiOperation>
443 _OIter
444 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
445 __gnu_parallel::sequential_tag);
446
447 template<typename _IIter1, typename _IIter2, typename _OIter,
448 typename _BiOperation>
449 _OIter
450 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
451 __gnu_parallel::_Parallelism);
452
453 template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
454 typename _BiOperation>
455 _RAIter3
456 __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
457 random_access_iterator_tag, random_access_iterator_tag,
458 random_access_iterator_tag,
459 __gnu_parallel::_Parallelism __parallelism
460 = __gnu_parallel::parallel_balanced);
461
462 template<typename _IIter1, typename _IIter2, typename _OIter,
463 typename _BiOperation, typename _Tag1,
464 typename _Tag2, typename _Tag3>
465 _OIter
466 __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
467 _Tag1, _Tag2, _Tag3);
468
469
470 template<typename _FIter, typename _Tp>
471 void
472 replace(_FIter, _FIter, const _Tp&, const _Tp&);
473
474 template<typename _FIter, typename _Tp>
475 void
476 replace(_FIter, _FIter, const _Tp&, const _Tp&,
477 __gnu_parallel::sequential_tag);
478
479 template<typename _FIter, typename _Tp>
480 void
481 replace(_FIter, _FIter, const _Tp&, const _Tp&,
482 __gnu_parallel::_Parallelism);
483
484 template<typename _FIter, typename _Tp, typename _IterTag>
485 void
486 __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
487
488 template<typename _RAIter, typename _Tp>
489 void
490 __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
491 random_access_iterator_tag, __gnu_parallel::_Parallelism);
492
493
494 template<typename _FIter, typename _Predicate, typename _Tp>
495 void
496 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
497
498 template<typename _FIter, typename _Predicate, typename _Tp>
499 void
500 replace_if(_FIter, _FIter, _Predicate, const _Tp&,
501 __gnu_parallel::sequential_tag);
502
503 template<typename _FIter, typename _Predicate, typename _Tp>
504 void
505 replace_if(_FIter, _FIter, _Predicate, const _Tp&,
506 __gnu_parallel::_Parallelism);
507
508 template<typename _FIter, typename _Predicate, typename _Tp,
509 typename _IterTag>
510 void
511 __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
512
513 template<typename _RAIter, typename _Predicate, typename _Tp>
514 void
515 __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
516 random_access_iterator_tag,
517 __gnu_parallel::_Parallelism);
518
519
520 template<typename _FIter>
521 _FIter
522 max_element(_FIter, _FIter);
523
524 template<typename _FIter>
525 _FIter
526 max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
527
528 template<typename _FIter>
529 _FIter
530 max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
531
532 template<typename _FIter, typename _Compare>
533 _FIter
534 max_element(_FIter, _FIter, _Compare);
535
536 template<typename _FIter, typename _Compare>
537 _FIter
538 max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
539
540 template<typename _FIter, typename _Compare>
541 _FIter
542 max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
543
544 template<typename _FIter, typename _Compare, typename _IterTag>
545 _FIter
546 __max_element_switch(_FIter, _FIter, _Compare, _IterTag);
547
548 template<typename _RAIter, typename _Compare>
549 _RAIter
550 __max_element_switch(
551 _RAIter, _RAIter, _Compare, random_access_iterator_tag,
552 __gnu_parallel::_Parallelism __parallelism
553 = __gnu_parallel::parallel_balanced);
554
555
556 template<typename _IIter1, typename _IIter2, typename _OIter>
557 _OIter
558 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
559 __gnu_parallel::sequential_tag);
560
561 template<typename _IIter1, typename _IIter2, typename _OIter,
562 typename _Compare>
563 _OIter
564 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
565 __gnu_parallel::sequential_tag);
566
567 template<typename _IIter1, typename _IIter2, typename _OIter,
568 typename _Compare>
569 _OIter
570 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
571
572 template<typename _IIter1, typename _IIter2, typename _OIter>
573 _OIter
574 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
575
576 template<typename _IIter1, typename _IIter2, typename _OIter,
577 typename _Compare, typename _IterTag1, typename _IterTag2,
578 typename _IterTag3>
579 _OIter
580 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
581 _IterTag1, _IterTag2, _IterTag3);
582
583 template<typename _IIter1, typename _IIter2, typename _OIter,
584 typename _Compare>
585 _OIter
586 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
587 random_access_iterator_tag, random_access_iterator_tag,
588 random_access_iterator_tag);
589
590
591 template<typename _FIter>
592 _FIter
593 min_element(_FIter, _FIter);
594
595 template<typename _FIter>
596 _FIter
597 min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
598
599 template<typename _FIter>
600 _FIter
601 min_element(_FIter, _FIter,
602 __gnu_parallel::_Parallelism __parallelism_tag);
603
604 template<typename _FIter, typename _Compare>
605 _FIter
606 min_element(_FIter, _FIter, _Compare);
607
608 template<typename _FIter, typename _Compare>
609 _FIter
610 min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
611
612 template<typename _FIter, typename _Compare>
613 _FIter
614 min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
615
616 template<typename _FIter, typename _Compare, typename _IterTag>
617 _FIter
618 __min_element_switch(_FIter, _FIter, _Compare, _IterTag);
619
620 template<typename _RAIter, typename _Compare>
621 _RAIter
622 __min_element_switch(
623 _RAIter, _RAIter, _Compare, random_access_iterator_tag,
624 __gnu_parallel::_Parallelism __parallelism
625 = __gnu_parallel::parallel_balanced);
626
627 template<typename _RAIter>
628 void
629 nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
630
631 template<typename _RAIter, typename _Compare>
632 void
633 nth_element(_RAIter, _RAIter, _RAIter, _Compare,
634 __gnu_parallel::sequential_tag);
635
636 template<typename _RAIter, typename _Compare>
637 void
638 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
639
640 template<typename _RAIter>
641 void
642 nth_element(_RAIter, _RAIter, _RAIter);
643
644 template<typename _RAIter, typename _Compare>
645 void
646 partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
647 __gnu_parallel::sequential_tag);
648
649 template<typename _RAIter>
650 void
651 partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
652
653 template<typename _RAIter, typename _Compare>
654 void
655 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
656
657 template<typename _RAIter>
658 void
659 partial_sort(_RAIter, _RAIter, _RAIter);
660
661 template<typename _FIter, typename _Predicate>
662 _FIter
663 partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag);
664
665 template<typename _FIter, typename _Predicate>
666 _FIter
667 partition(_FIter, _FIter, _Predicate);
668
669 template<typename _FIter, typename _Predicate, typename _IterTag>
670 _FIter
671 __partition_switch(_FIter, _FIter, _Predicate, _IterTag);
672
673 template<typename _RAIter, typename _Predicate>
674 _RAIter
675 __partition_switch(
676 _RAIter, _RAIter, _Predicate, random_access_iterator_tag);
677
678 template<typename _RAIter>
679 void
680 random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
681
682 template<typename _RAIter, typename _RandomNumberGenerator>
683 void
684 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
685 __gnu_parallel::sequential_tag);
686
687 template<typename _RAIter>
688 void
689 random_shuffle(_RAIter, _RAIter);
690
691 template<typename _RAIter, typename _RandomNumberGenerator>
692 void
693 random_shuffle(_RAIter, _RAIter,
694 #if __cplusplus >= 201103L
695 _RandomNumberGenerator&&);
696 #else
697 _RandomNumberGenerator&);
698 #endif
699
700 template<typename _IIter1, typename _IIter2, typename _OIter>
701 _OIter
702 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
703 __gnu_parallel::sequential_tag);
704
705 template<typename _IIter1, typename _IIter2, typename _OIter,
706 typename _Predicate>
707 _OIter
708 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
709 __gnu_parallel::sequential_tag);
710
711 template<typename _IIter1, typename _IIter2, typename _OIter>
712 _OIter
713 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
714
715 template<typename _IIter1, typename _IIter2, typename _OIter,
716 typename _Predicate>
717 _OIter
718 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
719
720 template<typename _IIter1, typename _IIter2, typename _Predicate,
721 typename _OIter, typename _IterTag1, typename _IterTag2,
722 typename _IterTag3>
723 _OIter
724 __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
725 _Predicate, _IterTag1, _IterTag2, _IterTag3);
726
727 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
728 typename _Predicate>
729 _Output_RAIter
730 __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
731 _Predicate, random_access_iterator_tag,
732 random_access_iterator_tag, random_access_iterator_tag);
733
734 template<typename _IIter1, typename _IIter2, typename _OIter>
735 _OIter
736 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
737 __gnu_parallel::sequential_tag);
738
739 template<typename _IIter1, typename _IIter2, typename _OIter,
740 typename _Predicate>
741 _OIter
742 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
743 __gnu_parallel::sequential_tag);
744
745 template<typename _IIter1, typename _IIter2, typename _OIter>
746 _OIter
747 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
748
749 template<typename _IIter1, typename _IIter2, typename _OIter,
750 typename _Predicate>
751 _OIter
752 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
753
754 template<typename _IIter1, typename _IIter2, typename _Predicate,
755 typename _OIter, typename _IterTag1, typename _IterTag2,
756 typename _IterTag3>
757 _OIter
758 __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
759 _Predicate, _IterTag1, _IterTag2, _IterTag3);
760
761 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
762 typename _Predicate>
763 _Output_RAIter
764 __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
765 _Output_RAIter, _Predicate,
766 random_access_iterator_tag,
767 random_access_iterator_tag,
768 random_access_iterator_tag);
769
770 template<typename _IIter1, typename _IIter2, typename _OIter>
771 _OIter
772 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
773 __gnu_parallel::sequential_tag);
774
775 template<typename _IIter1, typename _IIter2, typename _OIter,
776 typename _Predicate>
777 _OIter
778 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
779 _Predicate, __gnu_parallel::sequential_tag);
780
781 template<typename _IIter1, typename _IIter2, typename _OIter>
782 _OIter
783 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
784
785 template<typename _IIter1, typename _IIter2, typename _OIter,
786 typename _Predicate>
787 _OIter
788 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
789 _Predicate);
790
791 template<typename _IIter1, typename _IIter2, typename _Predicate,
792 typename _OIter, typename _IterTag1, typename _IterTag2,
793 typename _IterTag3>
794 _OIter
795 __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
796 _OIter, _Predicate, _IterTag1, _IterTag2,
797 _IterTag3);
798
799 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
800 typename _Predicate>
801 _Output_RAIter
802 __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
803 _Output_RAIter, _Predicate,
804 random_access_iterator_tag,
805 random_access_iterator_tag,
806 random_access_iterator_tag);
807
808
809 template<typename _IIter1, typename _IIter2, typename _OIter>
810 _OIter
811 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
812 __gnu_parallel::sequential_tag);
813
814 template<typename _IIter1, typename _IIter2, typename _OIter,
815 typename _Predicate>
816 _OIter
817 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
818 __gnu_parallel::sequential_tag);
819
820 template<typename _IIter1, typename _IIter2, typename _OIter>
821 _OIter
822 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
823
824 template<typename _IIter1, typename _IIter2, typename _OIter,
825 typename _Predicate>
826 _OIter
827 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
828
829 template<typename _IIter1, typename _IIter2, typename _Predicate,
830 typename _OIter, typename _IterTag1, typename _IterTag2,
831 typename _IterTag3>
832 _OIter
833 __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
834 _Predicate, _IterTag1, _IterTag2, _IterTag3);
835
836 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
837 typename _Predicate>
838 _Output_RAIter
839 __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
840 _Output_RAIter, _Predicate,
841 random_access_iterator_tag,
842 random_access_iterator_tag,
843 random_access_iterator_tag);
844
845
846 template<typename _RAIter>
847 void
848 sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
849
850 template<typename _RAIter, typename _Compare>
851 void
852 sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
853
854 template<typename _RAIter>
855 void
856 sort(_RAIter, _RAIter);
857
858 template<typename _RAIter, typename _Compare>
859 void
860 sort(_RAIter, _RAIter, _Compare);
861
862 template<typename _RAIter>
863 void
864 stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
865
866 template<typename _RAIter, typename _Compare>
867 void
868 stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
869
870 template<typename _RAIter>
871 void
872 stable_sort(_RAIter, _RAIter);
873
874 template<typename _RAIter, typename _Compare>
875 void
876 stable_sort(_RAIter, _RAIter, _Compare);
877
878 template<typename _IIter, typename _OIter>
879 _OIter
880 unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
881
882 template<typename _IIter, typename _OIter, typename _Predicate>
883 _OIter
884 unique_copy(_IIter, _IIter, _OIter, _Predicate,
885 __gnu_parallel::sequential_tag);
886
887 template<typename _IIter, typename _OIter>
888 _OIter
889 unique_copy(_IIter, _IIter, _OIter);
890
891 template<typename _IIter, typename _OIter, typename _Predicate>
892 _OIter
893 unique_copy(_IIter, _IIter, _OIter, _Predicate);
894
895 template<typename _IIter, typename _OIter, typename _Predicate,
896 typename _IterTag1, typename _IterTag2>
897 _OIter
898 __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
899 _IterTag1, _IterTag2);
900
901 template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
902 _RandomAccess_OIter
903 __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
904 random_access_iterator_tag, random_access_iterator_tag);
905 } // end namespace __parallel
906 } // end namespace std
907
908 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */