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