• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2013.11/arm-none-eabi/include/c++/4.8.1/parallel/
1// <parallel/algorithm> Forward declarations -*- 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
37namespace std _GLIBCXX_VISIBILITY(default)
38{
39namespace __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 */
909