# parallel/algorithmfwd.h

Go to the documentation of this file.

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