1 // <algorithm> declarations -*- C++ -*-
3 // Copyright (C) 2007 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.
49 is_sorted_until (C++0x)
51 lexicographical_compare
60 minmax_element (C++0x)
87 set_symmetric_difference
101 #ifndef _GLIBCXX_ALGORITHMFWD_H
102 #define _GLIBCXX_ALGORITHMFWD_H 1
104 #pragma GCC system_header
106 #include <bits/c++config.h>
107 #include <bits/stl_pair.h>
108 #include <bits/stl_iterator_base_types.h>
110 _GLIBCXX_BEGIN_NAMESPACE(std)
114 template<typename _FIter, typename _Tp>
116 binary_search(_FIter, _FIter, const _Tp&);
118 template<typename _FIter, typename _Tp, typename _Compare>
120 binary_search(_FIter, _FIter, const _Tp&, _Compare);
122 template<typename _IIter, typename _OIter>
124 copy(_IIter, _IIter, _OIter);
126 template<typename _BIter1, typename _BIter2>
128 copy_backward(_BIter1, _BIter1, _BIter2);
133 template<typename _FIter, typename _Tp>
135 equal_range(_FIter, _FIter, const _Tp&);
137 template<typename _FIter, typename _Tp, typename _Compare>
139 equal_range(_FIter, _FIter, const _Tp&, _Compare);
141 template<typename _FIter, typename _Tp>
143 fill(_FIter, _FIter, const _Tp&);
146 XXX NB: return type different from ISO C++.
147 template<typename _OIter, typename _Size, typename _Tp>
149 fill_n(_OIter, _Size, const _Tp&);
152 template<typename _OIter, typename _Size, typename _Tp>
154 fill_n(_OIter, _Size, const _Tp&);
158 template<typename _FIter1, typename _FIter2>
160 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
162 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
164 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
172 template<typename _IIter1, typename _IIter2>
174 includes(_IIter1, _IIter1, _IIter2, _IIter2);
176 template<typename _IIter1, typename _IIter2, typename _Compare>
178 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
180 template<typename _BIter>
182 inplace_merge(_BIter, _BIter, _BIter);
184 template<typename _BIter, typename _Compare>
186 inplace_merge(_BIter, _BIter, _BIter, _Compare);
188 #ifdef __GXX_EXPERIMENTAL_CXX0X__
189 template<typename _RAIter>
191 is_heap(_RAIter, _RAIter);
193 template<typename _RAIter, typename _Compare>
195 is_heap(_RAIter, _RAIter, _Compare);
197 template<typename _RAIter>
199 is_heap_until(_RAIter, _RAIter);
201 template<typename _RAIter, typename _Compare>
203 is_heap_until(_RAIter, _RAIter, _Compare);
205 template<typename _FIter>
207 is_sorted(_FIter, _FIter);
209 template<typename _FIter, typename _Compare>
211 is_sorted(_FIter, _FIter, _Compare);
213 template<typename _FIter>
215 is_sorted_until(_FIter, _FIter);
217 template<typename _FIter, typename _Compare>
219 is_sorted_until(_FIter, _FIter, _Compare);
222 template<typename _FIter1, typename _FIter2>
224 iter_swap(_FIter1, _FIter2);
226 template<typename _FIter, typename _Tp>
228 lower_bound(_FIter, _FIter, const _Tp&);
230 template<typename _FIter, typename _Tp, typename _Compare>
232 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
234 template<typename _RAIter>
236 make_heap(_RAIter, _RAIter);
238 template<typename _RAIter, typename _Compare>
240 make_heap(_RAIter, _RAIter, _Compare);
242 template<typename _Tp>
244 max(const _Tp&, const _Tp&);
246 template<typename _Tp, typename _Compare>
248 max(const _Tp&, const _Tp&, _Compare);
253 template<typename _Tp>
255 min(const _Tp&, const _Tp&);
257 template<typename _Tp, typename _Compare>
259 min(const _Tp&, const _Tp&, _Compare);
263 #ifdef __GXX_EXPERIMENTAL_CXX0X__
264 template<typename _Tp>
265 pair<const _Tp&, const _Tp&>
266 minmax(const _Tp&, const _Tp&);
268 template<typename _Tp, typename _Compare>
269 pair<const _Tp&, const _Tp&>
270 minmax(const _Tp&, const _Tp&, _Compare);
272 template<typename _FIter>
274 minmax_element(_FIter, _FIter);
276 template<typename _FIter, typename _Compare>
278 minmax_element(_FIter, _FIter, _Compare);
283 template<typename _BIter>
285 next_permutation(_BIter, _BIter);
287 template<typename _BIter, typename _Compare>
289 next_permutation(_BIter, _BIter, _Compare);
294 template<typename _IIter, typename _RAIter>
296 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
298 template<typename _IIter, typename _RAIter, typename _Compare>
300 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
302 template<typename _RAIter>
304 pop_heap(_RAIter, _RAIter);
306 template<typename _RAIter, typename _Compare>
308 pop_heap(_RAIter, _RAIter, _Compare);
310 template<typename _BIter>
312 prev_permutation(_BIter, _BIter);
314 template<typename _BIter, typename _Compare>
316 prev_permutation(_BIter, _BIter, _Compare);
318 template<typename _RAIter>
320 push_heap(_RAIter, _RAIter);
322 template<typename _RAIter, typename _Compare>
324 push_heap(_RAIter, _RAIter, _Compare);
328 template<typename _FIter, typename _Tp>
330 remove(_FIter, _FIter, const _Tp&);
332 template<typename _FIter, typename _Predicate>
334 remove_if(_FIter, _FIter, _Predicate);
336 template<typename _IIter, typename _OIter, typename _Tp>
338 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
340 template<typename _IIter, typename _OIter, typename _Predicate>
342 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
346 template<typename _IIter, typename _OIter, typename _Tp>
348 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
350 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
352 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
356 template<typename _BIter>
358 reverse(_BIter, _BIter);
360 template<typename _BIter, typename _OIter>
362 reverse_copy(_BIter, _BIter, _OIter);
364 template<typename _FIter>
366 rotate(_FIter, _FIter, _FIter);
368 template<typename _FIter, typename _OIter>
370 rotate_copy(_FIter, _FIter, _FIter, _OIter);
376 // set_symmetric_difference
379 template<typename _RAIter>
381 sort_heap(_RAIter, _RAIter);
383 template<typename _RAIter, typename _Compare>
385 sort_heap(_RAIter, _RAIter, _Compare);
387 template<typename _BIter, typename _Predicate>
389 stable_partition(_BIter, _BIter, _Predicate);
391 template<typename _Tp>
395 template<typename _FIter1, typename _FIter2>
397 swap_ranges(_FIter1, _FIter1, _FIter2);
401 template<typename _FIter>
403 unique(_FIter, _FIter);
405 template<typename _FIter, typename _BinaryPredicate>
407 unique(_FIter, _FIter, _BinaryPredicate);
411 template<typename _FIter, typename _Tp>
413 upper_bound(_FIter, _FIter, const _Tp&);
415 template<typename _FIter, typename _Tp, typename _Compare>
417 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
419 _GLIBCXX_END_NAMESPACE
421 _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
423 template<typename _FIter>
425 adjacent_find(_FIter, _FIter);
427 template<typename _FIter, typename _BinaryPredicate>
429 adjacent_find(_FIter, _FIter, _BinaryPredicate);
431 template<typename _IIter, typename _Tp>
432 typename iterator_traits<_IIter>::difference_type
433 count(_IIter, _IIter, const _Tp&);
435 template<typename _IIter, typename _Predicate>
436 typename iterator_traits<_IIter>::difference_type
437 count_if(_IIter, _IIter, _Predicate);
439 template<typename _IIter1, typename _IIter2>
441 equal(_IIter1, _IIter1, _IIter2);
443 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
445 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
447 template<typename _IIter, typename _Tp>
449 find(_IIter, _IIter, const _Tp&);
451 template<typename _FIter1, typename _FIter2>
453 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
455 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
457 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
459 template<typename _IIter, typename _Predicate>
461 find_if(_IIter, _IIter, _Predicate);
463 template<typename _IIter, typename _Funct>
465 for_each(_IIter, _IIter, _Funct);
467 template<typename _FIter, typename _Generator>
469 generate(_FIter, _FIter, _Generator);
472 XXX NB: return type different from ISO C++.
473 template<typename _OIter, typename _Size, typename _Tp>
475 generate_n(_OIter, _Size, _Generator);
478 template<typename _OIter, typename _Size, typename _Generator>
480 generate_n(_OIter, _Size, _Generator);
482 template<typename _IIter1, typename _IIter2>
484 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
486 template<typename _IIter1, typename _IIter2, typename _Compare>
488 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
490 template<typename _FIter>
492 max_element(_FIter, _FIter);
494 template<typename _FIter, typename _Compare>
496 max_element(_FIter, _FIter, _Compare);
498 template<typename _IIter1, typename _IIter2, typename _OIter>
500 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
502 template<typename _IIter1, typename _IIter2, typename _OIter,
505 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
507 template<typename _FIter>
509 min_element(_FIter, _FIter);
511 template<typename _FIter, typename _Compare>
513 min_element(_FIter, _FIter, _Compare);
515 template<typename _IIter1, typename _IIter2>
516 pair<_IIter1, _IIter2>
517 mismatch(_IIter1, _IIter1, _IIter2);
519 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
520 pair<_IIter1, _IIter2>
521 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
523 template<typename _RAIter>
525 nth_element(_RAIter, _RAIter, _RAIter);
527 template<typename _RAIter, typename _Compare>
529 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
531 template<typename _RAIter>
533 partial_sort(_RAIter, _RAIter, _RAIter);
535 template<typename _RAIter, typename _Compare>
537 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
539 template<typename _BIter, typename _Predicate>
541 partition(_BIter, _BIter, _Predicate);
543 template<typename _RAIter>
545 random_shuffle(_RAIter, _RAIter);
547 template<typename _RAIter, typename _Generator>
549 random_shuffle(_RAIter, _RAIter, _Generator&);
551 template<typename _FIter, typename _Tp>
553 replace(_FIter, _FIter, const _Tp&, const _Tp&);
555 template<typename _FIter, typename _Predicate, typename _Tp>
557 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
559 template<typename _FIter1, typename _FIter2>
561 search(_FIter1, _FIter1, _FIter2, _FIter2);
563 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
565 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
567 template<typename _FIter, typename _Size, typename _Tp>
569 search_n(_FIter, _FIter, _Size, const _Tp&);
571 template<typename _FIter, typename _Size, typename _Tp,
572 typename _BinaryPredicate>
574 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
576 template<typename _IIter1, typename _IIter2, typename _OIter>
578 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
580 template<typename _IIter1, typename _IIter2, typename _OIter,
583 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
585 template<typename _IIter1, typename _IIter2, typename _OIter>
587 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
589 template<typename _IIter1, typename _IIter2, typename _OIter,
592 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
594 template<typename _IIter1, typename _IIter2, typename _OIter>
596 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
598 template<typename _IIter1, typename _IIter2, typename _OIter,
601 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
604 template<typename _IIter1, typename _IIter2, typename _OIter>
606 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
608 template<typename _IIter1, typename _IIter2, typename _OIter,
611 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
613 template<typename _RAIter>
615 sort(_RAIter, _RAIter);
617 template<typename _RAIter, typename _Compare>
619 sort(_RAIter, _RAIter, _Compare);
621 template<typename _RAIter>
623 stable_sort(_RAIter, _RAIter);
625 template<typename _RAIter, typename _Compare>
627 stable_sort(_RAIter, _RAIter, _Compare);
629 template<typename _IIter, typename _OIter, typename _UnaryOperation>
631 transform(_IIter, _IIter, _OIter, _UnaryOperation);
633 template<typename _IIter1, typename _IIter2, typename _OIter,
634 typename _BinaryOperation>
636 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
638 template<typename _IIter, typename _OIter>
640 unique_copy(_IIter, _IIter, _OIter);
642 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
644 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
646 _GLIBCXX_END_NESTED_NAMESPACE
648 #ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
649 # include <parallel/algorithmfwd.h>