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