1 // <algorithm> declarations -*- C++ -*-
3 // Copyright (C) 2007, 2008 Free Software Foundation, Inc.
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)
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.
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,
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.
53 is_partitioned (C++0x)
55 is_sorted_until (C++0x)
57 lexicographical_compare
66 minmax_element (C++0x)
74 partition_copy (C++0x)
75 partition_point (C++0x)
96 set_symmetric_difference
110 #ifndef _GLIBCXX_ALGORITHMFWD_H
111 #define _GLIBCXX_ALGORITHMFWD_H 1
113 #pragma GCC system_header
115 #include <bits/c++config.h>
116 #include <bits/stl_pair.h>
117 #include <bits/stl_iterator_base_types.h>
118 #include <initializer_list>
120 _GLIBCXX_BEGIN_NAMESPACE(std)
124 #ifdef __GXX_EXPERIMENTAL_CXX0X__
125 template<typename _IIter, typename _Predicate>
127 all_of(_IIter, _IIter, _Predicate);
129 template<typename _IIter, typename _Predicate>
131 any_of(_IIter, _IIter, _Predicate);
134 template<typename _FIter, typename _Tp>
136 binary_search(_FIter, _FIter, const _Tp&);
138 template<typename _FIter, typename _Tp, typename _Compare>
140 binary_search(_FIter, _FIter, const _Tp&, _Compare);
142 template<typename _IIter, typename _OIter>
144 copy(_IIter, _IIter, _OIter);
146 template<typename _BIter1, typename _BIter2>
148 copy_backward(_BIter1, _BIter1, _BIter2);
150 #ifdef __GXX_EXPERIMENTAL_CXX0X__
151 template<typename _IIter, typename _OIter, typename _Predicate>
153 copy_if(_IIter, _IIter, _OIter, _Predicate);
155 template<typename _IIter, typename _Size, typename _OIter>
157 copy_n(_IIter, _Size, _OIter);
163 template<typename _FIter, typename _Tp>
165 equal_range(_FIter, _FIter, const _Tp&);
167 template<typename _FIter, typename _Tp, typename _Compare>
169 equal_range(_FIter, _FIter, const _Tp&, _Compare);
171 template<typename _FIter, typename _Tp>
173 fill(_FIter, _FIter, const _Tp&);
176 XXX NB: return type different from ISO C++.
177 template<typename _OIter, typename _Size, typename _Tp>
179 fill_n(_OIter, _Size, const _Tp&);
182 template<typename _OIter, typename _Size, typename _Tp>
184 fill_n(_OIter, _Size, const _Tp&);
188 template<typename _FIter1, typename _FIter2>
190 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
192 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
194 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
199 #ifdef __GXX_EXPERIMENTAL_CXX0X__
200 template<typename _IIter, typename _Predicate>
202 find_if_not(_IIter, _IIter, _Predicate);
209 template<typename _IIter1, typename _IIter2>
211 includes(_IIter1, _IIter1, _IIter2, _IIter2);
213 template<typename _IIter1, typename _IIter2, typename _Compare>
215 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
217 template<typename _BIter>
219 inplace_merge(_BIter, _BIter, _BIter);
221 template<typename _BIter, typename _Compare>
223 inplace_merge(_BIter, _BIter, _BIter, _Compare);
225 #ifdef __GXX_EXPERIMENTAL_CXX0X__
226 template<typename _RAIter>
228 is_heap(_RAIter, _RAIter);
230 template<typename _RAIter, typename _Compare>
232 is_heap(_RAIter, _RAIter, _Compare);
234 template<typename _RAIter>
236 is_heap_until(_RAIter, _RAIter);
238 template<typename _RAIter, typename _Compare>
240 is_heap_until(_RAIter, _RAIter, _Compare);
242 template<typename _IIter, typename _Predicate>
244 is_partitioned(_IIter, _IIter, _Predicate);
246 template<typename _FIter>
248 is_sorted(_FIter, _FIter);
250 template<typename _FIter, typename _Compare>
252 is_sorted(_FIter, _FIter, _Compare);
254 template<typename _FIter>
256 is_sorted_until(_FIter, _FIter);
258 template<typename _FIter, typename _Compare>
260 is_sorted_until(_FIter, _FIter, _Compare);
263 template<typename _FIter1, typename _FIter2>
265 iter_swap(_FIter1, _FIter2);
267 template<typename _FIter, typename _Tp>
269 lower_bound(_FIter, _FIter, const _Tp&);
271 template<typename _FIter, typename _Tp, typename _Compare>
273 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
275 template<typename _RAIter>
277 make_heap(_RAIter, _RAIter);
279 template<typename _RAIter, typename _Compare>
281 make_heap(_RAIter, _RAIter, _Compare);
283 template<typename _Tp>
285 max(const _Tp&, const _Tp&);
287 template<typename _Tp, typename _Compare>
289 max(const _Tp&, const _Tp&, _Compare);
294 template<typename _Tp>
296 min(const _Tp&, const _Tp&);
298 template<typename _Tp, typename _Compare>
300 min(const _Tp&, const _Tp&, _Compare);
304 #ifdef __GXX_EXPERIMENTAL_CXX0X__
305 template<typename _Tp>
306 pair<const _Tp&, const _Tp&>
307 minmax(const _Tp&, const _Tp&);
309 template<typename _Tp, typename _Compare>
310 pair<const _Tp&, const _Tp&>
311 minmax(const _Tp&, const _Tp&, _Compare);
313 template<typename _FIter>
315 minmax_element(_FIter, _FIter);
317 template<typename _FIter, typename _Compare>
319 minmax_element(_FIter, _FIter, _Compare);
321 template<typename _Tp>
323 min(initializer_list<_Tp>);
325 template<typename _Tp, typename _Compare>
327 min(initializer_list<_Tp>, _Compare);
329 template<typename _Tp>
331 max(initializer_list<_Tp>);
333 template<typename _Tp, typename _Compare>
335 max(initializer_list<_Tp>, _Compare);
337 template<typename _Tp>
338 pair<const _Tp&, const _Tp&>
339 minmax(initializer_list<_Tp>);
341 template<typename _Tp, typename _Compare>
342 pair<const _Tp&, const _Tp&>
343 minmax(initializer_list<_Tp>, _Compare);
348 template<typename _BIter>
350 next_permutation(_BIter, _BIter);
352 template<typename _BIter, typename _Compare>
354 next_permutation(_BIter, _BIter, _Compare);
356 #ifdef __GXX_EXPERIMENTAL_CXX0X__
357 template<typename _IIter, typename _Predicate>
359 none_of(_IIter, _IIter, _Predicate);
365 template<typename _IIter, typename _RAIter>
367 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
369 template<typename _IIter, typename _RAIter, typename _Compare>
371 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
375 #ifdef __GXX_EXPERIMENTAL_CXX0X__
376 template<typename _IIter, typename _OIter1,
377 typename _OIter2, typename _Predicate>
378 pair<_OIter1, _OIter2>
379 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
381 template<typename _FIter, typename _Predicate>
383 partition_point(_FIter, _FIter, _Predicate);
386 template<typename _RAIter>
388 pop_heap(_RAIter, _RAIter);
390 template<typename _RAIter, typename _Compare>
392 pop_heap(_RAIter, _RAIter, _Compare);
394 template<typename _BIter>
396 prev_permutation(_BIter, _BIter);
398 template<typename _BIter, typename _Compare>
400 prev_permutation(_BIter, _BIter, _Compare);
402 template<typename _RAIter>
404 push_heap(_RAIter, _RAIter);
406 template<typename _RAIter, typename _Compare>
408 push_heap(_RAIter, _RAIter, _Compare);
412 template<typename _FIter, typename _Tp>
414 remove(_FIter, _FIter, const _Tp&);
416 template<typename _FIter, typename _Predicate>
418 remove_if(_FIter, _FIter, _Predicate);
420 template<typename _IIter, typename _OIter, typename _Tp>
422 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
424 template<typename _IIter, typename _OIter, typename _Predicate>
426 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
430 template<typename _IIter, typename _OIter, typename _Tp>
432 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
434 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
436 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
440 template<typename _BIter>
442 reverse(_BIter, _BIter);
444 template<typename _BIter, typename _OIter>
446 reverse_copy(_BIter, _BIter, _OIter);
448 template<typename _FIter>
450 rotate(_FIter, _FIter, _FIter);
452 template<typename _FIter, typename _OIter>
454 rotate_copy(_FIter, _FIter, _FIter, _OIter);
460 // set_symmetric_difference
463 template<typename _RAIter>
465 sort_heap(_RAIter, _RAIter);
467 template<typename _RAIter, typename _Compare>
469 sort_heap(_RAIter, _RAIter, _Compare);
471 template<typename _BIter, typename _Predicate>
473 stable_partition(_BIter, _BIter, _Predicate);
475 template<typename _Tp>
479 template<typename _Tp, size_t _Nm>
481 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
483 template<typename _FIter1, typename _FIter2>
485 swap_ranges(_FIter1, _FIter1, _FIter2);
489 template<typename _FIter>
491 unique(_FIter, _FIter);
493 template<typename _FIter, typename _BinaryPredicate>
495 unique(_FIter, _FIter, _BinaryPredicate);
499 template<typename _FIter, typename _Tp>
501 upper_bound(_FIter, _FIter, const _Tp&);
503 template<typename _FIter, typename _Tp, typename _Compare>
505 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
507 _GLIBCXX_END_NAMESPACE
509 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
511 template<typename _FIter>
513 adjacent_find(_FIter, _FIter);
515 template<typename _FIter, typename _BinaryPredicate>
517 adjacent_find(_FIter, _FIter, _BinaryPredicate);
519 template<typename _IIter, typename _Tp>
520 typename iterator_traits<_IIter>::difference_type
521 count(_IIter, _IIter, const _Tp&);
523 template<typename _IIter, typename _Predicate>
524 typename iterator_traits<_IIter>::difference_type
525 count_if(_IIter, _IIter, _Predicate);
527 template<typename _IIter1, typename _IIter2>
529 equal(_IIter1, _IIter1, _IIter2);
531 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
533 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
535 template<typename _IIter, typename _Tp>
537 find(_IIter, _IIter, const _Tp&);
539 template<typename _FIter1, typename _FIter2>
541 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
543 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
545 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
547 template<typename _IIter, typename _Predicate>
549 find_if(_IIter, _IIter, _Predicate);
551 template<typename _IIter, typename _Funct>
553 for_each(_IIter, _IIter, _Funct);
555 template<typename _FIter, typename _Generator>
557 generate(_FIter, _FIter, _Generator);
560 XXX NB: return type different from ISO C++.
561 template<typename _OIter, typename _Size, typename _Tp>
563 generate_n(_OIter, _Size, _Generator);
566 template<typename _OIter, typename _Size, typename _Generator>
568 generate_n(_OIter, _Size, _Generator);
570 template<typename _IIter1, typename _IIter2>
572 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
574 template<typename _IIter1, typename _IIter2, typename _Compare>
576 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
578 template<typename _FIter>
580 max_element(_FIter, _FIter);
582 template<typename _FIter, typename _Compare>
584 max_element(_FIter, _FIter, _Compare);
586 template<typename _IIter1, typename _IIter2, typename _OIter>
588 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
590 template<typename _IIter1, typename _IIter2, typename _OIter,
593 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
595 template<typename _FIter>
597 min_element(_FIter, _FIter);
599 template<typename _FIter, typename _Compare>
601 min_element(_FIter, _FIter, _Compare);
603 template<typename _IIter1, typename _IIter2>
604 pair<_IIter1, _IIter2>
605 mismatch(_IIter1, _IIter1, _IIter2);
607 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
608 pair<_IIter1, _IIter2>
609 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
611 template<typename _RAIter>
613 nth_element(_RAIter, _RAIter, _RAIter);
615 template<typename _RAIter, typename _Compare>
617 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
619 template<typename _RAIter>
621 partial_sort(_RAIter, _RAIter, _RAIter);
623 template<typename _RAIter, typename _Compare>
625 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
627 template<typename _BIter, typename _Predicate>
629 partition(_BIter, _BIter, _Predicate);
631 template<typename _RAIter>
633 random_shuffle(_RAIter, _RAIter);
635 template<typename _RAIter, typename _Generator>
637 random_shuffle(_RAIter, _RAIter, _Generator&);
639 template<typename _FIter, typename _Tp>
641 replace(_FIter, _FIter, const _Tp&, const _Tp&);
643 template<typename _FIter, typename _Predicate, typename _Tp>
645 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
647 template<typename _FIter1, typename _FIter2>
649 search(_FIter1, _FIter1, _FIter2, _FIter2);
651 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
653 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
655 template<typename _FIter, typename _Size, typename _Tp>
657 search_n(_FIter, _FIter, _Size, const _Tp&);
659 template<typename _FIter, typename _Size, typename _Tp,
660 typename _BinaryPredicate>
662 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
664 template<typename _IIter1, typename _IIter2, typename _OIter>
666 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
668 template<typename _IIter1, typename _IIter2, typename _OIter,
671 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
673 template<typename _IIter1, typename _IIter2, typename _OIter>
675 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
677 template<typename _IIter1, typename _IIter2, typename _OIter,
680 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
682 template<typename _IIter1, typename _IIter2, typename _OIter>
684 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
686 template<typename _IIter1, typename _IIter2, typename _OIter,
689 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
692 template<typename _IIter1, typename _IIter2, typename _OIter>
694 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
696 template<typename _IIter1, typename _IIter2, typename _OIter,
699 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
701 template<typename _RAIter>
703 sort(_RAIter, _RAIter);
705 template<typename _RAIter, typename _Compare>
707 sort(_RAIter, _RAIter, _Compare);
709 template<typename _RAIter>
711 stable_sort(_RAIter, _RAIter);
713 template<typename _RAIter, typename _Compare>
715 stable_sort(_RAIter, _RAIter, _Compare);
717 template<typename _IIter, typename _OIter, typename _UnaryOperation>
719 transform(_IIter, _IIter, _OIter, _UnaryOperation);
721 template<typename _IIter1, typename _IIter2, typename _OIter,
722 typename _BinaryOperation>
724 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
726 template<typename _IIter, typename _OIter>
728 unique_copy(_IIter, _IIter, _OIter);
730 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
732 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
734 _GLIBCXX_END_NESTED_NAMESPACE
736 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
737 # include <parallel/algorithmfwd.h>