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