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