xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/parallel/algorithmfwd.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
136ac495dSmrg // <parallel/algorithm> Forward declarations -*- C++ -*-
236ac495dSmrg 
3*8feb0f0bSmrg // Copyright (C) 2007-2020 Free Software Foundation, Inc.
436ac495dSmrg //
536ac495dSmrg // This file is part of the GNU ISO C++ Library.  This library is free
636ac495dSmrg // software; you can redistribute it and/or modify it under the terms
736ac495dSmrg // of the GNU General Public License as published by the Free Software
836ac495dSmrg // Foundation; either version 3, or (at your option) any later
936ac495dSmrg // version.
1036ac495dSmrg 
1136ac495dSmrg // This library is distributed in the hope that it will be useful, but
1236ac495dSmrg // WITHOUT ANY WARRANTY; without even the implied warranty of
1336ac495dSmrg // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1436ac495dSmrg // General Public License for more details.
1536ac495dSmrg 
1636ac495dSmrg // Under Section 7 of GPL version 3, you are granted additional
1736ac495dSmrg // permissions described in the GCC Runtime Library Exception, version
1836ac495dSmrg // 3.1, as published by the Free Software Foundation.
1936ac495dSmrg 
2036ac495dSmrg // You should have received a copy of the GNU General Public License and
2136ac495dSmrg // a copy of the GCC Runtime Library Exception along with this program;
2236ac495dSmrg // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2336ac495dSmrg // <http://www.gnu.org/licenses/>.
2436ac495dSmrg 
2536ac495dSmrg /** @file parallel/algorithmfwd.h
2636ac495dSmrg  *  This file is a GNU parallel extension to the Standard C++ Library.
2736ac495dSmrg  */
2836ac495dSmrg 
2936ac495dSmrg #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
3036ac495dSmrg #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
3136ac495dSmrg 
3236ac495dSmrg #pragma GCC system_header
3336ac495dSmrg 
3436ac495dSmrg #include <parallel/tags.h>
3536ac495dSmrg #include <parallel/settings.h>
3636ac495dSmrg 
_GLIBCXX_VISIBILITY(default)3736ac495dSmrg namespace std _GLIBCXX_VISIBILITY(default)
3836ac495dSmrg {
3936ac495dSmrg namespace __parallel
4036ac495dSmrg {
4136ac495dSmrg   template<typename _FIter>
4236ac495dSmrg     _FIter
4336ac495dSmrg     adjacent_find(_FIter, _FIter);
4436ac495dSmrg 
4536ac495dSmrg   template<typename _FIter>
4636ac495dSmrg     _FIter
4736ac495dSmrg     adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
4836ac495dSmrg 
4936ac495dSmrg   template<typename _FIter, typename _IterTag>
5036ac495dSmrg     _FIter
5136ac495dSmrg     __adjacent_find_switch(_FIter, _FIter, _IterTag);
5236ac495dSmrg 
5336ac495dSmrg   template<typename _RAIter>
5436ac495dSmrg     _RAIter
5536ac495dSmrg     __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
5636ac495dSmrg 
5736ac495dSmrg 
5836ac495dSmrg   template<typename _FIter, typename _BiPredicate>
5936ac495dSmrg     _FIter
6036ac495dSmrg     adjacent_find(_FIter, _FIter, _BiPredicate);
6136ac495dSmrg 
6236ac495dSmrg   template<typename _FIter, typename _BiPredicate>
6336ac495dSmrg     _FIter
6436ac495dSmrg     adjacent_find(_FIter, _FIter, _BiPredicate,
6536ac495dSmrg                   __gnu_parallel::sequential_tag);
6636ac495dSmrg 
6736ac495dSmrg   template<typename _FIter, typename _BiPredicate, typename _IterTag>
6836ac495dSmrg     _FIter
6936ac495dSmrg     __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
7036ac495dSmrg 
7136ac495dSmrg   template<typename _RAIter, typename _BiPredicate>
7236ac495dSmrg     _RAIter
7336ac495dSmrg     __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
7436ac495dSmrg                          random_access_iterator_tag);
7536ac495dSmrg 
7636ac495dSmrg 
7736ac495dSmrg   template<typename _IIter, typename _Tp>
7836ac495dSmrg     typename iterator_traits<_IIter>::difference_type
7936ac495dSmrg     count(_IIter, _IIter, const _Tp&);
8036ac495dSmrg 
8136ac495dSmrg   template<typename _IIter, typename _Tp>
8236ac495dSmrg     typename iterator_traits<_IIter>::difference_type
8336ac495dSmrg     count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
8436ac495dSmrg 
8536ac495dSmrg   template<typename _IIter, typename _Tp>
8636ac495dSmrg     typename iterator_traits<_IIter>::difference_type
8736ac495dSmrg     count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
8836ac495dSmrg 
8936ac495dSmrg   template<typename _IIter, typename _Tp, typename _IterTag>
9036ac495dSmrg     typename iterator_traits<_IIter>::difference_type
9136ac495dSmrg     __count_switch(_IIter, _IIter, const _Tp&, _IterTag);
9236ac495dSmrg 
9336ac495dSmrg   template<typename _RAIter, typename _Tp>
9436ac495dSmrg     typename iterator_traits<_RAIter>::difference_type
9536ac495dSmrg     __count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag,
9636ac495dSmrg                  __gnu_parallel::_Parallelism __parallelism
9736ac495dSmrg                  = __gnu_parallel::parallel_unbalanced);
9836ac495dSmrg 
9936ac495dSmrg 
10036ac495dSmrg   template<typename _IIter, typename _Predicate>
10136ac495dSmrg     typename iterator_traits<_IIter>::difference_type
10236ac495dSmrg     count_if(_IIter, _IIter, _Predicate);
10336ac495dSmrg 
10436ac495dSmrg   template<typename _IIter, typename _Predicate>
10536ac495dSmrg     typename iterator_traits<_IIter>::difference_type
10636ac495dSmrg     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
10736ac495dSmrg 
10836ac495dSmrg   template<typename _IIter, typename _Predicate>
10936ac495dSmrg     typename iterator_traits<_IIter>::difference_type
11036ac495dSmrg     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
11136ac495dSmrg 
11236ac495dSmrg   template<typename _IIter, typename _Predicate, typename _IterTag>
11336ac495dSmrg     typename iterator_traits<_IIter>::difference_type
11436ac495dSmrg     __count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
11536ac495dSmrg 
11636ac495dSmrg   template<typename _RAIter, typename _Predicate>
11736ac495dSmrg     typename iterator_traits<_RAIter>::difference_type
11836ac495dSmrg     __count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag,
11936ac495dSmrg                     __gnu_parallel::_Parallelism __parallelism
12036ac495dSmrg                     = __gnu_parallel::parallel_unbalanced);
12136ac495dSmrg 
12236ac495dSmrg   // algobase.h
12336ac495dSmrg   template<typename _IIter1, typename _IIter2>
12436ac495dSmrg     bool
12536ac495dSmrg     equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
12636ac495dSmrg 
12736ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
12836ac495dSmrg     bool
12936ac495dSmrg     equal(_IIter1, _IIter1, _IIter2, _Predicate,
13036ac495dSmrg           __gnu_parallel::sequential_tag);
13136ac495dSmrg 
13236ac495dSmrg   template<typename _IIter1, typename _IIter2>
133*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
13436ac495dSmrg     bool
13536ac495dSmrg     equal(_IIter1, _IIter1, _IIter2);
13636ac495dSmrg 
13736ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
138*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
13936ac495dSmrg     bool
14036ac495dSmrg     equal(_IIter1, _IIter1, _IIter2, _Predicate);
14136ac495dSmrg 
14236ac495dSmrg   template<typename _IIter, typename _Tp>
14336ac495dSmrg     _IIter
14436ac495dSmrg     find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
14536ac495dSmrg 
14636ac495dSmrg   template<typename _IIter, typename _Tp>
14736ac495dSmrg     _IIter
14836ac495dSmrg     find(_IIter, _IIter, const _Tp& __val);
14936ac495dSmrg 
15036ac495dSmrg   template<typename _IIter, typename _Tp, typename _IterTag>
15136ac495dSmrg     _IIter
15236ac495dSmrg     __find_switch(_IIter, _IIter, const _Tp&, _IterTag);
15336ac495dSmrg 
15436ac495dSmrg   template<typename _RAIter, typename _Tp>
15536ac495dSmrg     _RAIter
15636ac495dSmrg     __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
15736ac495dSmrg 
15836ac495dSmrg   template<typename _IIter, typename _Predicate>
15936ac495dSmrg     _IIter
16036ac495dSmrg     find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
16136ac495dSmrg 
16236ac495dSmrg   template<typename _IIter, typename _Predicate>
16336ac495dSmrg     _IIter
16436ac495dSmrg     find_if(_IIter, _IIter, _Predicate);
16536ac495dSmrg 
16636ac495dSmrg   template<typename _IIter, typename _Predicate, typename _IterTag>
16736ac495dSmrg     _IIter
16836ac495dSmrg     __find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
16936ac495dSmrg 
17036ac495dSmrg   template<typename _RAIter, typename _Predicate>
17136ac495dSmrg     _RAIter
17236ac495dSmrg     __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
17336ac495dSmrg 
17436ac495dSmrg   template<typename _IIter, typename _FIter>
17536ac495dSmrg     _IIter
17636ac495dSmrg     find_first_of(_IIter, _IIter, _FIter, _FIter,
17736ac495dSmrg                   __gnu_parallel::sequential_tag);
17836ac495dSmrg 
17936ac495dSmrg   template<typename _IIter, typename _FIter, typename _BiPredicate>
18036ac495dSmrg     _IIter
18136ac495dSmrg     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
18236ac495dSmrg                   __gnu_parallel::sequential_tag);
18336ac495dSmrg 
18436ac495dSmrg   template<typename _IIter, typename _FIter, typename _BiPredicate>
18536ac495dSmrg     _IIter
18636ac495dSmrg     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
18736ac495dSmrg 
18836ac495dSmrg   template<typename _IIter, typename _FIter>
18936ac495dSmrg     _IIter
19036ac495dSmrg     find_first_of(_IIter, _IIter, _FIter, _FIter);
19136ac495dSmrg 
19236ac495dSmrg   template<typename _IIter, typename _FIter,
19336ac495dSmrg            typename _IterTag1, typename _IterTag2>
19436ac495dSmrg     _IIter
19536ac495dSmrg     __find_first_of_switch(
19636ac495dSmrg       _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
19736ac495dSmrg 
19836ac495dSmrg   template<typename _RAIter, typename _FIter, typename _BiPredicate,
19936ac495dSmrg            typename _IterTag>
20036ac495dSmrg     _RAIter
20136ac495dSmrg     __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
20236ac495dSmrg                          random_access_iterator_tag, _IterTag);
20336ac495dSmrg 
20436ac495dSmrg   template<typename _IIter, typename _FIter, typename _BiPredicate,
20536ac495dSmrg            typename _IterTag1, typename _IterTag2>
20636ac495dSmrg     _IIter
20736ac495dSmrg     __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
20836ac495dSmrg                          _IterTag1, _IterTag2);
20936ac495dSmrg 
21036ac495dSmrg 
21136ac495dSmrg   template<typename _IIter, typename _Function>
21236ac495dSmrg     _Function
21336ac495dSmrg     for_each(_IIter, _IIter, _Function);
21436ac495dSmrg 
21536ac495dSmrg   template<typename _IIter, typename _Function>
21636ac495dSmrg     _Function
21736ac495dSmrg     for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
21836ac495dSmrg 
21936ac495dSmrg   template<typename _Iterator, typename _Function>
22036ac495dSmrg     _Function
22136ac495dSmrg     for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
22236ac495dSmrg 
22336ac495dSmrg   template<typename _IIter, typename _Function, typename _IterTag>
22436ac495dSmrg     _Function
22536ac495dSmrg     __for_each_switch(_IIter, _IIter, _Function, _IterTag);
22636ac495dSmrg 
22736ac495dSmrg   template<typename _RAIter, typename _Function>
22836ac495dSmrg     _Function
22936ac495dSmrg     __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
23036ac495dSmrg                     __gnu_parallel::_Parallelism  __parallelism
23136ac495dSmrg                     = __gnu_parallel::parallel_balanced);
23236ac495dSmrg 
23336ac495dSmrg 
23436ac495dSmrg   template<typename _FIter, typename _Generator>
23536ac495dSmrg     void
23636ac495dSmrg     generate(_FIter, _FIter, _Generator);
23736ac495dSmrg 
23836ac495dSmrg   template<typename _FIter, typename _Generator>
23936ac495dSmrg     void
24036ac495dSmrg     generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
24136ac495dSmrg 
24236ac495dSmrg   template<typename _FIter, typename _Generator>
24336ac495dSmrg     void
24436ac495dSmrg     generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
24536ac495dSmrg 
24636ac495dSmrg   template<typename _FIter, typename _Generator, typename _IterTag>
24736ac495dSmrg     void
24836ac495dSmrg     __generate_switch(_FIter, _FIter, _Generator, _IterTag);
24936ac495dSmrg 
25036ac495dSmrg   template<typename _RAIter, typename _Generator>
25136ac495dSmrg     void
25236ac495dSmrg     __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
25336ac495dSmrg                     __gnu_parallel::_Parallelism __parallelism
25436ac495dSmrg                     = __gnu_parallel::parallel_balanced);
25536ac495dSmrg 
25636ac495dSmrg   template<typename _OIter, typename _Size, typename _Generator>
25736ac495dSmrg     _OIter
25836ac495dSmrg     generate_n(_OIter, _Size, _Generator);
25936ac495dSmrg 
26036ac495dSmrg   template<typename _OIter, typename _Size, typename _Generator>
26136ac495dSmrg     _OIter
26236ac495dSmrg     generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
26336ac495dSmrg 
26436ac495dSmrg   template<typename _OIter, typename _Size, typename _Generator>
26536ac495dSmrg     _OIter
26636ac495dSmrg     generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
26736ac495dSmrg 
26836ac495dSmrg   template<typename _OIter, typename _Size, typename _Generator,
26936ac495dSmrg            typename _IterTag>
27036ac495dSmrg     _OIter
27136ac495dSmrg     __generate_n_switch(_OIter, _Size, _Generator, _IterTag);
27236ac495dSmrg 
27336ac495dSmrg   template<typename _RAIter, typename _Size, typename _Generator>
27436ac495dSmrg     _RAIter
27536ac495dSmrg     __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
27636ac495dSmrg                       __gnu_parallel::_Parallelism __parallelism
27736ac495dSmrg                       = __gnu_parallel::parallel_balanced);
27836ac495dSmrg 
27936ac495dSmrg   template<typename _IIter1, typename _IIter2>
28036ac495dSmrg     bool
28136ac495dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
28236ac495dSmrg                             __gnu_parallel::sequential_tag);
28336ac495dSmrg 
28436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
28536ac495dSmrg     bool
28636ac495dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
28736ac495dSmrg                             __gnu_parallel::sequential_tag);
28836ac495dSmrg 
28936ac495dSmrg   template<typename _IIter1, typename _IIter2>
290*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
29136ac495dSmrg     bool
29236ac495dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
29336ac495dSmrg 
29436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
295*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
29636ac495dSmrg     bool
29736ac495dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
29836ac495dSmrg 
29936ac495dSmrg   template<typename _IIter1, typename _IIter2,
30036ac495dSmrg            typename _Predicate, typename _IterTag1, typename _IterTag2>
30136ac495dSmrg     bool
30236ac495dSmrg     __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
30336ac495dSmrg                                    _Predicate, _IterTag1, _IterTag2);
30436ac495dSmrg 
30536ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
30636ac495dSmrg     bool
30736ac495dSmrg     __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
30836ac495dSmrg                                    _Predicate, random_access_iterator_tag,
30936ac495dSmrg                                    random_access_iterator_tag);
31036ac495dSmrg 
31136ac495dSmrg   // algo.h
31236ac495dSmrg   template<typename _IIter1, typename _IIter2>
31336ac495dSmrg     pair<_IIter1, _IIter2>
31436ac495dSmrg     mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
31536ac495dSmrg 
31636ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
31736ac495dSmrg     pair<_IIter1, _IIter2>
31836ac495dSmrg     mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
31936ac495dSmrg              __gnu_parallel::sequential_tag);
32036ac495dSmrg 
32136ac495dSmrg   template<typename _IIter1, typename _IIter2>
32236ac495dSmrg     pair<_IIter1, _IIter2>
32336ac495dSmrg     mismatch(_IIter1, _IIter1, _IIter2);
32436ac495dSmrg 
32536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate>
32636ac495dSmrg     pair<_IIter1, _IIter2>
32736ac495dSmrg     mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
32836ac495dSmrg 
32936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate,
33036ac495dSmrg            typename _IterTag1, typename _IterTag2>
33136ac495dSmrg     pair<_IIter1, _IIter2>
33236ac495dSmrg     __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate,
33336ac495dSmrg                     _IterTag1, _IterTag2);
33436ac495dSmrg 
33536ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
33636ac495dSmrg     pair<_RAIter1, _RAIter2>
33736ac495dSmrg     __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate,
33836ac495dSmrg                     random_access_iterator_tag, random_access_iterator_tag);
33936ac495dSmrg 
34036ac495dSmrg   template<typename _FIter1, typename _FIter2>
34136ac495dSmrg     _FIter1
34236ac495dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
34336ac495dSmrg 
34436ac495dSmrg   template<typename _FIter1, typename _FIter2>
34536ac495dSmrg     _FIter1
34636ac495dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2);
34736ac495dSmrg 
34836ac495dSmrg   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
34936ac495dSmrg     _FIter1
35036ac495dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
35136ac495dSmrg            __gnu_parallel::sequential_tag);
35236ac495dSmrg 
35336ac495dSmrg   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
35436ac495dSmrg     _FIter1
35536ac495dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
35636ac495dSmrg 
35736ac495dSmrg   template<typename _RAIter1, typename _RAIter2>
35836ac495dSmrg     _RAIter1
35936ac495dSmrg     __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
36036ac495dSmrg                   random_access_iterator_tag, random_access_iterator_tag);
36136ac495dSmrg 
36236ac495dSmrg   template<typename _FIter1, typename _FIter2, typename _IterTag1,
36336ac495dSmrg            typename _IterTag2>
36436ac495dSmrg     _FIter1
36536ac495dSmrg     __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
36636ac495dSmrg 
36736ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
36836ac495dSmrg     _RAIter1
36936ac495dSmrg     __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
37036ac495dSmrg                   random_access_iterator_tag, random_access_iterator_tag);
37136ac495dSmrg 
37236ac495dSmrg   template<typename _FIter1, typename _FIter2, typename _BiPredicate,
37336ac495dSmrg            typename _IterTag1, typename _IterTag2>
37436ac495dSmrg     _FIter1
37536ac495dSmrg     __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
37636ac495dSmrg                   _IterTag1, _IterTag2);
37736ac495dSmrg 
37836ac495dSmrg   template<typename _FIter, typename _Integer, typename _Tp>
37936ac495dSmrg     _FIter
38036ac495dSmrg     search_n(_FIter, _FIter, _Integer, const _Tp&,
38136ac495dSmrg              __gnu_parallel::sequential_tag);
38236ac495dSmrg 
38336ac495dSmrg   template<typename _FIter, typename _Integer, typename _Tp,
38436ac495dSmrg            typename _BiPredicate>
38536ac495dSmrg     _FIter
38636ac495dSmrg     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
38736ac495dSmrg              __gnu_parallel::sequential_tag);
38836ac495dSmrg 
38936ac495dSmrg   template<typename _FIter, typename _Integer, typename _Tp>
39036ac495dSmrg     _FIter
39136ac495dSmrg     search_n(_FIter, _FIter, _Integer, const _Tp&);
39236ac495dSmrg 
39336ac495dSmrg   template<typename _FIter, typename _Integer, typename _Tp,
39436ac495dSmrg            typename _BiPredicate>
39536ac495dSmrg     _FIter
39636ac495dSmrg     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
39736ac495dSmrg 
39836ac495dSmrg   template<typename _RAIter, typename _Integer, typename _Tp,
39936ac495dSmrg            typename _BiPredicate>
40036ac495dSmrg     _RAIter
40136ac495dSmrg     __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
40236ac495dSmrg                     _BiPredicate, random_access_iterator_tag);
40336ac495dSmrg 
40436ac495dSmrg   template<typename _FIter, typename _Integer, typename _Tp,
40536ac495dSmrg            typename _BiPredicate, typename _IterTag>
40636ac495dSmrg     _FIter
40736ac495dSmrg     __search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
40836ac495dSmrg                     _BiPredicate, _IterTag);
40936ac495dSmrg 
41036ac495dSmrg 
41136ac495dSmrg   template<typename _IIter, typename _OIter, typename _UnaryOperation>
41236ac495dSmrg     _OIter
41336ac495dSmrg     transform(_IIter, _IIter, _OIter, _UnaryOperation);
41436ac495dSmrg 
41536ac495dSmrg   template<typename _IIter, typename _OIter, typename _UnaryOperation>
41636ac495dSmrg     _OIter
41736ac495dSmrg     transform(_IIter, _IIter, _OIter, _UnaryOperation,
41836ac495dSmrg               __gnu_parallel::sequential_tag);
41936ac495dSmrg 
42036ac495dSmrg   template<typename _IIter, typename _OIter, typename _UnaryOperation>
42136ac495dSmrg     _OIter
42236ac495dSmrg     transform(_IIter, _IIter, _OIter, _UnaryOperation,
42336ac495dSmrg               __gnu_parallel::_Parallelism);
42436ac495dSmrg 
42536ac495dSmrg   template<typename _IIter, typename _OIter, typename _UnaryOperation,
42636ac495dSmrg            typename _IterTag1, typename _IterTag2>
42736ac495dSmrg     _OIter
42836ac495dSmrg     __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation,
42936ac495dSmrg                       _IterTag1, _IterTag2);
43036ac495dSmrg 
43136ac495dSmrg 
43236ac495dSmrg   template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation>
43336ac495dSmrg     _RAOIter
43436ac495dSmrg     __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation,
43536ac495dSmrg                       random_access_iterator_tag, random_access_iterator_tag,
43636ac495dSmrg                       __gnu_parallel::_Parallelism __parallelism
43736ac495dSmrg                       = __gnu_parallel::parallel_balanced);
43836ac495dSmrg 
43936ac495dSmrg 
44036ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
44136ac495dSmrg            typename _BiOperation>
44236ac495dSmrg     _OIter
44336ac495dSmrg     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
44436ac495dSmrg 
44536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
44636ac495dSmrg            typename _BiOperation>
44736ac495dSmrg     _OIter
44836ac495dSmrg     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
44936ac495dSmrg               __gnu_parallel::sequential_tag);
45036ac495dSmrg 
45136ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
45236ac495dSmrg            typename _BiOperation>
45336ac495dSmrg     _OIter
45436ac495dSmrg     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
45536ac495dSmrg               __gnu_parallel::_Parallelism);
45636ac495dSmrg 
45736ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
45836ac495dSmrg            typename _BiOperation>
45936ac495dSmrg     _RAIter3
46036ac495dSmrg     __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
46136ac495dSmrg                       random_access_iterator_tag, random_access_iterator_tag,
46236ac495dSmrg                       random_access_iterator_tag,
46336ac495dSmrg                       __gnu_parallel::_Parallelism __parallelism
46436ac495dSmrg                       = __gnu_parallel::parallel_balanced);
46536ac495dSmrg 
46636ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
46736ac495dSmrg            typename _BiOperation, typename _Tag1,
46836ac495dSmrg            typename _Tag2, typename _Tag3>
46936ac495dSmrg     _OIter
47036ac495dSmrg     __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
47136ac495dSmrg                       _Tag1, _Tag2, _Tag3);
47236ac495dSmrg 
47336ac495dSmrg 
47436ac495dSmrg   template<typename _FIter, typename _Tp>
47536ac495dSmrg     void
47636ac495dSmrg     replace(_FIter, _FIter, const _Tp&, const _Tp&);
47736ac495dSmrg 
47836ac495dSmrg   template<typename _FIter, typename _Tp>
47936ac495dSmrg     void
48036ac495dSmrg     replace(_FIter, _FIter, const _Tp&, const _Tp&,
48136ac495dSmrg             __gnu_parallel::sequential_tag);
48236ac495dSmrg 
48336ac495dSmrg   template<typename _FIter, typename _Tp>
48436ac495dSmrg     void
48536ac495dSmrg     replace(_FIter, _FIter, const _Tp&, const _Tp&,
48636ac495dSmrg             __gnu_parallel::_Parallelism);
48736ac495dSmrg 
48836ac495dSmrg   template<typename _FIter, typename _Tp, typename _IterTag>
48936ac495dSmrg     void
49036ac495dSmrg     __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
49136ac495dSmrg 
49236ac495dSmrg   template<typename _RAIter, typename _Tp>
49336ac495dSmrg     void
49436ac495dSmrg     __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
49536ac495dSmrg                    random_access_iterator_tag, __gnu_parallel::_Parallelism);
49636ac495dSmrg 
49736ac495dSmrg 
49836ac495dSmrg   template<typename _FIter, typename _Predicate, typename _Tp>
49936ac495dSmrg     void
50036ac495dSmrg     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
50136ac495dSmrg 
50236ac495dSmrg   template<typename _FIter, typename _Predicate, typename _Tp>
50336ac495dSmrg     void
50436ac495dSmrg     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
50536ac495dSmrg                __gnu_parallel::sequential_tag);
50636ac495dSmrg 
50736ac495dSmrg   template<typename _FIter, typename _Predicate, typename _Tp>
50836ac495dSmrg     void
50936ac495dSmrg     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
51036ac495dSmrg                __gnu_parallel::_Parallelism);
51136ac495dSmrg 
51236ac495dSmrg   template<typename _FIter, typename _Predicate, typename _Tp,
51336ac495dSmrg            typename _IterTag>
51436ac495dSmrg     void
51536ac495dSmrg     __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
51636ac495dSmrg 
51736ac495dSmrg   template<typename _RAIter, typename _Predicate, typename _Tp>
51836ac495dSmrg     void
51936ac495dSmrg     __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
52036ac495dSmrg                       random_access_iterator_tag,
52136ac495dSmrg                       __gnu_parallel::_Parallelism);
52236ac495dSmrg 
52336ac495dSmrg 
52436ac495dSmrg   template<typename _FIter>
52536ac495dSmrg     _FIter
52636ac495dSmrg     max_element(_FIter, _FIter);
52736ac495dSmrg 
52836ac495dSmrg   template<typename _FIter>
52936ac495dSmrg     _FIter
53036ac495dSmrg     max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
53136ac495dSmrg 
53236ac495dSmrg   template<typename _FIter>
53336ac495dSmrg     _FIter
53436ac495dSmrg     max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
53536ac495dSmrg 
53636ac495dSmrg   template<typename _FIter, typename _Compare>
53736ac495dSmrg     _FIter
53836ac495dSmrg     max_element(_FIter, _FIter, _Compare);
53936ac495dSmrg 
54036ac495dSmrg   template<typename _FIter, typename _Compare>
54136ac495dSmrg     _FIter
54236ac495dSmrg     max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
54336ac495dSmrg 
54436ac495dSmrg   template<typename _FIter, typename _Compare>
54536ac495dSmrg     _FIter
54636ac495dSmrg     max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
54736ac495dSmrg 
54836ac495dSmrg   template<typename _FIter, typename _Compare, typename _IterTag>
54936ac495dSmrg     _FIter
55036ac495dSmrg     __max_element_switch(_FIter, _FIter, _Compare, _IterTag);
55136ac495dSmrg 
55236ac495dSmrg   template<typename _RAIter, typename _Compare>
55336ac495dSmrg     _RAIter
55436ac495dSmrg     __max_element_switch(
55536ac495dSmrg       _RAIter, _RAIter, _Compare, random_access_iterator_tag,
55636ac495dSmrg       __gnu_parallel::_Parallelism __parallelism
55736ac495dSmrg       = __gnu_parallel::parallel_balanced);
55836ac495dSmrg 
55936ac495dSmrg 
56036ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
56136ac495dSmrg     _OIter
56236ac495dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
56336ac495dSmrg           __gnu_parallel::sequential_tag);
56436ac495dSmrg 
56536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
56636ac495dSmrg            typename _Compare>
56736ac495dSmrg     _OIter
56836ac495dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
56936ac495dSmrg           __gnu_parallel::sequential_tag);
57036ac495dSmrg 
57136ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
57236ac495dSmrg            typename _Compare>
57336ac495dSmrg     _OIter
57436ac495dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
57536ac495dSmrg 
57636ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
57736ac495dSmrg     _OIter
57836ac495dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
57936ac495dSmrg 
58036ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
58136ac495dSmrg            typename _Compare, typename _IterTag1, typename _IterTag2,
58236ac495dSmrg            typename _IterTag3>
58336ac495dSmrg     _OIter
58436ac495dSmrg     __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
58536ac495dSmrg                  _IterTag1, _IterTag2, _IterTag3);
58636ac495dSmrg 
58736ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
58836ac495dSmrg            typename _Compare>
58936ac495dSmrg     _OIter
59036ac495dSmrg     __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
59136ac495dSmrg                  random_access_iterator_tag, random_access_iterator_tag,
59236ac495dSmrg                  random_access_iterator_tag);
59336ac495dSmrg 
59436ac495dSmrg 
59536ac495dSmrg   template<typename _FIter>
59636ac495dSmrg     _FIter
59736ac495dSmrg     min_element(_FIter, _FIter);
59836ac495dSmrg 
59936ac495dSmrg   template<typename _FIter>
60036ac495dSmrg     _FIter
60136ac495dSmrg     min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
60236ac495dSmrg 
60336ac495dSmrg   template<typename _FIter>
60436ac495dSmrg     _FIter
60536ac495dSmrg     min_element(_FIter, _FIter,
60636ac495dSmrg                 __gnu_parallel::_Parallelism __parallelism_tag);
60736ac495dSmrg 
60836ac495dSmrg   template<typename _FIter, typename _Compare>
60936ac495dSmrg     _FIter
61036ac495dSmrg     min_element(_FIter, _FIter, _Compare);
61136ac495dSmrg 
61236ac495dSmrg   template<typename _FIter, typename _Compare>
61336ac495dSmrg     _FIter
61436ac495dSmrg     min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
61536ac495dSmrg 
61636ac495dSmrg   template<typename _FIter, typename _Compare>
61736ac495dSmrg     _FIter
61836ac495dSmrg     min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
61936ac495dSmrg 
62036ac495dSmrg   template<typename _FIter, typename _Compare, typename _IterTag>
62136ac495dSmrg     _FIter
62236ac495dSmrg     __min_element_switch(_FIter, _FIter, _Compare, _IterTag);
62336ac495dSmrg 
62436ac495dSmrg   template<typename _RAIter, typename _Compare>
62536ac495dSmrg     _RAIter
62636ac495dSmrg     __min_element_switch(
62736ac495dSmrg       _RAIter, _RAIter, _Compare, random_access_iterator_tag,
62836ac495dSmrg       __gnu_parallel::_Parallelism __parallelism
62936ac495dSmrg       = __gnu_parallel::parallel_balanced);
63036ac495dSmrg 
63136ac495dSmrg   template<typename _RAIter>
63236ac495dSmrg     void
63336ac495dSmrg     nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
63436ac495dSmrg 
63536ac495dSmrg   template<typename _RAIter, typename _Compare>
63636ac495dSmrg     void
63736ac495dSmrg     nth_element(_RAIter, _RAIter, _RAIter, _Compare,
63836ac495dSmrg                 __gnu_parallel::sequential_tag);
63936ac495dSmrg 
64036ac495dSmrg   template<typename _RAIter, typename _Compare>
64136ac495dSmrg     void
64236ac495dSmrg     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
64336ac495dSmrg 
64436ac495dSmrg   template<typename _RAIter>
64536ac495dSmrg     void
64636ac495dSmrg     nth_element(_RAIter, _RAIter, _RAIter);
64736ac495dSmrg 
64836ac495dSmrg   template<typename _RAIter, typename _Compare>
64936ac495dSmrg     void
65036ac495dSmrg     partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
65136ac495dSmrg                  __gnu_parallel::sequential_tag);
65236ac495dSmrg 
65336ac495dSmrg   template<typename _RAIter>
65436ac495dSmrg     void
65536ac495dSmrg     partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
65636ac495dSmrg 
65736ac495dSmrg   template<typename _RAIter, typename _Compare>
65836ac495dSmrg     void
65936ac495dSmrg     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
66036ac495dSmrg 
66136ac495dSmrg   template<typename _RAIter>
66236ac495dSmrg     void
66336ac495dSmrg     partial_sort(_RAIter, _RAIter, _RAIter);
66436ac495dSmrg 
66536ac495dSmrg   template<typename _FIter, typename _Predicate>
66636ac495dSmrg     _FIter
66736ac495dSmrg     partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag);
66836ac495dSmrg 
66936ac495dSmrg   template<typename _FIter, typename _Predicate>
67036ac495dSmrg     _FIter
67136ac495dSmrg     partition(_FIter, _FIter, _Predicate);
67236ac495dSmrg 
67336ac495dSmrg   template<typename _FIter, typename _Predicate, typename _IterTag>
67436ac495dSmrg     _FIter
67536ac495dSmrg     __partition_switch(_FIter, _FIter, _Predicate, _IterTag);
67636ac495dSmrg 
67736ac495dSmrg   template<typename _RAIter, typename _Predicate>
67836ac495dSmrg     _RAIter
67936ac495dSmrg     __partition_switch(
68036ac495dSmrg       _RAIter, _RAIter, _Predicate, random_access_iterator_tag);
68136ac495dSmrg 
68236ac495dSmrg   template<typename _RAIter>
68336ac495dSmrg     void
68436ac495dSmrg     random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
68536ac495dSmrg 
68636ac495dSmrg   template<typename _RAIter, typename _RandomNumberGenerator>
68736ac495dSmrg     void
68836ac495dSmrg     random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
68936ac495dSmrg                    __gnu_parallel::sequential_tag);
69036ac495dSmrg 
69136ac495dSmrg   template<typename _RAIter>
69236ac495dSmrg     void
69336ac495dSmrg     random_shuffle(_RAIter, _RAIter);
69436ac495dSmrg 
69536ac495dSmrg   template<typename _RAIter, typename _RandomNumberGenerator>
69636ac495dSmrg     void
69736ac495dSmrg     random_shuffle(_RAIter, _RAIter,
69836ac495dSmrg #if __cplusplus >= 201103L
69936ac495dSmrg 		   _RandomNumberGenerator&&);
70036ac495dSmrg #else
70136ac495dSmrg 		   _RandomNumberGenerator&);
70236ac495dSmrg #endif
70336ac495dSmrg 
70436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
70536ac495dSmrg     _OIter
70636ac495dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
70736ac495dSmrg             __gnu_parallel::sequential_tag);
70836ac495dSmrg 
70936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
71036ac495dSmrg            typename _Predicate>
71136ac495dSmrg     _OIter
71236ac495dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
71336ac495dSmrg               __gnu_parallel::sequential_tag);
71436ac495dSmrg 
71536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
71636ac495dSmrg     _OIter
71736ac495dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
71836ac495dSmrg 
71936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
72036ac495dSmrg            typename _Predicate>
72136ac495dSmrg     _OIter
72236ac495dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
72336ac495dSmrg 
72436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate,
72536ac495dSmrg            typename _OIter, typename _IterTag1, typename _IterTag2,
72636ac495dSmrg            typename _IterTag3>
72736ac495dSmrg     _OIter
72836ac495dSmrg     __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
72936ac495dSmrg                      _Predicate, _IterTag1, _IterTag2, _IterTag3);
73036ac495dSmrg 
73136ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
73236ac495dSmrg            typename _Predicate>
73336ac495dSmrg     _Output_RAIter
73436ac495dSmrg     __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
73536ac495dSmrg                      _Predicate, random_access_iterator_tag,
73636ac495dSmrg                      random_access_iterator_tag, random_access_iterator_tag);
73736ac495dSmrg 
73836ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
73936ac495dSmrg     _OIter
74036ac495dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
74136ac495dSmrg                      __gnu_parallel::sequential_tag);
74236ac495dSmrg 
74336ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
74436ac495dSmrg            typename _Predicate>
74536ac495dSmrg     _OIter
74636ac495dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
74736ac495dSmrg                      __gnu_parallel::sequential_tag);
74836ac495dSmrg 
74936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
75036ac495dSmrg     _OIter
75136ac495dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
75236ac495dSmrg 
75336ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
75436ac495dSmrg            typename _Predicate>
75536ac495dSmrg     _OIter
75636ac495dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
75736ac495dSmrg 
75836ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate,
75936ac495dSmrg            typename _OIter, typename _IterTag1, typename _IterTag2,
76036ac495dSmrg            typename _IterTag3>
76136ac495dSmrg     _OIter
76236ac495dSmrg     __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
76336ac495dSmrg                             _Predicate, _IterTag1, _IterTag2, _IterTag3);
76436ac495dSmrg 
76536ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
76636ac495dSmrg            typename _Predicate>
76736ac495dSmrg     _Output_RAIter
76836ac495dSmrg     __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
76936ac495dSmrg                             _Output_RAIter, _Predicate,
77036ac495dSmrg                             random_access_iterator_tag,
77136ac495dSmrg                             random_access_iterator_tag,
77236ac495dSmrg                             random_access_iterator_tag);
77336ac495dSmrg 
77436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
77536ac495dSmrg     _OIter
77636ac495dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
77736ac495dSmrg                              __gnu_parallel::sequential_tag);
77836ac495dSmrg 
77936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
78036ac495dSmrg            typename _Predicate>
78136ac495dSmrg     _OIter
78236ac495dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
78336ac495dSmrg                              _Predicate, __gnu_parallel::sequential_tag);
78436ac495dSmrg 
78536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
78636ac495dSmrg     _OIter
78736ac495dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
78836ac495dSmrg 
78936ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
79036ac495dSmrg            typename _Predicate>
79136ac495dSmrg     _OIter
79236ac495dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
79336ac495dSmrg                              _Predicate);
79436ac495dSmrg 
79536ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate,
79636ac495dSmrg            typename _OIter, typename _IterTag1, typename _IterTag2,
79736ac495dSmrg            typename _IterTag3>
79836ac495dSmrg     _OIter
79936ac495dSmrg     __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
80036ac495dSmrg                                     _OIter, _Predicate, _IterTag1, _IterTag2,
80136ac495dSmrg                                     _IterTag3);
80236ac495dSmrg 
80336ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
80436ac495dSmrg            typename _Predicate>
80536ac495dSmrg     _Output_RAIter
80636ac495dSmrg     __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
80736ac495dSmrg                                     _Output_RAIter, _Predicate,
80836ac495dSmrg                                     random_access_iterator_tag,
80936ac495dSmrg                                     random_access_iterator_tag,
81036ac495dSmrg                                     random_access_iterator_tag);
81136ac495dSmrg 
81236ac495dSmrg 
81336ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
81436ac495dSmrg     _OIter
81536ac495dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
81636ac495dSmrg                    __gnu_parallel::sequential_tag);
81736ac495dSmrg 
81836ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
81936ac495dSmrg            typename _Predicate>
82036ac495dSmrg     _OIter
82136ac495dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
82236ac495dSmrg                    __gnu_parallel::sequential_tag);
82336ac495dSmrg 
82436ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
82536ac495dSmrg     _OIter
82636ac495dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
82736ac495dSmrg 
82836ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
82936ac495dSmrg            typename _Predicate>
83036ac495dSmrg     _OIter
83136ac495dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
83236ac495dSmrg 
83336ac495dSmrg   template<typename _IIter1, typename _IIter2, typename _Predicate,
83436ac495dSmrg            typename _OIter, typename _IterTag1, typename _IterTag2,
83536ac495dSmrg            typename _IterTag3>
83636ac495dSmrg     _OIter
83736ac495dSmrg     __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
83836ac495dSmrg                           _Predicate, _IterTag1, _IterTag2, _IterTag3);
83936ac495dSmrg 
84036ac495dSmrg   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
84136ac495dSmrg            typename _Predicate>
84236ac495dSmrg     _Output_RAIter
84336ac495dSmrg     __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
84436ac495dSmrg                           _Output_RAIter, _Predicate,
84536ac495dSmrg                           random_access_iterator_tag,
84636ac495dSmrg                           random_access_iterator_tag,
84736ac495dSmrg                           random_access_iterator_tag);
84836ac495dSmrg 
84936ac495dSmrg 
85036ac495dSmrg   template<typename _RAIter>
85136ac495dSmrg     void
85236ac495dSmrg     sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
85336ac495dSmrg 
85436ac495dSmrg   template<typename _RAIter, typename _Compare>
85536ac495dSmrg     void
85636ac495dSmrg     sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
85736ac495dSmrg 
85836ac495dSmrg   template<typename _RAIter>
85936ac495dSmrg     void
86036ac495dSmrg     sort(_RAIter, _RAIter);
86136ac495dSmrg 
86236ac495dSmrg   template<typename _RAIter, typename _Compare>
86336ac495dSmrg     void
86436ac495dSmrg     sort(_RAIter, _RAIter, _Compare);
86536ac495dSmrg 
86636ac495dSmrg   template<typename _RAIter>
86736ac495dSmrg     void
86836ac495dSmrg     stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
86936ac495dSmrg 
87036ac495dSmrg   template<typename _RAIter, typename _Compare>
87136ac495dSmrg     void
87236ac495dSmrg     stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
87336ac495dSmrg 
87436ac495dSmrg   template<typename _RAIter>
87536ac495dSmrg     void
87636ac495dSmrg     stable_sort(_RAIter, _RAIter);
87736ac495dSmrg 
87836ac495dSmrg   template<typename _RAIter, typename _Compare>
87936ac495dSmrg     void
88036ac495dSmrg     stable_sort(_RAIter, _RAIter, _Compare);
88136ac495dSmrg 
88236ac495dSmrg   template<typename _IIter, typename _OIter>
88336ac495dSmrg     _OIter
88436ac495dSmrg     unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
88536ac495dSmrg 
88636ac495dSmrg   template<typename _IIter, typename _OIter, typename _Predicate>
88736ac495dSmrg     _OIter
88836ac495dSmrg     unique_copy(_IIter, _IIter, _OIter, _Predicate,
88936ac495dSmrg                 __gnu_parallel::sequential_tag);
89036ac495dSmrg 
89136ac495dSmrg   template<typename _IIter, typename _OIter>
89236ac495dSmrg     _OIter
89336ac495dSmrg     unique_copy(_IIter, _IIter, _OIter);
89436ac495dSmrg 
89536ac495dSmrg   template<typename _IIter, typename _OIter, typename _Predicate>
89636ac495dSmrg     _OIter
89736ac495dSmrg     unique_copy(_IIter, _IIter, _OIter, _Predicate);
89836ac495dSmrg 
89936ac495dSmrg   template<typename _IIter, typename _OIter, typename _Predicate,
90036ac495dSmrg            typename _IterTag1, typename _IterTag2>
90136ac495dSmrg     _OIter
90236ac495dSmrg     __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
90336ac495dSmrg                        _IterTag1, _IterTag2);
90436ac495dSmrg 
90536ac495dSmrg   template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
90636ac495dSmrg     _RandomAccess_OIter
90736ac495dSmrg     __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
90836ac495dSmrg                        random_access_iterator_tag, random_access_iterator_tag);
90936ac495dSmrg } // end namespace __parallel
91036ac495dSmrg } // end namespace std
91136ac495dSmrg 
91236ac495dSmrg #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */
913