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_sorted_until (C++0x)
55 lexicographical_compare
64 minmax_element (C++0x)
72 partition_copy (C++0x)
93 set_symmetric_difference
107 #ifndef _GLIBCXX_ALGORITHMFWD_H
108 #define _GLIBCXX_ALGORITHMFWD_H 1
110 #pragma GCC system_header
112 #include <bits/c++config.h>
113 #include <bits/stl_pair.h>
114 #include <bits/stl_iterator_base_types.h>
116 _GLIBCXX_BEGIN_NAMESPACE(std)
120 #ifdef __GXX_EXPERIMENTAL_CXX0X__
121 template<typename _IIter, typename _Predicate>
123 all_of(_IIter, _IIter, _Predicate);
125 template<typename _IIter, typename _Predicate>
127 any_of(_IIter, _IIter, _Predicate);
130 template<typename _FIter, typename _Tp>
132 binary_search(_FIter, _FIter, const _Tp&);
134 template<typename _FIter, typename _Tp, typename _Compare>
136 binary_search(_FIter, _FIter, const _Tp&, _Compare);
138 template<typename _IIter, typename _OIter>
140 copy(_IIter, _IIter, _OIter);
142 template<typename _BIter1, typename _BIter2>
144 copy_backward(_BIter1, _BIter1, _BIter2);
146 #ifdef __GXX_EXPERIMENTAL_CXX0X__
147 template<typename _IIter, typename _OIter, typename _Predicate>
149 copy_if(_IIter, _IIter, _OIter, _Predicate);
155 template<typename _FIter, typename _Tp>
157 equal_range(_FIter, _FIter, const _Tp&);
159 template<typename _FIter, typename _Tp, typename _Compare>
161 equal_range(_FIter, _FIter, const _Tp&, _Compare);
163 template<typename _FIter, typename _Tp>
165 fill(_FIter, _FIter, const _Tp&);
168 XXX NB: return type different from ISO C++.
169 template<typename _OIter, typename _Size, typename _Tp>
171 fill_n(_OIter, _Size, const _Tp&);
174 template<typename _OIter, typename _Size, typename _Tp>
176 fill_n(_OIter, _Size, const _Tp&);
180 template<typename _FIter1, typename _FIter2>
182 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
184 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
186 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
191 #ifdef __GXX_EXPERIMENTAL_CXX0X__
192 template<typename _IIter, typename _Predicate>
194 find_if_not(_IIter, _IIter, _Predicate);
201 template<typename _IIter1, typename _IIter2>
203 includes(_IIter1, _IIter1, _IIter2, _IIter2);
205 template<typename _IIter1, typename _IIter2, typename _Compare>
207 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
209 template<typename _BIter>
211 inplace_merge(_BIter, _BIter, _BIter);
213 template<typename _BIter, typename _Compare>
215 inplace_merge(_BIter, _BIter, _BIter, _Compare);
217 #ifdef __GXX_EXPERIMENTAL_CXX0X__
218 template<typename _RAIter>
220 is_heap(_RAIter, _RAIter);
222 template<typename _RAIter, typename _Compare>
224 is_heap(_RAIter, _RAIter, _Compare);
226 template<typename _RAIter>
228 is_heap_until(_RAIter, _RAIter);
230 template<typename _RAIter, typename _Compare>
232 is_heap_until(_RAIter, _RAIter, _Compare);
234 template<typename _FIter>
236 is_sorted(_FIter, _FIter);
238 template<typename _FIter, typename _Compare>
240 is_sorted(_FIter, _FIter, _Compare);
242 template<typename _FIter>
244 is_sorted_until(_FIter, _FIter);
246 template<typename _FIter, typename _Compare>
248 is_sorted_until(_FIter, _FIter, _Compare);
251 template<typename _FIter1, typename _FIter2>
253 iter_swap(_FIter1, _FIter2);
255 template<typename _FIter, typename _Tp>
257 lower_bound(_FIter, _FIter, const _Tp&);
259 template<typename _FIter, typename _Tp, typename _Compare>
261 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
263 template<typename _RAIter>
265 make_heap(_RAIter, _RAIter);
267 template<typename _RAIter, typename _Compare>
269 make_heap(_RAIter, _RAIter, _Compare);
271 template<typename _Tp>
273 max(const _Tp&, const _Tp&);
275 template<typename _Tp, typename _Compare>
277 max(const _Tp&, const _Tp&, _Compare);
282 template<typename _Tp>
284 min(const _Tp&, const _Tp&);
286 template<typename _Tp, typename _Compare>
288 min(const _Tp&, const _Tp&, _Compare);
292 #ifdef __GXX_EXPERIMENTAL_CXX0X__
293 template<typename _Tp>
294 pair<const _Tp&, const _Tp&>
295 minmax(const _Tp&, const _Tp&);
297 template<typename _Tp, typename _Compare>
298 pair<const _Tp&, const _Tp&>
299 minmax(const _Tp&, const _Tp&, _Compare);
301 template<typename _FIter>
303 minmax_element(_FIter, _FIter);
305 template<typename _FIter, typename _Compare>
307 minmax_element(_FIter, _FIter, _Compare);
312 template<typename _BIter>
314 next_permutation(_BIter, _BIter);
316 template<typename _BIter, typename _Compare>
318 next_permutation(_BIter, _BIter, _Compare);
320 #ifdef __GXX_EXPERIMENTAL_CXX0X__
321 template<typename _IIter, typename _Predicate>
323 none_of(_IIter, _IIter, _Predicate);
329 template<typename _IIter, typename _RAIter>
331 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
333 template<typename _IIter, typename _RAIter, typename _Compare>
335 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
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);
346 template<typename _RAIter>
348 pop_heap(_RAIter, _RAIter);
350 template<typename _RAIter, typename _Compare>
352 pop_heap(_RAIter, _RAIter, _Compare);
354 template<typename _BIter>
356 prev_permutation(_BIter, _BIter);
358 template<typename _BIter, typename _Compare>
360 prev_permutation(_BIter, _BIter, _Compare);
362 template<typename _RAIter>
364 push_heap(_RAIter, _RAIter);
366 template<typename _RAIter, typename _Compare>
368 push_heap(_RAIter, _RAIter, _Compare);
372 template<typename _FIter, typename _Tp>
374 remove(_FIter, _FIter, const _Tp&);
376 template<typename _FIter, typename _Predicate>
378 remove_if(_FIter, _FIter, _Predicate);
380 template<typename _IIter, typename _OIter, typename _Tp>
382 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
384 template<typename _IIter, typename _OIter, typename _Predicate>
386 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
390 template<typename _IIter, typename _OIter, typename _Tp>
392 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
394 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
396 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
400 template<typename _BIter>
402 reverse(_BIter, _BIter);
404 template<typename _BIter, typename _OIter>
406 reverse_copy(_BIter, _BIter, _OIter);
408 template<typename _FIter>
410 rotate(_FIter, _FIter, _FIter);
412 template<typename _FIter, typename _OIter>
414 rotate_copy(_FIter, _FIter, _FIter, _OIter);
420 // set_symmetric_difference
423 template<typename _RAIter>
425 sort_heap(_RAIter, _RAIter);
427 template<typename _RAIter, typename _Compare>
429 sort_heap(_RAIter, _RAIter, _Compare);
431 template<typename _BIter, typename _Predicate>
433 stable_partition(_BIter, _BIter, _Predicate);
435 template<typename _Tp>
439 template<typename _Tp, size_t _Nm>
441 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
443 template<typename _FIter1, typename _FIter2>
445 swap_ranges(_FIter1, _FIter1, _FIter2);
449 template<typename _FIter>
451 unique(_FIter, _FIter);
453 template<typename _FIter, typename _BinaryPredicate>
455 unique(_FIter, _FIter, _BinaryPredicate);
459 template<typename _FIter, typename _Tp>
461 upper_bound(_FIter, _FIter, const _Tp&);
463 template<typename _FIter, typename _Tp, typename _Compare>
465 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
467 _GLIBCXX_END_NAMESPACE
469 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
471 template<typename _FIter>
473 adjacent_find(_FIter, _FIter);
475 template<typename _FIter, typename _BinaryPredicate>
477 adjacent_find(_FIter, _FIter, _BinaryPredicate);
479 template<typename _IIter, typename _Tp>
480 typename iterator_traits<_IIter>::difference_type
481 count(_IIter, _IIter, const _Tp&);
483 template<typename _IIter, typename _Predicate>
484 typename iterator_traits<_IIter>::difference_type
485 count_if(_IIter, _IIter, _Predicate);
487 template<typename _IIter1, typename _IIter2>
489 equal(_IIter1, _IIter1, _IIter2);
491 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
493 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
495 template<typename _IIter, typename _Tp>
497 find(_IIter, _IIter, const _Tp&);
499 template<typename _FIter1, typename _FIter2>
501 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
503 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
505 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
507 template<typename _IIter, typename _Predicate>
509 find_if(_IIter, _IIter, _Predicate);
511 template<typename _IIter, typename _Funct>
513 for_each(_IIter, _IIter, _Funct);
515 template<typename _FIter, typename _Generator>
517 generate(_FIter, _FIter, _Generator);
520 XXX NB: return type different from ISO C++.
521 template<typename _OIter, typename _Size, typename _Tp>
523 generate_n(_OIter, _Size, _Generator);
526 template<typename _OIter, typename _Size, typename _Generator>
528 generate_n(_OIter, _Size, _Generator);
530 template<typename _IIter1, typename _IIter2>
532 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
534 template<typename _IIter1, typename _IIter2, typename _Compare>
536 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
538 template<typename _FIter>
540 max_element(_FIter, _FIter);
542 template<typename _FIter, typename _Compare>
544 max_element(_FIter, _FIter, _Compare);
546 template<typename _IIter1, typename _IIter2, typename _OIter>
548 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
550 template<typename _IIter1, typename _IIter2, typename _OIter,
553 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
555 template<typename _FIter>
557 min_element(_FIter, _FIter);
559 template<typename _FIter, typename _Compare>
561 min_element(_FIter, _FIter, _Compare);
563 template<typename _IIter1, typename _IIter2>
564 pair<_IIter1, _IIter2>
565 mismatch(_IIter1, _IIter1, _IIter2);
567 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
568 pair<_IIter1, _IIter2>
569 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
571 template<typename _RAIter>
573 nth_element(_RAIter, _RAIter, _RAIter);
575 template<typename _RAIter, typename _Compare>
577 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
579 template<typename _RAIter>
581 partial_sort(_RAIter, _RAIter, _RAIter);
583 template<typename _RAIter, typename _Compare>
585 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
587 template<typename _BIter, typename _Predicate>
589 partition(_BIter, _BIter, _Predicate);
591 template<typename _RAIter>
593 random_shuffle(_RAIter, _RAIter);
595 template<typename _RAIter, typename _Generator>
597 random_shuffle(_RAIter, _RAIter, _Generator&);
599 template<typename _FIter, typename _Tp>
601 replace(_FIter, _FIter, const _Tp&, const _Tp&);
603 template<typename _FIter, typename _Predicate, typename _Tp>
605 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
607 template<typename _FIter1, typename _FIter2>
609 search(_FIter1, _FIter1, _FIter2, _FIter2);
611 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
613 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
615 template<typename _FIter, typename _Size, typename _Tp>
617 search_n(_FIter, _FIter, _Size, const _Tp&);
619 template<typename _FIter, typename _Size, typename _Tp,
620 typename _BinaryPredicate>
622 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
624 template<typename _IIter1, typename _IIter2, typename _OIter>
626 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
628 template<typename _IIter1, typename _IIter2, typename _OIter,
631 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
633 template<typename _IIter1, typename _IIter2, typename _OIter>
635 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
637 template<typename _IIter1, typename _IIter2, typename _OIter,
640 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
642 template<typename _IIter1, typename _IIter2, typename _OIter>
644 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
646 template<typename _IIter1, typename _IIter2, typename _OIter,
649 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
652 template<typename _IIter1, typename _IIter2, typename _OIter>
654 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
656 template<typename _IIter1, typename _IIter2, typename _OIter,
659 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
661 template<typename _RAIter>
663 sort(_RAIter, _RAIter);
665 template<typename _RAIter, typename _Compare>
667 sort(_RAIter, _RAIter, _Compare);
669 template<typename _RAIter>
671 stable_sort(_RAIter, _RAIter);
673 template<typename _RAIter, typename _Compare>
675 stable_sort(_RAIter, _RAIter, _Compare);
677 template<typename _IIter, typename _OIter, typename _UnaryOperation>
679 transform(_IIter, _IIter, _OIter, _UnaryOperation);
681 template<typename _IIter1, typename _IIter2, typename _OIter,
682 typename _BinaryOperation>
684 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
686 template<typename _IIter, typename _OIter>
688 unique_copy(_IIter, _IIter, _OIter);
690 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
692 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
694 _GLIBCXX_END_NESTED_NAMESPACE
696 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
697 # include <parallel/algorithmfwd.h>