]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/bits/algorithmfwd.h
function.c (allocate_struct_function): Only allocate a unique funcdef_no if the decl...
[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)
f6547b68
PC
52 is_sorted (C++0x)
53 is_sorted_until (C++0x)
c2ba9709
JS
54 iter_swap
55 lexicographical_compare
56 lower_bound
57 make_heap
58 max
59 max_element
60 merge
61 min
62 min_element
f6547b68
PC
63 minmax (C++0x)
64 minmax_element (C++0x)
c2ba9709
JS
65 mismatch
66 next_permutation
688a7a07 67 none_of (C++0x)
c2ba9709 68 nth_element
28dac70a 69 partial_sort
c2ba9709
JS
70 partial_sort_copy
71 partition
688a7a07 72 partition_copy (C++0x)
c2ba9709
JS
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
28dac70a 91 set_difference
c2ba9709
JS
92 set_intersection
93 set_symmetric_difference
94 set_union
95 sort
96 sort_heap
97 stable_partition
98 stable_sort
c2ba9709
JS
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
688a7a07
PC
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
c2ba9709
JS
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
4f99f3d0 144 copy_backward(_BIter1, _BIter1, _BIter2);
c2ba9709 145
688a7a07
PC
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
c2ba9709
JS
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
6f95a65a
BK
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
c2ba9709
JS
188 // find_first_of
189 // find_if
c2ba9709 190
76cc1b70 191#ifdef __GXX_EXPERIMENTAL_CXX0X__
76cc1b70
PC
192 template<typename _IIter, typename _Predicate>
193 _IIter
194 find_if_not(_IIter, _IIter, _Predicate);
195#endif
196
688a7a07
PC
197 // for_each
198 // generate
199 // generate_n
200
c2ba9709
JS
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
e69f1bad
PC
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);
4b7ed13a
PC
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);
e69f1bad
PC
249#endif
250
c2ba9709
JS
251 template<typename _FIter1, typename _FIter2>
252 void
253 iter_swap(_FIter1, _FIter2);
254
c2ba9709
JS
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
f6547b68
PC
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
c2ba9709
JS
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
688a7a07
PC
320#ifdef __GXX_EXPERIMENTAL_CXX0X__
321 template<typename _IIter, typename _Predicate>
322 bool
323 none_of(_IIter, _IIter, _Predicate);
324#endif
325
c2ba9709
JS
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
688a7a07
PC
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
c2ba9709
JS
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
4f99f3d0 414 rotate_copy(_FIter, _FIter, _FIter, _OIter);
c2ba9709
JS
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
4f99f3d0 437 swap(_Tp&, _Tp&);
c2ba9709 438
caa8b3c6
PC
439 template<typename _Tp, size_t _Nm>
440 void
441 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
442
c2ba9709
JS
443 template<typename _FIter1, typename _FIter2>
444 _FIter2
4f99f3d0 445 swap_ranges(_FIter1, _FIter1, _FIter2);
c2ba9709
JS
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
c2ba9709
JS
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>
76cc1b70 508 _IIter
c2ba9709
JS
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
4f99f3d0
BK
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
c2ba9709 526 template<typename _OIter, typename _Size, typename _Generator>
4f99f3d0 527 _OIter
c2ba9709
JS
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