# parallel/algorithmfwd.h

Go to the documentation of this file.

    00001 // <algorithm> parallel extensions -*- C++ -*-
    00002
    00003 // Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
    00004 //
    00005 // This file is part of the GNU ISO C++ Library.  This library is free
    00006 // software; you can redistribute it and/or modify it under the terms
    00007 // of the GNU General Public License as published by the Free Software
    00008 // Foundation; either version 3, or (at your option) any later
    00009 // version.
    00010
    00011 // This library is distributed in the hope that it will be useful, but
    00012 // WITHOUT ANY WARRANTY; without even the implied warranty of
    00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00014 // General Public License for more details.
    00015
    00016 // Under Section 7 of GPL version 3, you are granted additional
    00017 // permissions described in the GCC Runtime Library Exception, version
    00018 // 3.1, as published by the Free Software Foundation.
    00019
    00020 // You should have received a copy of the GNU General Public License and
    00021 // a copy of the GCC Runtime Library Exception along with this program;
    00022 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    00023 // <http://www.gnu.org/licenses/>.
    00024
    00025 /** @file parallel/algorithmfwd.h
    00026  *  This file is a GNU parallel extension to the Standard C++ Library.
    00027  */
    00028
    00029 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
    00030 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
    00031
    00032 #pragma GCC system_header
    00033
    00034 #include <parallel/tags.h>
    00035 #include <parallel/settings.h>
    00036
    00037 namespace std
    00038 {
    00039 namespace __parallel
    00040 {
    00041   template<typename _FIter>
    00042     _FIter
    00043     adjacent_find(_FIter, _FIter);
    00044
    00045   template<typename _FIter>
    00046     _FIter
    00047     adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
    00048
    00049   template<typename _FIter, typename _IterTag>
    00050     _FIter
    00051     adjacent_find_switch(_FIter, _FIter, _IterTag);
    00052
    00053   template<typename _RAIter>
    00054     _RAIter
    00055     adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
    00056
    00057
    00058   template<typename _FIter, typename _BiPredicate>
    00059     _FIter
    00060     adjacent_find(_FIter, _FIter, _BiPredicate);
    00061
    00062   template<typename _FIter, typename _BiPredicate>
    00063     _FIter
    00064     adjacent_find(_FIter, _FIter, _BiPredicate,
    00065           __gnu_parallel::sequential_tag);
    00066
    00067   template<typename _FIter, typename _BiPredicate, typename _IterTag>
    00068     _FIter
    00069     adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
    00070
    00071   template<typename _RAIter, typename _BiPredicate>
    00072     _RAIter
    00073     adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
    00074              random_access_iterator_tag);
    00075
    00076
    00077   template<typename _IIter, typename _Tp>
    00078     typename iterator_traits<_IIter>::difference_type
    00079     count(_IIter, _IIter, const _Tp&);
    00080
    00081   template<typename _IIter, typename _Tp>
    00082     typename iterator_traits<_IIter>::difference_type
    00083     count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
    00084
    00085   template<typename _IIter, typename _Tp>
    00086     typename iterator_traits<_IIter>::difference_type
    00087     count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
    00088
    00089   template<typename _IIter, typename _Tp, typename _IterTag>
    00090     typename iterator_traits<_IIter>::difference_type
    00091     count_switch(_IIter, _IIter, const _Tp&, _IterTag);
    00092
    00093   template<typename _RAIter, typename _Tp>
    00094     typename iterator_traits<_RAIter>::difference_type
    00095     count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag,
    00096          __gnu_parallel::_Parallelism parallelism
    00097          = __gnu_parallel::parallel_unbalanced);
    00098
    00099
    00100   template<typename _IIter, typename _Predicate>
    00101     typename iterator_traits<_IIter>::difference_type
    00102     count_if(_IIter, _IIter, _Predicate);
    00103
    00104   template<typename _IIter, typename _Predicate>
    00105     typename iterator_traits<_IIter>::difference_type
    00106     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
    00107
    00108   template<typename _IIter, typename _Predicate>
    00109     typename iterator_traits<_IIter>::difference_type
    00110     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
    00111
    00112   template<typename _IIter, typename _Predicate, typename _IterTag>
    00113     typename iterator_traits<_IIter>::difference_type
    00114     count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
    00115
    00116   template<typename _RAIter, typename _Predicate>
    00117     typename iterator_traits<_RAIter>::difference_type
    00118     count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag,
    00119             __gnu_parallel::_Parallelism parallelism
    00120             = __gnu_parallel::parallel_unbalanced);
    00121
    00122   // algobase.h
    00123   template<typename _IIter1, typename _IIter2>
    00124     bool
    00125     equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
    00126
    00127   template<typename _IIter1, typename _IIter2, typename Predicate>
    00128     bool
    00129     equal(_IIter1, _IIter1, _IIter2, Predicate,
    00130       __gnu_parallel::sequential_tag);
    00131
    00132   template<typename _IIter1, typename _IIter2>
    00133     bool
    00134     equal(_IIter1, _IIter1, _IIter2);
    00135
    00136   template<typename _IIter1, typename _IIter2, typename Predicate>
    00137     bool
    00138     equal(_IIter1, _IIter1, _IIter2, Predicate);
    00139
    00140   template<typename _IIter, typename _Tp>
    00141     _IIter
    00142     find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
    00143
    00144   template<typename _IIter, typename _Tp>
    00145     _IIter
    00146     find(_IIter, _IIter, const _Tp& val);
    00147
    00148   template<typename _IIter, typename _Tp, typename _IterTag>
    00149     _IIter
    00150     find_switch(_IIter, _IIter, const _Tp&, _IterTag);
    00151
    00152   template<typename _RAIter, typename _Tp>
    00153     _RAIter
    00154     find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
    00155
    00156   template<typename _IIter, typename _Predicate>
    00157     _IIter
    00158     find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
    00159
    00160   template<typename _IIter, typename _Predicate>
    00161     _IIter
    00162     find_if(_IIter, _IIter, _Predicate);
    00163
    00164   template<typename _IIter, typename _Predicate, typename _IterTag>
    00165     _IIter
    00166     find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
    00167
    00168   template<typename _RAIter, typename _Predicate>
    00169     _RAIter
    00170     find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
    00171
    00172   template<typename _IIter, typename _FIter>
    00173     _IIter
    00174     find_first_of(_IIter, _IIter, _FIter, _FIter,
    00175           __gnu_parallel::sequential_tag);
    00176
    00177   template<typename _IIter, typename _FIter, typename _BiPredicate>
    00178     _IIter
    00179     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
    00180           __gnu_parallel::sequential_tag);
    00181
    00182   template<typename _IIter, typename _FIter, typename _BiPredicate>
    00183     _IIter
    00184     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
    00185
    00186   template<typename _IIter, typename _FIter>
    00187     _IIter
    00188     find_first_of(_IIter, _IIter, _FIter, _FIter);
    00189
    00190   template<typename _IIter, typename _FIter,
    00191        typename _IterTag1, typename _IterTag2>
    00192     _IIter
    00193     find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
    00194
    00195   template<typename _RAIter, typename _FIter, typename _BiPredicate,
    00196        typename _IterTag>
    00197     _RAIter
    00198     find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
    00199              random_access_iterator_tag, _IterTag);
    00200
    00201   template<typename _IIter, typename _FIter, typename _BiPredicate,
    00202        typename _IterTag1, typename _IterTag2>
    00203     _IIter
    00204     find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
    00205              _IterTag1, _IterTag2);
    00206
    00207
    00208   template<typename _IIter, typename _Function>
    00209     _Function
    00210     for_each(_IIter, _IIter, _Function);
    00211
    00212   template<typename _IIter, typename _Function>
    00213     _Function
    00214     for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
    00215
    00216   template<typename _Iterator, typename _Function>
    00217     _Function
    00218     for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
    00219
    00220   template<typename _IIter, typename _Function, typename _IterTag>
    00221     _Function
    00222     for_each_switch(_IIter, _IIter, _Function, _IterTag);
    00223
    00224   template<typename _RAIter, typename _Function>
    00225     _Function
    00226     for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
    00227             __gnu_parallel::_Parallelism  parallelism
    00228             = __gnu_parallel::parallel_balanced);
    00229
    00230
    00231   template<typename _FIter, typename _Generator>
    00232     void
    00233     generate(_FIter, _FIter, _Generator);
    00234
    00235   template<typename _FIter, typename _Generator>
    00236     void
    00237     generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
    00238
    00239   template<typename _FIter, typename _Generator>
    00240     void
    00241     generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
    00242
    00243   template<typename _FIter, typename _Generator, typename _IterTag>
    00244     void
    00245     generate_switch(_FIter, _FIter, _Generator, _IterTag);
    00246
    00247   template<typename _RAIter, typename _Generator>
    00248     void
    00249     generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
    00250             __gnu_parallel::_Parallelism parallelism
    00251             = __gnu_parallel::parallel_balanced);
    00252
    00253   template<typename _OIter, typename _Size, typename _Generator>
    00254     _OIter
    00255     generate_n(_OIter, _Size, _Generator);
    00256
    00257   template<typename _OIter, typename _Size, typename _Generator>
    00258     _OIter
    00259     generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
    00260
    00261   template<typename _OIter, typename _Size, typename _Generator>
    00262     _OIter
    00263     generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
    00264
    00265   template<typename _OIter, typename _Size, typename _Generator,
    00266        typename _IterTag>
    00267     _OIter
    00268     generate_n_switch(_OIter, _Size, _Generator, _IterTag);
    00269
    00270   template<typename _RAIter, typename _Size, typename _Generator>
    00271     _RAIter
    00272     generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
    00273               __gnu_parallel::_Parallelism parallelism
    00274               = __gnu_parallel::parallel_balanced);
    00275
    00276   template<typename _IIter1, typename _IIter2>
    00277     bool
    00278     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
    00279                 __gnu_parallel::sequential_tag);
    00280
    00281   template<typename _IIter1, typename _IIter2, typename _Predicate>
    00282     bool
    00283     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
    00284                 __gnu_parallel::sequential_tag);
    00285
    00286   template<typename _IIter1, typename _IIter2>
    00287     bool
    00288     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
    00289
    00290   template<typename _IIter1, typename _IIter2, typename _Predicate>
    00291     bool
    00292     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
    00293
    00294   template<typename _IIter1, typename _IIter2,
    00295        typename _Predicate, typename _IterTag1, typename _IterTag2>
    00296     bool
    00297     lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
    00298                    _Predicate, _IterTag1, _IterTag2);
    00299
    00300   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
    00301     bool
    00302     lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
    00303                    _Predicate, random_access_iterator_tag,
    00304                    random_access_iterator_tag);
    00305
    00306   // algo.h
    00307   template<typename _IIter1, typename _IIter2>
    00308     pair<_IIter1, _IIter2>
    00309     mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
    00310
    00311   template<typename _IIter1, typename _IIter2, typename _Predicate>
    00312     pair<_IIter1, _IIter2>
    00313     mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
    00314          __gnu_parallel::sequential_tag);
    00315
    00316   template<typename _IIter1, typename _IIter2>
    00317     pair<_IIter1, _IIter2>
    00318     mismatch(_IIter1, _IIter1, _IIter2);
    00319
    00320   template<typename _IIter1, typename _IIter2, typename _Predicate>
    00321     pair<_IIter1, _IIter2>
    00322     mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
    00323
    00324   template<typename _IIter1, typename _IIter2, typename _Predicate,
    00325        typename _IterTag1, typename _IterTag2>
    00326     pair<_IIter1, _IIter2>
    00327     mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate,
    00328             _IterTag1, _IterTag2);
    00329
    00330   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
    00331     pair<_RAIter1, _RAIter2>
    00332     mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate,
    00333             random_access_iterator_tag, random_access_iterator_tag);
    00334
    00335   template<typename _FIter1, typename _FIter2>
    00336     _FIter1
    00337     search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
    00338
    00339   template<typename _FIter1, typename _FIter2>
    00340     _FIter1
    00341     search(_FIter1, _FIter1, _FIter2, _FIter2);
    00342
    00343   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
    00344     _FIter1
    00345     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
    00346        __gnu_parallel::sequential_tag);
    00347
    00348   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
    00349     _FIter1
    00350     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
    00351
    00352   template<typename _RAIter1, typename _RAIter2>
    00353     _RAIter1
    00354     search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
    00355           random_access_iterator_tag, random_access_iterator_tag);
    00356
    00357   template<typename _FIter1, typename _FIter2, typename _IterTag1,
    00358        typename _IterTag2>
    00359     _FIter1
    00360     search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
    00361
    00362   template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
    00363     _RAIter1
    00364     search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
    00365           random_access_iterator_tag, random_access_iterator_tag);
    00366
    00367   template<typename _FIter1, typename _FIter2, typename _BiPredicate,
    00368        typename _IterTag1, typename _IterTag2>
    00369     _FIter1
    00370     search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
    00371           _IterTag1, _IterTag2);
    00372
    00373   template<typename _FIter, typename _Integer, typename _Tp>
    00374     _FIter
    00375     search_n(_FIter, _FIter, _Integer, const _Tp&,
    00376          __gnu_parallel::sequential_tag);
    00377
    00378   template<typename _FIter, typename _Integer, typename _Tp,
    00379        typename _BiPredicate>
    00380     _FIter
    00381     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
    00382          __gnu_parallel::sequential_tag);
    00383
    00384   template<typename _FIter, typename _Integer, typename _Tp>
    00385     _FIter
    00386     search_n(_FIter, _FIter, _Integer, const _Tp&);
    00387
    00388   template<typename _FIter, typename _Integer, typename _Tp,
    00389        typename _BiPredicate>
    00390     _FIter
    00391     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
    00392
    00393   template<typename _RAIter, typename _Integer, typename _Tp,
    00394        typename _BiPredicate>
    00395     _RAIter
    00396     search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
    00397             _BiPredicate, random_access_iterator_tag);
    00398
    00399   template<typename _FIter, typename _Integer, typename _Tp,
    00400        typename _BiPredicate, typename _IterTag>
    00401     _FIter
    00402     search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
    00403             _BiPredicate, _IterTag);
    00404
    00405
    00406   template<typename _IIter, typename _OIter, typename UnaryOperation>
    00407     _OIter
    00408     transform(_IIter, _IIter, _OIter, UnaryOperation);
    00409
    00410   template<typename _IIter, typename _OIter, typename UnaryOperation>
    00411     _OIter
    00412     transform(_IIter, _IIter, _OIter, UnaryOperation,
    00413           __gnu_parallel::sequential_tag);
    00414
    00415   template<typename _IIter, typename _OIter, typename UnaryOperation>
    00416     _OIter
    00417     transform(_IIter, _IIter, _OIter, UnaryOperation,
    00418           __gnu_parallel::_Parallelism);
    00419
    00420   template<typename _IIter, typename _OIter, typename UnaryOperation,
    00421        typename _IterTag1, typename _IterTag2>
    00422     _OIter
    00423     transform1_switch(_IIter, _IIter, _OIter, UnaryOperation,
    00424               _IterTag1, _IterTag2);
    00425
    00426
    00427   template<typename _RAIIter, typename _RAOIter, typename UnaryOperation>
    00428     _RAOIter
    00429     transform1_switch(_RAIIter, _RAIIter, _RAOIter, UnaryOperation,
    00430               random_access_iterator_tag, random_access_iterator_tag,
    00431               __gnu_parallel::_Parallelism parallelism
    00432               = __gnu_parallel::parallel_balanced);
    00433
    00434
    00435   template<typename _IIter1, typename _IIter2, typename _OIter,
    00436        typename _BiOperation>
    00437     _OIter
    00438     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
    00439
    00440   template<typename _IIter1, typename _IIter2, typename _OIter,
    00441        typename _BiOperation>
    00442     _OIter
    00443     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
    00444           __gnu_parallel::sequential_tag);
    00445
    00446   template<typename _IIter1, typename _IIter2, typename _OIter,
    00447        typename _BiOperation>
    00448     _OIter
    00449     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
    00450           __gnu_parallel::_Parallelism);
    00451
    00452   template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
    00453        typename _BiOperation>
    00454     _RAIter3
    00455     transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
    00456               random_access_iterator_tag, random_access_iterator_tag,
    00457               random_access_iterator_tag,
    00458               __gnu_parallel::_Parallelism parallelism
    00459               = __gnu_parallel::parallel_balanced);
    00460
    00461   template<typename _IIter1, typename _IIter2, typename _OIter,
    00462        typename _BiOperation, typename _Tag1,
    00463        typename _Tag2, typename _Tag3>
    00464     _OIter
    00465     transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
    00466               _Tag1, _Tag2, _Tag3);
    00467
    00468
    00469   template<typename _FIter, typename _Tp>
    00470     void
    00471     replace(_FIter, _FIter, const _Tp&, const _Tp&);
    00472
    00473   template<typename _FIter, typename _Tp>
    00474     void
    00475     replace(_FIter, _FIter, const _Tp&, const _Tp&,
    00476         __gnu_parallel::sequential_tag);
    00477
    00478   template<typename _FIter, typename _Tp>
    00479     void
    00480     replace(_FIter, _FIter, const _Tp&, const _Tp&,
    00481         __gnu_parallel::_Parallelism);
    00482
    00483   template<typename _FIter, typename _Tp, typename _IterTag>
    00484     void
    00485     replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
    00486
    00487   template<typename _RAIter, typename _Tp>
    00488     void
    00489     replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
    00490            random_access_iterator_tag, __gnu_parallel::_Parallelism);
    00491
    00492
    00493   template<typename _FIter, typename _Predicate, typename _Tp>
    00494     void
    00495     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
    00496
    00497   template<typename _FIter, typename _Predicate, typename _Tp>
    00498     void
    00499     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
    00500            __gnu_parallel::sequential_tag);
    00501
    00502   template<typename _FIter, typename _Predicate, typename _Tp>
    00503     void
    00504     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
    00505            __gnu_parallel::_Parallelism);
    00506
    00507   template<typename _FIter, typename _Predicate, typename _Tp,
    00508        typename _IterTag>
    00509     void
    00510     replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
    00511
    00512   template<typename _RAIter, typename _Predicate, typename _Tp>
    00513     void
    00514     replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
    00515               random_access_iterator_tag,
    00516               __gnu_parallel::_Parallelism);
    00517
    00518
    00519   template<typename _FIter>
    00520     _FIter
    00521     max_element(_FIter, _FIter);
    00522
    00523   template<typename _FIter>
    00524     _FIter
    00525     max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
    00526
    00527   template<typename _FIter>
    00528     _FIter
    00529     max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
    00530
    00531   template<typename _FIter, typename _Compare>
    00532     _FIter
    00533     max_element(_FIter, _FIter, _Compare);
    00534
    00535   template<typename _FIter, typename _Compare>
    00536     _FIter
    00537     max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
    00538
    00539   template<typename _FIter, typename _Compare>
    00540     _FIter
    00541     max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
    00542
    00543   template<typename _FIter, typename _Compare, typename _IterTag>
    00544     _FIter
    00545     max_element_switch(_FIter, _FIter, _Compare, _IterTag);
    00546
    00547   template<typename _RAIter, typename _Compare>
    00548     _RAIter
    00549     max_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag,
    00550                __gnu_parallel::_Parallelism parallelism
    00551                = __gnu_parallel::parallel_balanced);
    00552
    00553
    00554   template<typename _IIter1, typename _IIter2, typename _OIter>
    00555     _OIter
    00556     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00557       __gnu_parallel::sequential_tag);
    00558
    00559   template<typename _IIter1, typename _IIter2, typename _OIter,
    00560        typename _Compare>
    00561     _OIter
    00562     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
    00563       __gnu_parallel::sequential_tag);
    00564
    00565   template<typename _IIter1, typename _IIter2, typename _OIter,
    00566        typename _Compare>
    00567     _OIter
    00568     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
    00569
    00570   template<typename _IIter1, typename _IIter2, typename _OIter>
    00571     _OIter
    00572     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
    00573
    00574   template<typename _IIter1, typename _IIter2, typename _OIter,
    00575        typename _Compare, typename _IterTag1, typename _IterTag2,
    00576        typename _IterTag3>
    00577     _OIter
    00578     merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
    00579          _IterTag1, _IterTag2, _IterTag3);
    00580
    00581   template<typename _IIter1, typename _IIter2, typename _OIter,
    00582        typename _Compare>
    00583     _OIter
    00584     merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
    00585          random_access_iterator_tag, random_access_iterator_tag,
    00586          random_access_iterator_tag);
    00587
    00588
    00589   template<typename _FIter>
    00590     _FIter
    00591     min_element(_FIter, _FIter);
    00592
    00593   template<typename _FIter>
    00594     _FIter
    00595     min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
    00596
    00597   template<typename _FIter>
    00598     _FIter
    00599     min_element(_FIter, _FIter, __gnu_parallel::_Parallelism parallelism_tag);
    00600
    00601   template<typename _FIter, typename _Compare>
    00602     _FIter
    00603     min_element(_FIter, _FIter, _Compare);
    00604
    00605   template<typename _FIter, typename _Compare>
    00606     _FIter
    00607     min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
    00608
    00609   template<typename _FIter, typename _Compare>
    00610     _FIter
    00611     min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
    00612
    00613   template<typename _FIter, typename _Compare, typename _IterTag>
    00614     _FIter
    00615     min_element_switch(_FIter, _FIter, _Compare, _IterTag);
    00616
    00617   template<typename _RAIter, typename _Compare>
    00618     _RAIter
    00619     min_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag,
    00620                __gnu_parallel::_Parallelism parallelism
    00621                = __gnu_parallel::parallel_balanced);
    00622
    00623   template<typename _RAIter>
    00624     void
    00625     nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
    00626
    00627   template<typename _RAIter, typename _Compare>
    00628     void
    00629     nth_element(_RAIter, _RAIter, _RAIter, _Compare,
    00630         __gnu_parallel::sequential_tag);
    00631
    00632   template<typename _RAIter, typename _Compare>
    00633     void
    00634     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
    00635
    00636   template<typename _RAIter>
    00637     void
    00638     nth_element(_RAIter, _RAIter, _RAIter);
    00639
    00640   template<typename _RAIter, typename _Compare>
    00641     void
    00642     partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
    00643          __gnu_parallel::sequential_tag);
    00644
    00645   template<typename _RAIter>
    00646     void
    00647     partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
    00648
    00649   template<typename _RAIter, typename _Compare>
    00650     void
    00651     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
    00652
    00653   template<typename _RAIter>
    00654     void
    00655     partial_sort(_RAIter, _RAIter, _RAIter);
    00656
    00657   template<typename _FIter, typename Predicate>
    00658     _FIter
    00659     partition(_FIter, _FIter, Predicate, __gnu_parallel::sequential_tag);
    00660
    00661   template<typename _FIter, typename Predicate>
    00662     _FIter
    00663     partition(_FIter, _FIter, Predicate);
    00664
    00665   template<typename _FIter, typename Predicate, typename _IterTag>
    00666     _FIter
    00667     partition_switch(_FIter, _FIter, Predicate, _IterTag);
    00668
    00669   template<typename _RAIter, typename Predicate>
    00670     _RAIter
    00671     partition_switch(_RAIter, _RAIter, Predicate, random_access_iterator_tag);
    00672
    00673   template<typename _RAIter>
    00674     void
    00675     random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
    00676
    00677   template<typename _RAIter, typename _RandomNumberGenerator>
    00678     void
    00679     random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
    00680            __gnu_parallel::sequential_tag);
    00681
    00682   template<typename _RAIter>
    00683     void
    00684     random_shuffle(_RAIter, _RAIter);
    00685
    00686   template<typename _RAIter, typename _RandomNumberGenerator>
    00687     void
    00688     random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&);
    00689
    00690   template<typename _IIter1, typename _IIter2, typename _OIter>
    00691     _OIter
    00692     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00693         __gnu_parallel::sequential_tag);
    00694
    00695   template<typename _IIter1, typename _IIter2, typename _OIter,
    00696        typename Predicate>
    00697     _OIter
    00698     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, Predicate,
    00699           __gnu_parallel::sequential_tag);
    00700
    00701   template<typename _IIter1, typename _IIter2, typename _OIter>
    00702     _OIter
    00703     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
    00704
    00705   template<typename _IIter1, typename _IIter2, typename _OIter,
    00706        typename _Predicate>
    00707     _OIter
    00708     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
    00709
    00710   template<typename _IIter1, typename _IIter2, typename _Predicate,
    00711        typename _OIter, typename _IterTag1, typename _IterTag2,
    00712        typename _IterTag3>
    00713     _OIter
    00714     set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00715              _Predicate, _IterTag1, _IterTag2, _IterTag3);
    00716
    00717   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
    00718        typename _Predicate>
    00719     _Output_RAIter
    00720     set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
    00721              _Predicate, random_access_iterator_tag,
    00722              random_access_iterator_tag, random_access_iterator_tag);
    00723
    00724   template<typename _IIter1, typename _IIter2, typename _OIter>
    00725     _OIter
    00726     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00727              __gnu_parallel::sequential_tag);
    00728
    00729   template<typename _IIter1, typename _IIter2, typename _OIter,
    00730        typename _Predicate>
    00731     _OIter
    00732     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
    00733              __gnu_parallel::sequential_tag);
    00734
    00735   template<typename _IIter1, typename _IIter2, typename _OIter>
    00736     _OIter
    00737     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
    00738
    00739   template<typename _IIter1, typename _IIter2, typename _OIter,
    00740        typename _Predicate>
    00741     _OIter
    00742     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
    00743
    00744   template<typename _IIter1, typename _IIter2, typename _Predicate,
    00745        typename _OIter, typename _IterTag1, typename _IterTag2,
    00746        typename _IterTag3>
    00747     _OIter
    00748     set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00749                 _Predicate, _IterTag1, _IterTag2, _IterTag3);
    00750
    00751   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
    00752        typename _Predicate>
    00753     _Output_RAIter
    00754     set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
    00755                 _Output_RAIter, _Predicate,
    00756                 random_access_iterator_tag,
    00757                 random_access_iterator_tag,
    00758                 random_access_iterator_tag);
    00759
    00760   template<typename _IIter1, typename _IIter2, typename _OIter>
    00761     _OIter
    00762     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00763                  __gnu_parallel::sequential_tag);
    00764
    00765   template<typename _IIter1, typename _IIter2, typename _OIter,
    00766        typename _Predicate>
    00767     _OIter
    00768     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00769                  _Predicate, __gnu_parallel::sequential_tag);
    00770
    00771   template<typename _IIter1, typename _IIter2, typename _OIter>
    00772     _OIter
    00773     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
    00774
    00775   template<typename _IIter1, typename _IIter2, typename _OIter,
    00776        typename _Predicate>
    00777     _OIter
    00778     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00779                  _Predicate);
    00780
    00781   template<typename _IIter1, typename _IIter2, typename _Predicate,
    00782        typename _OIter, typename _IterTag1, typename _IterTag2,
    00783        typename _IterTag3>
    00784     _OIter
    00785     set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
    00786                     _OIter, _Predicate, _IterTag1, _IterTag2,
    00787                     _IterTag3);
    00788
    00789   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
    00790        typename _Predicate>
    00791     _Output_RAIter
    00792     set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
    00793                     _Output_RAIter, _Predicate,
    00794                     random_access_iterator_tag,
    00795                     random_access_iterator_tag,
    00796                     random_access_iterator_tag);
    00797
    00798
    00799   template<typename _IIter1, typename _IIter2, typename _OIter>
    00800     _OIter
    00801     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00802            __gnu_parallel::sequential_tag);
    00803
    00804   template<typename _IIter1, typename _IIter2, typename _OIter,
    00805        typename _Predicate>
    00806     _OIter
    00807     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
    00808            __gnu_parallel::sequential_tag);
    00809
    00810   template<typename _IIter1, typename _IIter2, typename _OIter>
    00811     _OIter
    00812     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
    00813
    00814   template<typename _IIter1, typename _IIter2, typename _OIter,
    00815        typename _Predicate>
    00816     _OIter
    00817     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
    00818
    00819   template<typename _IIter1, typename _IIter2, typename _Predicate,
    00820        typename _OIter, typename _IterTag1, typename _IterTag2,
    00821        typename _IterTag3>
    00822     _OIter
    00823     set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
    00824               _Predicate, _IterTag1, _IterTag2, _IterTag3);
    00825
    00826   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
    00827        typename _Predicate>
    00828     _Output_RAIter
    00829     set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
    00830               _Output_RAIter, _Predicate,
    00831               random_access_iterator_tag,
    00832               random_access_iterator_tag,
    00833               random_access_iterator_tag);
    00834
    00835
    00836   template<typename _RAIter>
    00837     void
    00838     sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
    00839
    00840   template<typename _RAIter, typename _Compare>
    00841     void
    00842     sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
    00843
    00844   template<typename _RAIter>
    00845     void
    00846     sort(_RAIter, _RAIter);
    00847
    00848   template<typename _RAIter, typename _Compare>
    00849     void
    00850     sort(_RAIter, _RAIter, _Compare);
    00851
    00852   template<typename _RAIter>
    00853     void
    00854     stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
    00855
    00856   template<typename _RAIter, typename _Compare>
    00857     void
    00858     stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
    00859
    00860   template<typename _RAIter>
    00861     void
    00862     stable_sort(_RAIter, _RAIter);
    00863
    00864   template<typename _RAIter, typename _Compare>
    00865     void
    00866     stable_sort(_RAIter, _RAIter, _Compare);
    00867
    00868   template<typename _IIter, typename _OIter>
    00869     _OIter
    00870     unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
    00871
    00872   template<typename _IIter, typename _OIter, typename _Predicate>
    00873     _OIter
    00874     unique_copy(_IIter, _IIter, _OIter, _Predicate,
    00875         __gnu_parallel::sequential_tag);
    00876
    00877   template<typename _IIter, typename _OIter>
    00878     _OIter
    00879     unique_copy(_IIter, _IIter, _OIter);
    00880
    00881   template<typename _IIter, typename _OIter, typename _Predicate>
    00882     _OIter
    00883     unique_copy(_IIter, _IIter, _OIter, _Predicate);
    00884
    00885   template<typename _IIter, typename _OIter, typename _Predicate,
    00886        typename _IterTag1, typename _IterTag2>
    00887     _OIter
    00888     unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
    00889                _IterTag1, _IterTag2);
    00890
    00891   template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
    00892     _RandomAccess_OIter
    00893     unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
    00894                random_access_iterator_tag, random_access_iterator_tag);
    00895 } // end namespace __parallel
    00896 } // end namespace std
    00897
    00898 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */