xref: /dflybsd-src/contrib/gcc-4.7/libstdc++-v3/include/bits/algorithmfwd.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino // <algorithm> declarations  -*- C++ -*-
2*e4b17023SJohn Marino 
3*e4b17023SJohn Marino // Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4*e4b17023SJohn Marino //
5*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library.  This library is free
6*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the
7*e4b17023SJohn Marino // terms of the GNU General Public License as published by the
8*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option)
9*e4b17023SJohn Marino // any later version.
10*e4b17023SJohn Marino 
11*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful,
12*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of
13*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*e4b17023SJohn Marino // GNU General Public License for more details.
15*e4b17023SJohn Marino 
16*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional
17*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version
18*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation.
19*e4b17023SJohn Marino 
20*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and
21*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program;
22*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>.
24*e4b17023SJohn Marino 
25*e4b17023SJohn Marino /** @file bits/algorithmfwd.h
26*e4b17023SJohn Marino  *  This is an internal header file, included by other library headers.
27*e4b17023SJohn Marino  *  Do not attempt to use it directly. @headername{algorithm}
28*e4b17023SJohn Marino  */
29*e4b17023SJohn Marino 
30*e4b17023SJohn Marino #ifndef _GLIBCXX_ALGORITHMFWD_H
31*e4b17023SJohn Marino #define _GLIBCXX_ALGORITHMFWD_H 1
32*e4b17023SJohn Marino 
33*e4b17023SJohn Marino #pragma GCC system_header
34*e4b17023SJohn Marino 
35*e4b17023SJohn Marino #include <bits/c++config.h>
36*e4b17023SJohn Marino #include <bits/stl_pair.h>
37*e4b17023SJohn Marino #include <bits/stl_iterator_base_types.h>
38*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
39*e4b17023SJohn Marino #include <initializer_list>
40*e4b17023SJohn Marino #endif
41*e4b17023SJohn Marino 
_GLIBCXX_VISIBILITY(default)42*e4b17023SJohn Marino namespace std _GLIBCXX_VISIBILITY(default)
43*e4b17023SJohn Marino {
44*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION
45*e4b17023SJohn Marino 
46*e4b17023SJohn Marino   /*
47*e4b17023SJohn Marino     adjacent_find
48*e4b17023SJohn Marino     all_of (C++0x)
49*e4b17023SJohn Marino     any_of (C++0x)
50*e4b17023SJohn Marino     binary_search
51*e4b17023SJohn Marino     copy
52*e4b17023SJohn Marino     copy_backward
53*e4b17023SJohn Marino     copy_if (C++0x)
54*e4b17023SJohn Marino     copy_n (C++0x)
55*e4b17023SJohn Marino     count
56*e4b17023SJohn Marino     count_if
57*e4b17023SJohn Marino     equal
58*e4b17023SJohn Marino     equal_range
59*e4b17023SJohn Marino     fill
60*e4b17023SJohn Marino     fill_n
61*e4b17023SJohn Marino     find
62*e4b17023SJohn Marino     find_end
63*e4b17023SJohn Marino     find_first_of
64*e4b17023SJohn Marino     find_if
65*e4b17023SJohn Marino     find_if_not (C++0x)
66*e4b17023SJohn Marino     for_each
67*e4b17023SJohn Marino     generate
68*e4b17023SJohn Marino     generate_n
69*e4b17023SJohn Marino     includes
70*e4b17023SJohn Marino     inplace_merge
71*e4b17023SJohn Marino     is_heap (C++0x)
72*e4b17023SJohn Marino     is_heap_until (C++0x)
73*e4b17023SJohn Marino     is_partitioned (C++0x)
74*e4b17023SJohn Marino     is_sorted (C++0x)
75*e4b17023SJohn Marino     is_sorted_until (C++0x)
76*e4b17023SJohn Marino     iter_swap
77*e4b17023SJohn Marino     lexicographical_compare
78*e4b17023SJohn Marino     lower_bound
79*e4b17023SJohn Marino     make_heap
80*e4b17023SJohn Marino     max
81*e4b17023SJohn Marino     max_element
82*e4b17023SJohn Marino     merge
83*e4b17023SJohn Marino     min
84*e4b17023SJohn Marino     min_element
85*e4b17023SJohn Marino     minmax (C++0x)
86*e4b17023SJohn Marino     minmax_element (C++0x)
87*e4b17023SJohn Marino     mismatch
88*e4b17023SJohn Marino     next_permutation
89*e4b17023SJohn Marino     none_of (C++0x)
90*e4b17023SJohn Marino     nth_element
91*e4b17023SJohn Marino     partial_sort
92*e4b17023SJohn Marino     partial_sort_copy
93*e4b17023SJohn Marino     partition
94*e4b17023SJohn Marino     partition_copy (C++0x)
95*e4b17023SJohn Marino     partition_point (C++0x)
96*e4b17023SJohn Marino     pop_heap
97*e4b17023SJohn Marino     prev_permutation
98*e4b17023SJohn Marino     push_heap
99*e4b17023SJohn Marino     random_shuffle
100*e4b17023SJohn Marino     remove
101*e4b17023SJohn Marino     remove_copy
102*e4b17023SJohn Marino     remove_copy_if
103*e4b17023SJohn Marino     remove_if
104*e4b17023SJohn Marino     replace
105*e4b17023SJohn Marino     replace_copy
106*e4b17023SJohn Marino     replace_copy_if
107*e4b17023SJohn Marino     replace_if
108*e4b17023SJohn Marino     reverse
109*e4b17023SJohn Marino     reverse_copy
110*e4b17023SJohn Marino     rotate
111*e4b17023SJohn Marino     rotate_copy
112*e4b17023SJohn Marino     search
113*e4b17023SJohn Marino     search_n
114*e4b17023SJohn Marino     set_difference
115*e4b17023SJohn Marino     set_intersection
116*e4b17023SJohn Marino     set_symmetric_difference
117*e4b17023SJohn Marino     set_union
118*e4b17023SJohn Marino     shuffle (C++0x)
119*e4b17023SJohn Marino     sort
120*e4b17023SJohn Marino     sort_heap
121*e4b17023SJohn Marino     stable_partition
122*e4b17023SJohn Marino     stable_sort
123*e4b17023SJohn Marino     swap
124*e4b17023SJohn Marino     swap_ranges
125*e4b17023SJohn Marino     transform
126*e4b17023SJohn Marino     unique
127*e4b17023SJohn Marino     unique_copy
128*e4b17023SJohn Marino     upper_bound
129*e4b17023SJohn Marino   */
130*e4b17023SJohn Marino 
131*e4b17023SJohn Marino   /**
132*e4b17023SJohn Marino    * @defgroup algorithms Algorithms
133*e4b17023SJohn Marino    *
134*e4b17023SJohn Marino    * Components for performing algorithmic operations. Includes
135*e4b17023SJohn Marino    * non-modifying sequence, modifying (mutating) sequence, sorting,
136*e4b17023SJohn Marino    * searching, merge, partition, heap, set, minima, maxima, and
137*e4b17023SJohn Marino    * permutation operations.
138*e4b17023SJohn Marino    */
139*e4b17023SJohn Marino 
140*e4b17023SJohn Marino   /**
141*e4b17023SJohn Marino    * @defgroup mutating_algorithms Mutating
142*e4b17023SJohn Marino    * @ingroup algorithms
143*e4b17023SJohn Marino    */
144*e4b17023SJohn Marino 
145*e4b17023SJohn Marino   /**
146*e4b17023SJohn Marino    * @defgroup non_mutating_algorithms Non-Mutating
147*e4b17023SJohn Marino    * @ingroup algorithms
148*e4b17023SJohn Marino    */
149*e4b17023SJohn Marino 
150*e4b17023SJohn Marino   /**
151*e4b17023SJohn Marino    * @defgroup sorting_algorithms Sorting
152*e4b17023SJohn Marino    * @ingroup algorithms
153*e4b17023SJohn Marino    */
154*e4b17023SJohn Marino 
155*e4b17023SJohn Marino   /**
156*e4b17023SJohn Marino    * @defgroup set_algorithms Set Operation
157*e4b17023SJohn Marino    * @ingroup sorting_algorithms
158*e4b17023SJohn Marino    *
159*e4b17023SJohn Marino    * These algorithms are common set operations performed on sequences
160*e4b17023SJohn Marino    * that are already sorted. The number of comparisons will be
161*e4b17023SJohn Marino    * linear.
162*e4b17023SJohn Marino    */
163*e4b17023SJohn Marino 
164*e4b17023SJohn Marino   /**
165*e4b17023SJohn Marino    * @defgroup binary_search_algorithms Binary Search
166*e4b17023SJohn Marino    * @ingroup sorting_algorithms
167*e4b17023SJohn Marino    *
168*e4b17023SJohn Marino    * These algorithms are variations of a classic binary search, and
169*e4b17023SJohn Marino    * all assume that the sequence being searched is already sorted.
170*e4b17023SJohn Marino    *
171*e4b17023SJohn Marino    * The number of comparisons will be logarithmic (and as few as
172*e4b17023SJohn Marino    * possible).  The number of steps through the sequence will be
173*e4b17023SJohn Marino    * logarithmic for random-access iterators (e.g., pointers), and
174*e4b17023SJohn Marino    * linear otherwise.
175*e4b17023SJohn Marino    *
176*e4b17023SJohn Marino    * The LWG has passed Defect Report 270, which notes: <em>The
177*e4b17023SJohn Marino    * proposed resolution reinterprets binary search. Instead of
178*e4b17023SJohn Marino    * thinking about searching for a value in a sorted range, we view
179*e4b17023SJohn Marino    * that as an important special case of a more general algorithm:
180*e4b17023SJohn Marino    * searching for the partition point in a partitioned range.  We
181*e4b17023SJohn Marino    * also add a guarantee that the old wording did not: we ensure that
182*e4b17023SJohn Marino    * the upper bound is no earlier than the lower bound, that the pair
183*e4b17023SJohn Marino    * returned by equal_range is a valid range, and that the first part
184*e4b17023SJohn Marino    * of that pair is the lower bound.</em>
185*e4b17023SJohn Marino    *
186*e4b17023SJohn Marino    * The actual effect of the first sentence is that a comparison
187*e4b17023SJohn Marino    * functor passed by the user doesn't necessarily need to induce a
188*e4b17023SJohn Marino    * strict weak ordering relation.  Rather, it partitions the range.
189*e4b17023SJohn Marino    */
190*e4b17023SJohn Marino 
191*e4b17023SJohn Marino   // adjacent_find
192*e4b17023SJohn Marino 
193*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
194*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
195*e4b17023SJohn Marino     bool
196*e4b17023SJohn Marino     all_of(_IIter, _IIter, _Predicate);
197*e4b17023SJohn Marino 
198*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
199*e4b17023SJohn Marino     bool
200*e4b17023SJohn Marino     any_of(_IIter, _IIter, _Predicate);
201*e4b17023SJohn Marino #endif
202*e4b17023SJohn Marino 
203*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
204*e4b17023SJohn Marino     bool
205*e4b17023SJohn Marino     binary_search(_FIter, _FIter, const _Tp&);
206*e4b17023SJohn Marino 
207*e4b17023SJohn Marino   template<typename _FIter, typename _Tp, typename _Compare>
208*e4b17023SJohn Marino     bool
209*e4b17023SJohn Marino     binary_search(_FIter, _FIter, const _Tp&, _Compare);
210*e4b17023SJohn Marino 
211*e4b17023SJohn Marino   template<typename _IIter, typename _OIter>
212*e4b17023SJohn Marino     _OIter
213*e4b17023SJohn Marino     copy(_IIter, _IIter, _OIter);
214*e4b17023SJohn Marino 
215*e4b17023SJohn Marino   template<typename _BIter1, typename _BIter2>
216*e4b17023SJohn Marino     _BIter2
217*e4b17023SJohn Marino     copy_backward(_BIter1, _BIter1, _BIter2);
218*e4b17023SJohn Marino 
219*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
220*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _Predicate>
221*e4b17023SJohn Marino     _OIter
222*e4b17023SJohn Marino     copy_if(_IIter, _IIter, _OIter, _Predicate);
223*e4b17023SJohn Marino 
224*e4b17023SJohn Marino   template<typename _IIter, typename _Size, typename _OIter>
225*e4b17023SJohn Marino     _OIter
226*e4b17023SJohn Marino     copy_n(_IIter, _Size, _OIter);
227*e4b17023SJohn Marino #endif
228*e4b17023SJohn Marino 
229*e4b17023SJohn Marino   // count
230*e4b17023SJohn Marino   // count_if
231*e4b17023SJohn Marino 
232*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
233*e4b17023SJohn Marino     pair<_FIter, _FIter>
234*e4b17023SJohn Marino     equal_range(_FIter, _FIter, const _Tp&);
235*e4b17023SJohn Marino 
236*e4b17023SJohn Marino   template<typename _FIter, typename _Tp, typename _Compare>
237*e4b17023SJohn Marino     pair<_FIter, _FIter>
238*e4b17023SJohn Marino     equal_range(_FIter, _FIter, const _Tp&, _Compare);
239*e4b17023SJohn Marino 
240*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
241*e4b17023SJohn Marino     void
242*e4b17023SJohn Marino     fill(_FIter, _FIter, const _Tp&);
243*e4b17023SJohn Marino 
244*e4b17023SJohn Marino   template<typename _OIter, typename _Size, typename _Tp>
245*e4b17023SJohn Marino     _OIter
246*e4b17023SJohn Marino     fill_n(_OIter, _Size, const _Tp&);
247*e4b17023SJohn Marino 
248*e4b17023SJohn Marino   // find
249*e4b17023SJohn Marino 
250*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
251*e4b17023SJohn Marino     _FIter1
252*e4b17023SJohn Marino     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
253*e4b17023SJohn Marino 
254*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
255*e4b17023SJohn Marino     _FIter1
256*e4b17023SJohn Marino     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
257*e4b17023SJohn Marino 
258*e4b17023SJohn Marino   // find_first_of
259*e4b17023SJohn Marino   // find_if
260*e4b17023SJohn Marino 
261*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
262*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
263*e4b17023SJohn Marino     _IIter
264*e4b17023SJohn Marino     find_if_not(_IIter, _IIter, _Predicate);
265*e4b17023SJohn Marino #endif
266*e4b17023SJohn Marino 
267*e4b17023SJohn Marino   // for_each
268*e4b17023SJohn Marino   // generate
269*e4b17023SJohn Marino   // generate_n
270*e4b17023SJohn Marino 
271*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2>
272*e4b17023SJohn Marino     bool
273*e4b17023SJohn Marino     includes(_IIter1, _IIter1, _IIter2, _IIter2);
274*e4b17023SJohn Marino 
275*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _Compare>
276*e4b17023SJohn Marino     bool
277*e4b17023SJohn Marino     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
278*e4b17023SJohn Marino 
279*e4b17023SJohn Marino   template<typename _BIter>
280*e4b17023SJohn Marino     void
281*e4b17023SJohn Marino     inplace_merge(_BIter, _BIter, _BIter);
282*e4b17023SJohn Marino 
283*e4b17023SJohn Marino   template<typename _BIter, typename _Compare>
284*e4b17023SJohn Marino     void
285*e4b17023SJohn Marino     inplace_merge(_BIter, _BIter, _BIter, _Compare);
286*e4b17023SJohn Marino 
287*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
288*e4b17023SJohn Marino   template<typename _RAIter>
289*e4b17023SJohn Marino     bool
290*e4b17023SJohn Marino     is_heap(_RAIter, _RAIter);
291*e4b17023SJohn Marino 
292*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
293*e4b17023SJohn Marino     bool
294*e4b17023SJohn Marino     is_heap(_RAIter, _RAIter, _Compare);
295*e4b17023SJohn Marino 
296*e4b17023SJohn Marino   template<typename _RAIter>
297*e4b17023SJohn Marino     _RAIter
298*e4b17023SJohn Marino     is_heap_until(_RAIter, _RAIter);
299*e4b17023SJohn Marino 
300*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
301*e4b17023SJohn Marino     _RAIter
302*e4b17023SJohn Marino     is_heap_until(_RAIter, _RAIter, _Compare);
303*e4b17023SJohn Marino 
304*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
305*e4b17023SJohn Marino     bool
306*e4b17023SJohn Marino     is_partitioned(_IIter, _IIter, _Predicate);
307*e4b17023SJohn Marino 
308*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
309*e4b17023SJohn Marino     bool
310*e4b17023SJohn Marino     is_permutation(_FIter1, _FIter1, _FIter2);
311*e4b17023SJohn Marino 
312*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2,
313*e4b17023SJohn Marino 	   typename _BinaryPredicate>
314*e4b17023SJohn Marino     bool
315*e4b17023SJohn Marino     is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
316*e4b17023SJohn Marino 
317*e4b17023SJohn Marino   template<typename _FIter>
318*e4b17023SJohn Marino     bool
319*e4b17023SJohn Marino     is_sorted(_FIter, _FIter);
320*e4b17023SJohn Marino 
321*e4b17023SJohn Marino   template<typename _FIter, typename _Compare>
322*e4b17023SJohn Marino     bool
323*e4b17023SJohn Marino     is_sorted(_FIter, _FIter, _Compare);
324*e4b17023SJohn Marino 
325*e4b17023SJohn Marino   template<typename _FIter>
326*e4b17023SJohn Marino     _FIter
327*e4b17023SJohn Marino     is_sorted_until(_FIter, _FIter);
328*e4b17023SJohn Marino 
329*e4b17023SJohn Marino   template<typename _FIter, typename _Compare>
330*e4b17023SJohn Marino     _FIter
331*e4b17023SJohn Marino     is_sorted_until(_FIter, _FIter, _Compare);
332*e4b17023SJohn Marino #endif
333*e4b17023SJohn Marino 
334*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
335*e4b17023SJohn Marino     void
336*e4b17023SJohn Marino     iter_swap(_FIter1, _FIter2);
337*e4b17023SJohn Marino 
338*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
339*e4b17023SJohn Marino     _FIter
340*e4b17023SJohn Marino     lower_bound(_FIter, _FIter, const _Tp&);
341*e4b17023SJohn Marino 
342*e4b17023SJohn Marino   template<typename _FIter, typename _Tp, typename _Compare>
343*e4b17023SJohn Marino     _FIter
344*e4b17023SJohn Marino     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
345*e4b17023SJohn Marino 
346*e4b17023SJohn Marino   template<typename _RAIter>
347*e4b17023SJohn Marino     void
348*e4b17023SJohn Marino     make_heap(_RAIter, _RAIter);
349*e4b17023SJohn Marino 
350*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
351*e4b17023SJohn Marino     void
352*e4b17023SJohn Marino     make_heap(_RAIter, _RAIter, _Compare);
353*e4b17023SJohn Marino 
354*e4b17023SJohn Marino   template<typename _Tp>
355*e4b17023SJohn Marino     const _Tp&
356*e4b17023SJohn Marino     max(const _Tp&, const _Tp&);
357*e4b17023SJohn Marino 
358*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
359*e4b17023SJohn Marino     const _Tp&
360*e4b17023SJohn Marino     max(const _Tp&, const _Tp&, _Compare);
361*e4b17023SJohn Marino 
362*e4b17023SJohn Marino   // max_element
363*e4b17023SJohn Marino   // merge
364*e4b17023SJohn Marino 
365*e4b17023SJohn Marino   template<typename _Tp>
366*e4b17023SJohn Marino     const _Tp&
367*e4b17023SJohn Marino     min(const _Tp&, const _Tp&);
368*e4b17023SJohn Marino 
369*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
370*e4b17023SJohn Marino     const _Tp&
371*e4b17023SJohn Marino     min(const _Tp&, const _Tp&, _Compare);
372*e4b17023SJohn Marino 
373*e4b17023SJohn Marino   // min_element
374*e4b17023SJohn Marino 
375*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
376*e4b17023SJohn Marino   template<typename _Tp>
377*e4b17023SJohn Marino     pair<const _Tp&, const _Tp&>
378*e4b17023SJohn Marino     minmax(const _Tp&, const _Tp&);
379*e4b17023SJohn Marino 
380*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
381*e4b17023SJohn Marino     pair<const _Tp&, const _Tp&>
382*e4b17023SJohn Marino     minmax(const _Tp&, const _Tp&, _Compare);
383*e4b17023SJohn Marino 
384*e4b17023SJohn Marino   template<typename _FIter>
385*e4b17023SJohn Marino     pair<_FIter, _FIter>
386*e4b17023SJohn Marino     minmax_element(_FIter, _FIter);
387*e4b17023SJohn Marino 
388*e4b17023SJohn Marino   template<typename _FIter, typename _Compare>
389*e4b17023SJohn Marino     pair<_FIter, _FIter>
390*e4b17023SJohn Marino     minmax_element(_FIter, _FIter, _Compare);
391*e4b17023SJohn Marino 
392*e4b17023SJohn Marino   template<typename _Tp>
393*e4b17023SJohn Marino     _Tp
394*e4b17023SJohn Marino     min(initializer_list<_Tp>);
395*e4b17023SJohn Marino 
396*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
397*e4b17023SJohn Marino     _Tp
398*e4b17023SJohn Marino     min(initializer_list<_Tp>, _Compare);
399*e4b17023SJohn Marino 
400*e4b17023SJohn Marino   template<typename _Tp>
401*e4b17023SJohn Marino     _Tp
402*e4b17023SJohn Marino     max(initializer_list<_Tp>);
403*e4b17023SJohn Marino 
404*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
405*e4b17023SJohn Marino     _Tp
406*e4b17023SJohn Marino     max(initializer_list<_Tp>, _Compare);
407*e4b17023SJohn Marino 
408*e4b17023SJohn Marino   template<typename _Tp>
409*e4b17023SJohn Marino     pair<_Tp, _Tp>
410*e4b17023SJohn Marino     minmax(initializer_list<_Tp>);
411*e4b17023SJohn Marino 
412*e4b17023SJohn Marino   template<typename _Tp, typename _Compare>
413*e4b17023SJohn Marino     pair<_Tp, _Tp>
414*e4b17023SJohn Marino     minmax(initializer_list<_Tp>, _Compare);
415*e4b17023SJohn Marino #endif
416*e4b17023SJohn Marino 
417*e4b17023SJohn Marino   // mismatch
418*e4b17023SJohn Marino 
419*e4b17023SJohn Marino   template<typename _BIter>
420*e4b17023SJohn Marino     bool
421*e4b17023SJohn Marino     next_permutation(_BIter, _BIter);
422*e4b17023SJohn Marino 
423*e4b17023SJohn Marino   template<typename _BIter, typename _Compare>
424*e4b17023SJohn Marino     bool
425*e4b17023SJohn Marino     next_permutation(_BIter, _BIter, _Compare);
426*e4b17023SJohn Marino 
427*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
428*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
429*e4b17023SJohn Marino     bool
430*e4b17023SJohn Marino     none_of(_IIter, _IIter, _Predicate);
431*e4b17023SJohn Marino #endif
432*e4b17023SJohn Marino 
433*e4b17023SJohn Marino   // nth_element
434*e4b17023SJohn Marino   // partial_sort
435*e4b17023SJohn Marino 
436*e4b17023SJohn Marino   template<typename _IIter, typename _RAIter>
437*e4b17023SJohn Marino     _RAIter
438*e4b17023SJohn Marino     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
439*e4b17023SJohn Marino 
440*e4b17023SJohn Marino   template<typename _IIter, typename _RAIter, typename _Compare>
441*e4b17023SJohn Marino     _RAIter
442*e4b17023SJohn Marino     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
443*e4b17023SJohn Marino 
444*e4b17023SJohn Marino   // partition
445*e4b17023SJohn Marino 
446*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
447*e4b17023SJohn Marino   template<typename _IIter, typename _OIter1,
448*e4b17023SJohn Marino 	   typename _OIter2, typename _Predicate>
449*e4b17023SJohn Marino     pair<_OIter1, _OIter2>
450*e4b17023SJohn Marino     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
451*e4b17023SJohn Marino 
452*e4b17023SJohn Marino   template<typename _FIter, typename _Predicate>
453*e4b17023SJohn Marino     _FIter
454*e4b17023SJohn Marino     partition_point(_FIter, _FIter, _Predicate);
455*e4b17023SJohn Marino #endif
456*e4b17023SJohn Marino 
457*e4b17023SJohn Marino   template<typename _RAIter>
458*e4b17023SJohn Marino     void
459*e4b17023SJohn Marino     pop_heap(_RAIter, _RAIter);
460*e4b17023SJohn Marino 
461*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
462*e4b17023SJohn Marino     void
463*e4b17023SJohn Marino     pop_heap(_RAIter, _RAIter, _Compare);
464*e4b17023SJohn Marino 
465*e4b17023SJohn Marino   template<typename _BIter>
466*e4b17023SJohn Marino     bool
467*e4b17023SJohn Marino     prev_permutation(_BIter, _BIter);
468*e4b17023SJohn Marino 
469*e4b17023SJohn Marino   template<typename _BIter, typename _Compare>
470*e4b17023SJohn Marino     bool
471*e4b17023SJohn Marino     prev_permutation(_BIter, _BIter, _Compare);
472*e4b17023SJohn Marino 
473*e4b17023SJohn Marino   template<typename _RAIter>
474*e4b17023SJohn Marino     void
475*e4b17023SJohn Marino     push_heap(_RAIter, _RAIter);
476*e4b17023SJohn Marino 
477*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
478*e4b17023SJohn Marino     void
479*e4b17023SJohn Marino     push_heap(_RAIter, _RAIter, _Compare);
480*e4b17023SJohn Marino 
481*e4b17023SJohn Marino   // random_shuffle
482*e4b17023SJohn Marino 
483*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
484*e4b17023SJohn Marino     _FIter
485*e4b17023SJohn Marino     remove(_FIter, _FIter, const _Tp&);
486*e4b17023SJohn Marino 
487*e4b17023SJohn Marino   template<typename _FIter, typename _Predicate>
488*e4b17023SJohn Marino     _FIter
489*e4b17023SJohn Marino     remove_if(_FIter, _FIter, _Predicate);
490*e4b17023SJohn Marino 
491*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _Tp>
492*e4b17023SJohn Marino     _OIter
493*e4b17023SJohn Marino     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
494*e4b17023SJohn Marino 
495*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _Predicate>
496*e4b17023SJohn Marino     _OIter
497*e4b17023SJohn Marino     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
498*e4b17023SJohn Marino 
499*e4b17023SJohn Marino   // replace
500*e4b17023SJohn Marino 
501*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _Tp>
502*e4b17023SJohn Marino     _OIter
503*e4b17023SJohn Marino     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
504*e4b17023SJohn Marino 
505*e4b17023SJohn Marino   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
506*e4b17023SJohn Marino     _OIter
507*e4b17023SJohn Marino     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
508*e4b17023SJohn Marino 
509*e4b17023SJohn Marino   // replace_if
510*e4b17023SJohn Marino 
511*e4b17023SJohn Marino   template<typename _BIter>
512*e4b17023SJohn Marino     void
513*e4b17023SJohn Marino     reverse(_BIter, _BIter);
514*e4b17023SJohn Marino 
515*e4b17023SJohn Marino   template<typename _BIter, typename _OIter>
516*e4b17023SJohn Marino     _OIter
517*e4b17023SJohn Marino     reverse_copy(_BIter, _BIter, _OIter);
518*e4b17023SJohn Marino 
519*e4b17023SJohn Marino   template<typename _FIter>
520*e4b17023SJohn Marino     void
521*e4b17023SJohn Marino     rotate(_FIter, _FIter, _FIter);
522*e4b17023SJohn Marino 
523*e4b17023SJohn Marino   template<typename _FIter, typename _OIter>
524*e4b17023SJohn Marino     _OIter
525*e4b17023SJohn Marino     rotate_copy(_FIter, _FIter, _FIter, _OIter);
526*e4b17023SJohn Marino 
527*e4b17023SJohn Marino   // search
528*e4b17023SJohn Marino   // search_n
529*e4b17023SJohn Marino   // set_difference
530*e4b17023SJohn Marino   // set_intersection
531*e4b17023SJohn Marino   // set_symmetric_difference
532*e4b17023SJohn Marino   // set_union
533*e4b17023SJohn Marino 
534*e4b17023SJohn Marino #if defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
535*e4b17023SJohn Marino   template<typename _RAIter, typename _UGenerator>
536*e4b17023SJohn Marino     void
537*e4b17023SJohn Marino     shuffle(_RAIter, _RAIter, _UGenerator&&);
538*e4b17023SJohn Marino #endif
539*e4b17023SJohn Marino 
540*e4b17023SJohn Marino   template<typename _RAIter>
541*e4b17023SJohn Marino     void
542*e4b17023SJohn Marino     sort_heap(_RAIter, _RAIter);
543*e4b17023SJohn Marino 
544*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
545*e4b17023SJohn Marino     void
546*e4b17023SJohn Marino     sort_heap(_RAIter, _RAIter, _Compare);
547*e4b17023SJohn Marino 
548*e4b17023SJohn Marino   template<typename _BIter, typename _Predicate>
549*e4b17023SJohn Marino     _BIter
550*e4b17023SJohn Marino     stable_partition(_BIter, _BIter, _Predicate);
551*e4b17023SJohn Marino 
552*e4b17023SJohn Marino   template<typename _Tp>
553*e4b17023SJohn Marino     void
554*e4b17023SJohn Marino     swap(_Tp&, _Tp&)
555*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
556*e4b17023SJohn Marino     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
557*e4b17023SJohn Marino 	            is_nothrow_move_assignable<_Tp>>::value)
558*e4b17023SJohn Marino #endif
559*e4b17023SJohn Marino     ;
560*e4b17023SJohn Marino 
561*e4b17023SJohn Marino   template<typename _Tp, size_t _Nm>
562*e4b17023SJohn Marino     void
563*e4b17023SJohn Marino     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
564*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
565*e4b17023SJohn Marino     noexcept(noexcept(swap(*__a, *__b)))
566*e4b17023SJohn Marino #endif
567*e4b17023SJohn Marino     ;
568*e4b17023SJohn Marino 
569*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
570*e4b17023SJohn Marino     _FIter2
571*e4b17023SJohn Marino     swap_ranges(_FIter1, _FIter1, _FIter2);
572*e4b17023SJohn Marino 
573*e4b17023SJohn Marino   // transform
574*e4b17023SJohn Marino 
575*e4b17023SJohn Marino   template<typename _FIter>
576*e4b17023SJohn Marino     _FIter
577*e4b17023SJohn Marino     unique(_FIter, _FIter);
578*e4b17023SJohn Marino 
579*e4b17023SJohn Marino   template<typename _FIter, typename _BinaryPredicate>
580*e4b17023SJohn Marino     _FIter
581*e4b17023SJohn Marino     unique(_FIter, _FIter, _BinaryPredicate);
582*e4b17023SJohn Marino 
583*e4b17023SJohn Marino   // unique_copy
584*e4b17023SJohn Marino 
585*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
586*e4b17023SJohn Marino     _FIter
587*e4b17023SJohn Marino     upper_bound(_FIter, _FIter, const _Tp&);
588*e4b17023SJohn Marino 
589*e4b17023SJohn Marino   template<typename _FIter, typename _Tp, typename _Compare>
590*e4b17023SJohn Marino     _FIter
591*e4b17023SJohn Marino     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
592*e4b17023SJohn Marino 
593*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION
594*e4b17023SJohn Marino 
595*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_ALGO
596*e4b17023SJohn Marino 
597*e4b17023SJohn Marino   template<typename _FIter>
598*e4b17023SJohn Marino     _FIter
599*e4b17023SJohn Marino     adjacent_find(_FIter, _FIter);
600*e4b17023SJohn Marino 
601*e4b17023SJohn Marino   template<typename _FIter, typename _BinaryPredicate>
602*e4b17023SJohn Marino     _FIter
603*e4b17023SJohn Marino     adjacent_find(_FIter, _FIter, _BinaryPredicate);
604*e4b17023SJohn Marino 
605*e4b17023SJohn Marino   template<typename _IIter, typename _Tp>
606*e4b17023SJohn Marino     typename iterator_traits<_IIter>::difference_type
607*e4b17023SJohn Marino     count(_IIter, _IIter, const _Tp&);
608*e4b17023SJohn Marino 
609*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
610*e4b17023SJohn Marino     typename iterator_traits<_IIter>::difference_type
611*e4b17023SJohn Marino     count_if(_IIter, _IIter, _Predicate);
612*e4b17023SJohn Marino 
613*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2>
614*e4b17023SJohn Marino     bool
615*e4b17023SJohn Marino     equal(_IIter1, _IIter1, _IIter2);
616*e4b17023SJohn Marino 
617*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
618*e4b17023SJohn Marino     bool
619*e4b17023SJohn Marino     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
620*e4b17023SJohn Marino 
621*e4b17023SJohn Marino   template<typename _IIter, typename _Tp>
622*e4b17023SJohn Marino     _IIter
623*e4b17023SJohn Marino     find(_IIter, _IIter, const _Tp&);
624*e4b17023SJohn Marino 
625*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
626*e4b17023SJohn Marino     _FIter1
627*e4b17023SJohn Marino     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
628*e4b17023SJohn Marino 
629*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
630*e4b17023SJohn Marino     _FIter1
631*e4b17023SJohn Marino     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
632*e4b17023SJohn Marino 
633*e4b17023SJohn Marino   template<typename _IIter, typename _Predicate>
634*e4b17023SJohn Marino     _IIter
635*e4b17023SJohn Marino     find_if(_IIter, _IIter, _Predicate);
636*e4b17023SJohn Marino 
637*e4b17023SJohn Marino   template<typename _IIter, typename _Funct>
638*e4b17023SJohn Marino     _Funct
639*e4b17023SJohn Marino     for_each(_IIter, _IIter, _Funct);
640*e4b17023SJohn Marino 
641*e4b17023SJohn Marino   template<typename _FIter, typename _Generator>
642*e4b17023SJohn Marino     void
643*e4b17023SJohn Marino     generate(_FIter, _FIter, _Generator);
644*e4b17023SJohn Marino 
645*e4b17023SJohn Marino   template<typename _OIter, typename _Size, typename _Generator>
646*e4b17023SJohn Marino     _OIter
647*e4b17023SJohn Marino     generate_n(_OIter, _Size, _Generator);
648*e4b17023SJohn Marino 
649*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2>
650*e4b17023SJohn Marino     bool
651*e4b17023SJohn Marino     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
652*e4b17023SJohn Marino 
653*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _Compare>
654*e4b17023SJohn Marino     bool
655*e4b17023SJohn Marino     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
656*e4b17023SJohn Marino 
657*e4b17023SJohn Marino   template<typename _FIter>
658*e4b17023SJohn Marino     _FIter
659*e4b17023SJohn Marino     max_element(_FIter, _FIter);
660*e4b17023SJohn Marino 
661*e4b17023SJohn Marino   template<typename _FIter, typename _Compare>
662*e4b17023SJohn Marino     _FIter
663*e4b17023SJohn Marino     max_element(_FIter, _FIter, _Compare);
664*e4b17023SJohn Marino 
665*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter>
666*e4b17023SJohn Marino     _OIter
667*e4b17023SJohn Marino     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
668*e4b17023SJohn Marino 
669*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
670*e4b17023SJohn Marino 	   typename _Compare>
671*e4b17023SJohn Marino     _OIter
672*e4b17023SJohn Marino     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
673*e4b17023SJohn Marino 
674*e4b17023SJohn Marino   template<typename _FIter>
675*e4b17023SJohn Marino     _FIter
676*e4b17023SJohn Marino     min_element(_FIter, _FIter);
677*e4b17023SJohn Marino 
678*e4b17023SJohn Marino   template<typename _FIter, typename _Compare>
679*e4b17023SJohn Marino     _FIter
680*e4b17023SJohn Marino     min_element(_FIter, _FIter, _Compare);
681*e4b17023SJohn Marino 
682*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2>
683*e4b17023SJohn Marino     pair<_IIter1, _IIter2>
684*e4b17023SJohn Marino     mismatch(_IIter1, _IIter1, _IIter2);
685*e4b17023SJohn Marino 
686*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
687*e4b17023SJohn Marino     pair<_IIter1, _IIter2>
688*e4b17023SJohn Marino     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
689*e4b17023SJohn Marino 
690*e4b17023SJohn Marino   template<typename _RAIter>
691*e4b17023SJohn Marino     void
692*e4b17023SJohn Marino     nth_element(_RAIter, _RAIter, _RAIter);
693*e4b17023SJohn Marino 
694*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
695*e4b17023SJohn Marino     void
696*e4b17023SJohn Marino     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
697*e4b17023SJohn Marino 
698*e4b17023SJohn Marino   template<typename _RAIter>
699*e4b17023SJohn Marino     void
700*e4b17023SJohn Marino     partial_sort(_RAIter, _RAIter, _RAIter);
701*e4b17023SJohn Marino 
702*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
703*e4b17023SJohn Marino     void
704*e4b17023SJohn Marino     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
705*e4b17023SJohn Marino 
706*e4b17023SJohn Marino   template<typename _BIter, typename _Predicate>
707*e4b17023SJohn Marino     _BIter
708*e4b17023SJohn Marino     partition(_BIter, _BIter, _Predicate);
709*e4b17023SJohn Marino 
710*e4b17023SJohn Marino   template<typename _RAIter>
711*e4b17023SJohn Marino     void
712*e4b17023SJohn Marino     random_shuffle(_RAIter, _RAIter);
713*e4b17023SJohn Marino 
714*e4b17023SJohn Marino   template<typename _RAIter, typename _Generator>
715*e4b17023SJohn Marino     void
716*e4b17023SJohn Marino     random_shuffle(_RAIter, _RAIter,
717*e4b17023SJohn Marino #ifdef __GXX_EXPERIMENTAL_CXX0X__
718*e4b17023SJohn Marino 		   _Generator&&);
719*e4b17023SJohn Marino #else
720*e4b17023SJohn Marino 		   _Generator&);
721*e4b17023SJohn Marino #endif
722*e4b17023SJohn Marino 
723*e4b17023SJohn Marino   template<typename _FIter, typename _Tp>
724*e4b17023SJohn Marino     void
725*e4b17023SJohn Marino     replace(_FIter, _FIter, const _Tp&, const _Tp&);
726*e4b17023SJohn Marino 
727*e4b17023SJohn Marino   template<typename _FIter, typename _Predicate, typename _Tp>
728*e4b17023SJohn Marino     void
729*e4b17023SJohn Marino     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
730*e4b17023SJohn Marino 
731*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2>
732*e4b17023SJohn Marino     _FIter1
733*e4b17023SJohn Marino     search(_FIter1, _FIter1, _FIter2, _FIter2);
734*e4b17023SJohn Marino 
735*e4b17023SJohn Marino   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
736*e4b17023SJohn Marino     _FIter1
737*e4b17023SJohn Marino     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
738*e4b17023SJohn Marino 
739*e4b17023SJohn Marino   template<typename _FIter, typename _Size, typename _Tp>
740*e4b17023SJohn Marino     _FIter
741*e4b17023SJohn Marino     search_n(_FIter, _FIter, _Size, const _Tp&);
742*e4b17023SJohn Marino 
743*e4b17023SJohn Marino   template<typename _FIter, typename _Size, typename _Tp,
744*e4b17023SJohn Marino 	   typename _BinaryPredicate>
745*e4b17023SJohn Marino     _FIter
746*e4b17023SJohn Marino     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
747*e4b17023SJohn Marino 
748*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter>
749*e4b17023SJohn Marino     _OIter
750*e4b17023SJohn Marino     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
751*e4b17023SJohn Marino 
752*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
753*e4b17023SJohn Marino 	   typename _Compare>
754*e4b17023SJohn Marino     _OIter
755*e4b17023SJohn Marino     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
756*e4b17023SJohn Marino 
757*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter>
758*e4b17023SJohn Marino     _OIter
759*e4b17023SJohn Marino     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
760*e4b17023SJohn Marino 
761*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
762*e4b17023SJohn Marino 	   typename _Compare>
763*e4b17023SJohn Marino     _OIter
764*e4b17023SJohn Marino     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
765*e4b17023SJohn Marino 
766*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter>
767*e4b17023SJohn Marino     _OIter
768*e4b17023SJohn Marino     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
769*e4b17023SJohn Marino 
770*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
771*e4b17023SJohn Marino 	   typename _Compare>
772*e4b17023SJohn Marino     _OIter
773*e4b17023SJohn Marino     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
774*e4b17023SJohn Marino 			     _OIter, _Compare);
775*e4b17023SJohn Marino 
776*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter>
777*e4b17023SJohn Marino     _OIter
778*e4b17023SJohn Marino     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
779*e4b17023SJohn Marino 
780*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
781*e4b17023SJohn Marino 	   typename _Compare>
782*e4b17023SJohn Marino     _OIter
783*e4b17023SJohn Marino     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
784*e4b17023SJohn Marino 
785*e4b17023SJohn Marino   template<typename _RAIter>
786*e4b17023SJohn Marino     void
787*e4b17023SJohn Marino     sort(_RAIter, _RAIter);
788*e4b17023SJohn Marino 
789*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
790*e4b17023SJohn Marino     void
791*e4b17023SJohn Marino     sort(_RAIter, _RAIter, _Compare);
792*e4b17023SJohn Marino 
793*e4b17023SJohn Marino   template<typename _RAIter>
794*e4b17023SJohn Marino     void
795*e4b17023SJohn Marino     stable_sort(_RAIter, _RAIter);
796*e4b17023SJohn Marino 
797*e4b17023SJohn Marino   template<typename _RAIter, typename _Compare>
798*e4b17023SJohn Marino     void
799*e4b17023SJohn Marino     stable_sort(_RAIter, _RAIter, _Compare);
800*e4b17023SJohn Marino 
801*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _UnaryOperation>
802*e4b17023SJohn Marino     _OIter
803*e4b17023SJohn Marino     transform(_IIter, _IIter, _OIter, _UnaryOperation);
804*e4b17023SJohn Marino 
805*e4b17023SJohn Marino   template<typename _IIter1, typename _IIter2, typename _OIter,
806*e4b17023SJohn Marino 	   typename _BinaryOperation>
807*e4b17023SJohn Marino     _OIter
808*e4b17023SJohn Marino     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
809*e4b17023SJohn Marino 
810*e4b17023SJohn Marino   template<typename _IIter, typename _OIter>
811*e4b17023SJohn Marino     _OIter
812*e4b17023SJohn Marino     unique_copy(_IIter, _IIter, _OIter);
813*e4b17023SJohn Marino 
814*e4b17023SJohn Marino   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
815*e4b17023SJohn Marino     _OIter
816*e4b17023SJohn Marino     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
817*e4b17023SJohn Marino 
818*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_ALGO
819*e4b17023SJohn Marino } // namespace std
820*e4b17023SJohn Marino 
821*e4b17023SJohn Marino #ifdef _GLIBCXX_PARALLEL
822*e4b17023SJohn Marino # include <parallel/algorithmfwd.h>
823*e4b17023SJohn Marino #endif
824*e4b17023SJohn Marino 
825*e4b17023SJohn Marino #endif
826*e4b17023SJohn Marino 
827