OSDN Git Service

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