OSDN Git Service

2008-09-16 Chris Fairles <chris.fairles@gmail.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / include / bits / algorithmfwd.h
1 // <algorithm> declarations  -*- C++ -*-
2
3 // Copyright (C) 2007, 2008 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 2, 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 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 // USA.
20
21 /** @file bits/algorithmfwd.h
22  *  This is an internal header file, included by other library headers.
23  *  You should not attempt to use it directly.
24  */
25
26 /*
27   adjacent_find
28   all_of (C++0x)
29   any_of (C++0x)
30   binary_search
31   copy
32   copy_backward
33   copy_if (C++0x)
34   copy_n (C++0x)
35   count
36   count_if
37   equal
38   equal_range
39   fill
40   fill_n
41   find
42   find_end
43   find_first_of
44   find_if
45   find_if_not (C++0x)
46   for_each
47   generate
48   generate_n
49   includes
50   inplace_merge
51   is_heap (C++0x)
52   is_heap_until (C++0x)
53   is_partitioned (C++0x)
54   is_sorted (C++0x)
55   is_sorted_until (C++0x)
56   iter_swap
57   lexicographical_compare
58   lower_bound
59   make_heap
60   max
61   max_element
62   merge
63   min
64   min_element
65   minmax (C++0x)
66   minmax_element (C++0x)
67   mismatch
68   next_permutation
69   none_of (C++0x)
70   nth_element
71   partial_sort
72   partial_sort_copy
73   partition
74   partition_copy (C++0x)
75   partition_point (C++0x)
76   pop_heap
77   prev_permutation
78   push_heap
79   random_shuffle
80   remove
81   remove_copy
82   remove_copy_if
83   remove_if
84   replace
85   replace_copy
86   replace_copy_if
87   replace_if
88   reverse
89   reverse_copy
90   rotate
91   rotate_copy
92   search
93   search_n
94   set_difference
95   set_intersection
96   set_symmetric_difference
97   set_union
98   sort
99   sort_heap
100   stable_partition
101   stable_sort
102   swap
103   swap_ranges
104   transform
105   unique
106   unique_copy
107   upper_bound
108 */
109
110 #ifndef _GLIBCXX_ALGORITHMFWD_H
111 #define _GLIBCXX_ALGORITHMFWD_H 1
112
113 #pragma GCC system_header
114
115 #include <bits/c++config.h>
116 #include <bits/stl_pair.h>
117 #include <bits/stl_iterator_base_types.h>
118 #include <initializer_list>
119
120 _GLIBCXX_BEGIN_NAMESPACE(std)
121
122   // adjacent_find
123
124 #ifdef __GXX_EXPERIMENTAL_CXX0X__
125   template<typename _IIter, typename _Predicate>
126     bool
127     all_of(_IIter, _IIter, _Predicate);
128
129   template<typename _IIter, typename _Predicate>
130     bool
131     any_of(_IIter, _IIter, _Predicate);
132 #endif
133
134   template<typename _FIter, typename _Tp>
135     bool 
136     binary_search(_FIter, _FIter, const _Tp&);
137
138   template<typename _FIter, typename _Tp, typename _Compare>
139     bool 
140     binary_search(_FIter, _FIter, const _Tp&, _Compare);
141
142   template<typename _IIter, typename _OIter>
143     _OIter 
144     copy(_IIter, _IIter, _OIter);
145
146   template<typename _BIter1, typename _BIter2>
147     _BIter2
148     copy_backward(_BIter1, _BIter1, _BIter2);
149
150 #ifdef __GXX_EXPERIMENTAL_CXX0X__
151   template<typename _IIter, typename _OIter, typename _Predicate>
152     _OIter
153     copy_if(_IIter, _IIter, _OIter, _Predicate);
154
155   template<typename _IIter, typename _Size, typename _OIter>
156     _OIter
157     copy_n(_IIter, _Size, _OIter);
158 #endif
159
160   // count
161   // count_if
162
163   template<typename _FIter, typename _Tp>
164     pair<_FIter, _FIter>
165     equal_range(_FIter, _FIter, const _Tp&);
166
167   template<typename _FIter, typename _Tp, typename _Compare>
168     pair<_FIter, _FIter>
169     equal_range(_FIter, _FIter, const _Tp&, _Compare);
170
171   template<typename _FIter, typename _Tp>
172     void 
173     fill(_FIter, _FIter, const _Tp&);
174
175 /*
176   XXX NB: return type different from ISO C++.
177   template<typename _OIter, typename _Size, typename _Tp>
178     void 
179     fill_n(_OIter, _Size, const _Tp&);
180 */
181
182   template<typename _OIter, typename _Size, typename _Tp>
183     _OIter
184     fill_n(_OIter, _Size, const _Tp&);
185
186   // find
187
188   template<typename _FIter1, typename _FIter2>
189     _FIter1
190     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
191
192   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
193     _FIter1
194     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
195
196   // find_first_of
197   // find_if
198
199 #ifdef __GXX_EXPERIMENTAL_CXX0X__
200   template<typename _IIter, typename _Predicate>
201     _IIter
202     find_if_not(_IIter, _IIter, _Predicate);
203 #endif
204
205   // for_each
206   // generate
207   // generate_n
208
209   template<typename _IIter1, typename _IIter2>
210     bool 
211     includes(_IIter1, _IIter1, _IIter2, _IIter2);
212
213   template<typename _IIter1, typename _IIter2, typename _Compare>
214     bool 
215     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
216
217   template<typename _BIter>
218     void 
219     inplace_merge(_BIter, _BIter, _BIter);
220
221   template<typename _BIter, typename _Compare>
222     void 
223     inplace_merge(_BIter, _BIter, _BIter, _Compare);
224
225 #ifdef __GXX_EXPERIMENTAL_CXX0X__
226   template<typename _RAIter>
227     bool 
228     is_heap(_RAIter, _RAIter);
229
230   template<typename _RAIter, typename _Compare>
231     bool 
232     is_heap(_RAIter, _RAIter, _Compare);
233
234   template<typename _RAIter>
235     _RAIter 
236     is_heap_until(_RAIter, _RAIter);
237
238   template<typename _RAIter, typename _Compare>
239     _RAIter 
240     is_heap_until(_RAIter, _RAIter, _Compare);
241
242   template<typename _IIter, typename _Predicate>
243     bool
244     is_partitioned(_IIter, _IIter, _Predicate);
245
246   template<typename _FIter>
247     bool 
248     is_sorted(_FIter, _FIter);
249
250   template<typename _FIter, typename _Compare>
251     bool 
252     is_sorted(_FIter, _FIter, _Compare);
253
254   template<typename _FIter>
255     _FIter 
256     is_sorted_until(_FIter, _FIter);
257
258   template<typename _FIter, typename _Compare>
259     _FIter 
260     is_sorted_until(_FIter, _FIter, _Compare);
261 #endif
262
263   template<typename _FIter1, typename _FIter2>
264     void 
265     iter_swap(_FIter1, _FIter2);
266
267   template<typename _FIter, typename _Tp>
268     _FIter 
269     lower_bound(_FIter, _FIter, const _Tp&);
270
271   template<typename _FIter, typename _Tp, typename _Compare>
272     _FIter 
273     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
274
275   template<typename _RAIter>
276     void 
277     make_heap(_RAIter, _RAIter);
278
279   template<typename _RAIter, typename _Compare>
280     void 
281     make_heap(_RAIter, _RAIter, _Compare);
282
283   template<typename _Tp> 
284     const _Tp& 
285     max(const _Tp&, const _Tp&);
286
287   template<typename _Tp, typename _Compare>
288     const _Tp& 
289     max(const _Tp&, const _Tp&, _Compare);
290
291   // max_element
292   // merge
293
294   template<typename _Tp> 
295     const _Tp& 
296     min(const _Tp&, const _Tp&);
297
298   template<typename _Tp, typename _Compare>
299     const _Tp& 
300     min(const _Tp&, const _Tp&, _Compare);
301
302   // min_element
303
304 #ifdef __GXX_EXPERIMENTAL_CXX0X__
305   template<typename _Tp>
306     pair<const _Tp&, const _Tp&> 
307     minmax(const _Tp&, const _Tp&);
308
309   template<typename _Tp, typename _Compare>
310     pair<const _Tp&, const _Tp&>
311     minmax(const _Tp&, const _Tp&, _Compare);
312
313   template<typename _FIter>
314     pair<_FIter, _FIter>
315     minmax_element(_FIter, _FIter);
316
317   template<typename _FIter, typename _Compare>
318     pair<_FIter, _FIter>
319     minmax_element(_FIter, _FIter, _Compare);
320
321   template<typename _Tp>
322     const _Tp&
323     min(initializer_list<_Tp>);
324
325   template<typename _Tp, typename _Compare>
326     const _Tp&
327     min(initializer_list<_Tp>, _Compare);
328
329   template<typename _Tp>
330     const _Tp&
331     max(initializer_list<_Tp>);
332
333   template<typename _Tp, typename _Compare>
334     const _Tp&
335     max(initializer_list<_Tp>, _Compare);
336
337   template<typename _Tp>
338     pair<const _Tp&, const _Tp&>
339     minmax(initializer_list<_Tp>);
340
341   template<typename _Tp, typename _Compare>
342     pair<const _Tp&, const _Tp&>
343     minmax(initializer_list<_Tp>, _Compare);
344 #endif
345
346   // mismatch
347
348   template<typename _BIter>
349     bool 
350     next_permutation(_BIter, _BIter);
351
352   template<typename _BIter, typename _Compare>
353     bool 
354     next_permutation(_BIter, _BIter, _Compare);
355
356 #ifdef __GXX_EXPERIMENTAL_CXX0X__
357   template<typename _IIter, typename _Predicate>
358     bool
359     none_of(_IIter, _IIter, _Predicate);
360 #endif
361
362   // nth_element
363   // partial_sort
364
365   template<typename _IIter, typename _RAIter>
366     _RAIter
367     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
368
369   template<typename _IIter, typename _RAIter, typename _Compare>
370     _RAIter
371     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
372
373   // partition
374
375 #ifdef __GXX_EXPERIMENTAL_CXX0X__
376   template<typename _IIter, typename _OIter1,
377            typename _OIter2, typename _Predicate>
378     pair<_OIter1, _OIter2>
379     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
380
381   template<typename _FIter, typename _Predicate>
382     _FIter
383     partition_point(_FIter, _FIter, _Predicate);
384 #endif
385
386   template<typename _RAIter>
387     void 
388     pop_heap(_RAIter, _RAIter);
389
390   template<typename _RAIter, typename _Compare>
391     void 
392     pop_heap(_RAIter, _RAIter, _Compare);
393
394   template<typename _BIter>
395     bool 
396     prev_permutation(_BIter, _BIter);
397
398   template<typename _BIter, typename _Compare>
399     bool 
400     prev_permutation(_BIter, _BIter, _Compare);
401
402   template<typename _RAIter>
403     void 
404     push_heap(_RAIter, _RAIter);
405
406   template<typename _RAIter, typename _Compare>
407     void 
408     push_heap(_RAIter, _RAIter, _Compare);
409
410   // random_shuffle
411
412   template<typename _FIter, typename _Tp>
413     _FIter 
414     remove(_FIter, _FIter, const _Tp&);
415
416   template<typename _FIter, typename _Predicate>
417     _FIter 
418     remove_if(_FIter, _FIter, _Predicate);
419
420   template<typename _IIter, typename _OIter, typename _Tp>
421     _OIter 
422     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
423
424   template<typename _IIter, typename _OIter, typename _Predicate>
425     _OIter 
426     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
427
428   // replace
429
430   template<typename _IIter, typename _OIter, typename _Tp>
431     _OIter 
432     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
433
434   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
435     _OIter 
436     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
437
438   // replace_if
439
440   template<typename _BIter>
441     void 
442     reverse(_BIter, _BIter);
443
444   template<typename _BIter, typename _OIter>
445     _OIter 
446     reverse_copy(_BIter, _BIter, _OIter);
447
448   template<typename _FIter>
449     void 
450     rotate(_FIter, _FIter, _FIter);
451
452   template<typename _FIter, typename _OIter>
453     _OIter 
454     rotate_copy(_FIter, _FIter, _FIter, _OIter);
455
456   // search
457   // search_n
458   // set_difference
459   // set_intersection
460   // set_symmetric_difference
461   // set_union
462
463   template<typename _RAIter>
464     void 
465     sort_heap(_RAIter, _RAIter);
466
467   template<typename _RAIter, typename _Compare>
468     void 
469     sort_heap(_RAIter, _RAIter, _Compare);
470
471   template<typename _BIter, typename _Predicate>
472     _BIter 
473     stable_partition(_BIter, _BIter, _Predicate);
474
475   template<typename _Tp> 
476     void 
477     swap(_Tp&, _Tp&);
478
479   template<typename _Tp, size_t _Nm>
480     void
481     swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
482
483   template<typename _FIter1, typename _FIter2>
484     _FIter2 
485     swap_ranges(_FIter1, _FIter1, _FIter2);
486
487   // transform
488
489   template<typename _FIter>
490     _FIter 
491     unique(_FIter, _FIter);
492
493   template<typename _FIter, typename _BinaryPredicate>
494     _FIter 
495     unique(_FIter, _FIter, _BinaryPredicate);
496
497   // unique_copy
498
499   template<typename _FIter, typename _Tp>
500     _FIter 
501     upper_bound(_FIter, _FIter, const _Tp&);
502
503   template<typename _FIter, typename _Tp, typename _Compare>
504     _FIter 
505     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
506
507 _GLIBCXX_END_NAMESPACE
508
509 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
510
511   template<typename _FIter>
512     _FIter 
513     adjacent_find(_FIter, _FIter);
514
515   template<typename _FIter, typename _BinaryPredicate>
516     _FIter 
517     adjacent_find(_FIter, _FIter, _BinaryPredicate);
518
519   template<typename _IIter, typename _Tp>
520     typename iterator_traits<_IIter>::difference_type
521     count(_IIter, _IIter, const _Tp&);
522
523   template<typename _IIter, typename _Predicate>
524     typename iterator_traits<_IIter>::difference_type
525     count_if(_IIter, _IIter, _Predicate);
526
527   template<typename _IIter1, typename _IIter2>
528     bool 
529     equal(_IIter1, _IIter1, _IIter2);
530
531   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
532     bool 
533     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
534
535   template<typename _IIter, typename _Tp>
536     _IIter 
537     find(_IIter, _IIter, const _Tp&);
538
539   template<typename _FIter1, typename _FIter2>
540     _FIter1
541     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
542
543   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
544     _FIter1
545     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
546
547   template<typename _IIter, typename _Predicate>
548     _IIter
549     find_if(_IIter, _IIter, _Predicate);
550
551   template<typename _IIter, typename _Funct>
552     _Funct 
553     for_each(_IIter, _IIter, _Funct);
554
555   template<typename _FIter, typename _Generator>
556     void 
557     generate(_FIter, _FIter, _Generator);
558
559 /*
560   XXX NB: return type different from ISO C++.
561   template<typename _OIter, typename _Size, typename _Tp>
562     void
563     generate_n(_OIter, _Size, _Generator);
564 */
565
566   template<typename _OIter, typename _Size, typename _Generator>
567     _OIter
568     generate_n(_OIter, _Size, _Generator);
569
570   template<typename _IIter1, typename _IIter2>
571     bool 
572     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
573
574   template<typename _IIter1, typename _IIter2, typename _Compare>
575     bool 
576     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
577
578   template<typename _FIter>
579     _FIter 
580     max_element(_FIter, _FIter);
581
582   template<typename _FIter, typename _Compare>
583     _FIter 
584     max_element(_FIter, _FIter, _Compare);
585
586   template<typename _IIter1, typename _IIter2, typename _OIter>
587     _OIter 
588     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
589
590   template<typename _IIter1, typename _IIter2, typename _OIter, 
591            typename _Compare>
592     _OIter 
593     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
594
595   template<typename _FIter>
596     _FIter 
597     min_element(_FIter, _FIter);
598
599   template<typename _FIter, typename _Compare>
600     _FIter 
601     min_element(_FIter, _FIter, _Compare);
602
603   template<typename _IIter1, typename _IIter2>
604     pair<_IIter1, _IIter2>
605     mismatch(_IIter1, _IIter1, _IIter2);
606
607   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
608     pair<_IIter1, _IIter2>
609     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
610
611   template<typename _RAIter>
612     void 
613     nth_element(_RAIter, _RAIter, _RAIter);
614
615   template<typename _RAIter, typename _Compare>
616     void 
617     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
618
619   template<typename _RAIter>
620     void 
621     partial_sort(_RAIter, _RAIter, _RAIter);
622
623   template<typename _RAIter, typename _Compare>
624     void 
625     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
626
627   template<typename _BIter, typename _Predicate>
628     _BIter 
629     partition(_BIter, _BIter, _Predicate);
630
631   template<typename _RAIter>
632     void 
633     random_shuffle(_RAIter, _RAIter);
634
635   template<typename _RAIter, typename _Generator>
636     void 
637     random_shuffle(_RAIter, _RAIter, _Generator&);
638
639   template<typename _FIter, typename _Tp>
640     void 
641     replace(_FIter, _FIter, const _Tp&, const _Tp&);
642
643   template<typename _FIter, typename _Predicate, typename _Tp>
644     void 
645     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
646
647   template<typename _FIter1, typename _FIter2>
648     _FIter1 
649     search(_FIter1, _FIter1, _FIter2, _FIter2);
650
651   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
652     _FIter1 
653     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
654
655   template<typename _FIter, typename _Size, typename _Tp>
656     _FIter 
657     search_n(_FIter, _FIter, _Size, const _Tp&);
658
659   template<typename _FIter, typename _Size, typename _Tp, 
660            typename _BinaryPredicate>
661     _FIter 
662     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
663
664   template<typename _IIter1, typename _IIter2, typename _OIter>
665     _OIter 
666     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
667
668   template<typename _IIter1, typename _IIter2, typename _OIter, 
669            typename _Compare>
670     _OIter 
671     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
672
673   template<typename _IIter1, typename _IIter2, typename _OIter>
674     _OIter 
675     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
676
677   template<typename _IIter1, typename _IIter2, typename _OIter,
678            typename _Compare>
679     _OIter 
680     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
681
682   template<typename _IIter1, typename _IIter2, typename _OIter>
683     _OIter
684     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
685
686   template<typename _IIter1, typename _IIter2, typename _OIter, 
687            typename _Compare>
688     _OIter
689     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, 
690                              _OIter, _Compare);
691
692   template<typename _IIter1, typename _IIter2, typename _OIter>
693     _OIter 
694     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
695
696   template<typename _IIter1, typename _IIter2, typename _OIter,
697            typename _Compare>
698     _OIter 
699     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
700
701   template<typename _RAIter>
702     void 
703     sort(_RAIter, _RAIter);
704
705   template<typename _RAIter, typename _Compare>
706     void 
707     sort(_RAIter, _RAIter, _Compare);
708
709   template<typename _RAIter>
710     void 
711     stable_sort(_RAIter, _RAIter);
712
713   template<typename _RAIter, typename _Compare>
714     void 
715     stable_sort(_RAIter, _RAIter, _Compare);
716
717   template<typename _IIter, typename _OIter, typename _UnaryOperation>
718     _OIter 
719     transform(_IIter, _IIter, _OIter, _UnaryOperation);
720
721   template<typename _IIter1, typename _IIter2, typename _OIter, 
722            typename _BinaryOperation>
723     _OIter 
724     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
725
726   template<typename _IIter, typename _OIter>
727     _OIter 
728     unique_copy(_IIter, _IIter, _OIter);
729
730   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
731     _OIter 
732     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
733
734 _GLIBCXX_END_NESTED_NAMESPACE
735
736 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
737 # include <parallel/algorithmfwd.h>
738 #endif
739
740 #endif
741