]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/bits/algorithmfwd.h
xtensa: fix PR target/90922
[thirdparty/gcc.git] / libstdc++-v3 / include / bits / algorithmfwd.h
CommitLineData
cd1e6665 1// <algorithm> Forward declarations -*- C++ -*-
c2ba9709 2
a5544970 3// Copyright (C) 2007-2019 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
748086b7 8// Free Software Foundation; either version 3, or (at your option)
c2ba9709
JS
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
748086b7
JJ
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23// <http://www.gnu.org/licenses/>.
c2ba9709
JS
24
25/** @file bits/algorithmfwd.h
26 * This is an internal header file, included by other library headers.
f910786b 27 * Do not attempt to use it directly. @headername{algorithm}
c2ba9709
JS
28 */
29
c2ba9709
JS
30#ifndef _GLIBCXX_ALGORITHMFWD_H
31#define _GLIBCXX_ALGORITHMFWD_H 1
32
33#pragma GCC system_header
34
35#include <bits/c++config.h>
36#include <bits/stl_pair.h>
37#include <bits/stl_iterator_base_types.h>
734f5023 38#if __cplusplus >= 201103L
1edd1a83 39#include <initializer_list>
a7d5d7e2 40#endif
c2ba9709 41
12ffa228
BK
42namespace std _GLIBCXX_VISIBILITY(default)
43{
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
c2ba9709 45
aac2878e
BK
46 /*
47 adjacent_find
4f5f9962
JW
48 all_of (C++11)
49 any_of (C++11)
aac2878e 50 binary_search
4db1cb44 51 clamp (C++17)
aac2878e
BK
52 copy
53 copy_backward
4f5f9962
JW
54 copy_if (C++11)
55 copy_n (C++11)
aac2878e
BK
56 count
57 count_if
58 equal
59 equal_range
60 fill
61 fill_n
62 find
63 find_end
64 find_first_of
65 find_if
4f5f9962 66 find_if_not (C++11)
aac2878e
BK
67 for_each
68 generate
69 generate_n
70 includes
71 inplace_merge
4f5f9962
JW
72 is_heap (C++11)
73 is_heap_until (C++11)
74 is_partitioned (C++11)
75 is_sorted (C++11)
76 is_sorted_until (C++11)
aac2878e
BK
77 iter_swap
78 lexicographical_compare
79 lower_bound
80 make_heap
81 max
82 max_element
83 merge
84 min
85 min_element
4f5f9962
JW
86 minmax (C++11)
87 minmax_element (C++11)
aac2878e
BK
88 mismatch
89 next_permutation
4f5f9962 90 none_of (C++11)
aac2878e
BK
91 nth_element
92 partial_sort
93 partial_sort_copy
94 partition
4f5f9962
JW
95 partition_copy (C++11)
96 partition_point (C++11)
aac2878e
BK
97 pop_heap
98 prev_permutation
99 push_heap
100 random_shuffle
101 remove
102 remove_copy
103 remove_copy_if
104 remove_if
105 replace
106 replace_copy
107 replace_copy_if
108 replace_if
109 reverse
110 reverse_copy
111 rotate
112 rotate_copy
113 search
114 search_n
115 set_difference
116 set_intersection
117 set_symmetric_difference
118 set_union
4f5f9962 119 shuffle (C++11)
aac2878e
BK
120 sort
121 sort_heap
122 stable_partition
123 stable_sort
124 swap
125 swap_ranges
126 transform
127 unique
128 unique_copy
129 upper_bound
130 */
131
132 /**
133 * @defgroup algorithms Algorithms
134 *
135 * Components for performing algorithmic operations. Includes
136 * non-modifying sequence, modifying (mutating) sequence, sorting,
137 * searching, merge, partition, heap, set, minima, maxima, and
138 * permutation operations.
139 */
140
141 /**
5ab3a5af 142 * @defgroup mutating_algorithms Mutating
5b9daa7e
BK
143 * @ingroup algorithms
144 */
145
146 /**
5ab3a5af 147 * @defgroup non_mutating_algorithms Non-Mutating
5b9daa7e
BK
148 * @ingroup algorithms
149 */
150
151 /**
5ab3a5af 152 * @defgroup sorting_algorithms Sorting
aac2878e 153 * @ingroup algorithms
5b9daa7e
BK
154 */
155
156 /**
5ab3a5af 157 * @defgroup set_algorithms Set Operation
5b9daa7e 158 * @ingroup sorting_algorithms
aac2878e
BK
159 *
160 * These algorithms are common set operations performed on sequences
161 * that are already sorted. The number of comparisons will be
162 * linear.
163 */
164
165 /**
5ab3a5af 166 * @defgroup binary_search_algorithms Binary Search
5b9daa7e 167 * @ingroup sorting_algorithms
aac2878e
BK
168 *
169 * These algorithms are variations of a classic binary search, and
170 * all assume that the sequence being searched is already sorted.
9a38acdf 171 *
aac2878e
BK
172 * The number of comparisons will be logarithmic (and as few as
173 * possible). The number of steps through the sequence will be
174 * logarithmic for random-access iterators (e.g., pointers), and
175 * linear otherwise.
9a38acdf 176 *
aac2878e
BK
177 * The LWG has passed Defect Report 270, which notes: <em>The
178 * proposed resolution reinterprets binary search. Instead of
179 * thinking about searching for a value in a sorted range, we view
180 * that as an important special case of a more general algorithm:
181 * searching for the partition point in a partitioned range. We
182 * also add a guarantee that the old wording did not: we ensure that
183 * the upper bound is no earlier than the lower bound, that the pair
184 * returned by equal_range is a valid range, and that the first part
185 * of that pair is the lower bound.</em>
186 *
187 * The actual effect of the first sentence is that a comparison
188 * functor passed by the user doesn't necessarily need to induce a
189 * strict weak ordering relation. Rather, it partitions the range.
190 */
191
c2ba9709
JS
192 // adjacent_find
193
734f5023 194#if __cplusplus >= 201103L
688a7a07
PC
195 template<typename _IIter, typename _Predicate>
196 bool
197 all_of(_IIter, _IIter, _Predicate);
198
199 template<typename _IIter, typename _Predicate>
200 bool
201 any_of(_IIter, _IIter, _Predicate);
202#endif
203
c2ba9709 204 template<typename _FIter, typename _Tp>
9a38acdf 205 bool
c2ba9709
JS
206 binary_search(_FIter, _FIter, const _Tp&);
207
208 template<typename _FIter, typename _Tp, typename _Compare>
9a38acdf 209 bool
c2ba9709
JS
210 binary_search(_FIter, _FIter, const _Tp&, _Compare);
211
4db1cb44
ESR
212#if __cplusplus > 201402L
213 template<typename _Tp>
214 _GLIBCXX14_CONSTEXPR
215 const _Tp&
216 clamp(const _Tp&, const _Tp&, const _Tp&);
217
218 template<typename _Tp, typename _Compare>
219 _GLIBCXX14_CONSTEXPR
220 const _Tp&
221 clamp(const _Tp&, const _Tp&, const _Tp&, _Compare);
222#endif
223
c2ba9709 224 template<typename _IIter, typename _OIter>
9a38acdf 225 _OIter
c2ba9709
JS
226 copy(_IIter, _IIter, _OIter);
227
228 template<typename _BIter1, typename _BIter2>
229 _BIter2
4f99f3d0 230 copy_backward(_BIter1, _BIter1, _BIter2);
c2ba9709 231
734f5023 232#if __cplusplus >= 201103L
688a7a07
PC
233 template<typename _IIter, typename _OIter, typename _Predicate>
234 _OIter
235 copy_if(_IIter, _IIter, _OIter, _Predicate);
b0371776
PC
236
237 template<typename _IIter, typename _Size, typename _OIter>
238 _OIter
239 copy_n(_IIter, _Size, _OIter);
688a7a07
PC
240#endif
241
c2ba9709
JS
242 // count
243 // count_if
244
245 template<typename _FIter, typename _Tp>
246 pair<_FIter, _FIter>
247 equal_range(_FIter, _FIter, const _Tp&);
248
249 template<typename _FIter, typename _Tp, typename _Compare>
250 pair<_FIter, _FIter>
251 equal_range(_FIter, _FIter, const _Tp&, _Compare);
252
253 template<typename _FIter, typename _Tp>
9a38acdf 254 void
c2ba9709
JS
255 fill(_FIter, _FIter, const _Tp&);
256
c2ba9709
JS
257 template<typename _OIter, typename _Size, typename _Tp>
258 _OIter
259 fill_n(_OIter, _Size, const _Tp&);
260
261 // find
6f95a65a
BK
262
263 template<typename _FIter1, typename _FIter2>
264 _FIter1
265 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
266
267 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
268 _FIter1
269 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
270
c2ba9709
JS
271 // find_first_of
272 // find_if
c2ba9709 273
734f5023 274#if __cplusplus >= 201103L
76cc1b70
PC
275 template<typename _IIter, typename _Predicate>
276 _IIter
277 find_if_not(_IIter, _IIter, _Predicate);
278#endif
279
688a7a07
PC
280 // for_each
281 // generate
282 // generate_n
283
c2ba9709 284 template<typename _IIter1, typename _IIter2>
9a38acdf 285 bool
c2ba9709
JS
286 includes(_IIter1, _IIter1, _IIter2, _IIter2);
287
288 template<typename _IIter1, typename _IIter2, typename _Compare>
9a38acdf 289 bool
c2ba9709
JS
290 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
291
292 template<typename _BIter>
9a38acdf 293 void
c2ba9709
JS
294 inplace_merge(_BIter, _BIter, _BIter);
295
296 template<typename _BIter, typename _Compare>
9a38acdf 297 void
c2ba9709
JS
298 inplace_merge(_BIter, _BIter, _BIter, _Compare);
299
734f5023 300#if __cplusplus >= 201103L
e69f1bad 301 template<typename _RAIter>
9a38acdf 302 bool
e69f1bad
PC
303 is_heap(_RAIter, _RAIter);
304
305 template<typename _RAIter, typename _Compare>
9a38acdf 306 bool
e69f1bad
PC
307 is_heap(_RAIter, _RAIter, _Compare);
308
309 template<typename _RAIter>
9a38acdf 310 _RAIter
e69f1bad
PC
311 is_heap_until(_RAIter, _RAIter);
312
313 template<typename _RAIter, typename _Compare>
9a38acdf 314 _RAIter
e69f1bad 315 is_heap_until(_RAIter, _RAIter, _Compare);
4b7ed13a 316
04dbd891
PC
317 template<typename _IIter, typename _Predicate>
318 bool
319 is_partitioned(_IIter, _IIter, _Predicate);
320
632469d0
PC
321 template<typename _FIter1, typename _FIter2>
322 bool
323 is_permutation(_FIter1, _FIter1, _FIter2);
324
325 template<typename _FIter1, typename _FIter2,
326 typename _BinaryPredicate>
327 bool
328 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
329
4b7ed13a 330 template<typename _FIter>
9a38acdf 331 bool
4b7ed13a
PC
332 is_sorted(_FIter, _FIter);
333
334 template<typename _FIter, typename _Compare>
9a38acdf 335 bool
4b7ed13a
PC
336 is_sorted(_FIter, _FIter, _Compare);
337
338 template<typename _FIter>
9a38acdf 339 _FIter
4b7ed13a
PC
340 is_sorted_until(_FIter, _FIter);
341
342 template<typename _FIter, typename _Compare>
9a38acdf 343 _FIter
4b7ed13a 344 is_sorted_until(_FIter, _FIter, _Compare);
e69f1bad
PC
345#endif
346
c2ba9709 347 template<typename _FIter1, typename _FIter2>
9a38acdf 348 void
c2ba9709
JS
349 iter_swap(_FIter1, _FIter2);
350
c2ba9709 351 template<typename _FIter, typename _Tp>
9a38acdf 352 _FIter
c2ba9709
JS
353 lower_bound(_FIter, _FIter, const _Tp&);
354
355 template<typename _FIter, typename _Tp, typename _Compare>
9a38acdf 356 _FIter
c2ba9709
JS
357 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
358
359 template<typename _RAIter>
9a38acdf 360 void
c2ba9709
JS
361 make_heap(_RAIter, _RAIter);
362
363 template<typename _RAIter, typename _Compare>
9a38acdf 364 void
c2ba9709
JS
365 make_heap(_RAIter, _RAIter, _Compare);
366
9a38acdf 367 template<typename _Tp>
8dff34fe 368 _GLIBCXX14_CONSTEXPR
9a38acdf 369 const _Tp&
c2ba9709
JS
370 max(const _Tp&, const _Tp&);
371
372 template<typename _Tp, typename _Compare>
8dff34fe 373 _GLIBCXX14_CONSTEXPR
9a38acdf 374 const _Tp&
c2ba9709
JS
375 max(const _Tp&, const _Tp&, _Compare);
376
377 // max_element
378 // merge
379
9a38acdf 380 template<typename _Tp>
8dff34fe 381 _GLIBCXX14_CONSTEXPR
9a38acdf 382 const _Tp&
c2ba9709
JS
383 min(const _Tp&, const _Tp&);
384
385 template<typename _Tp, typename _Compare>
8dff34fe 386 _GLIBCXX14_CONSTEXPR
9a38acdf 387 const _Tp&
c2ba9709
JS
388 min(const _Tp&, const _Tp&, _Compare);
389
390 // min_element
f6547b68 391
734f5023 392#if __cplusplus >= 201103L
f6547b68 393 template<typename _Tp>
8dff34fe 394 _GLIBCXX14_CONSTEXPR
9a38acdf 395 pair<const _Tp&, const _Tp&>
f6547b68
PC
396 minmax(const _Tp&, const _Tp&);
397
398 template<typename _Tp, typename _Compare>
8dff34fe 399 _GLIBCXX14_CONSTEXPR
f6547b68
PC
400 pair<const _Tp&, const _Tp&>
401 minmax(const _Tp&, const _Tp&, _Compare);
402
403 template<typename _FIter>
8dff34fe 404 _GLIBCXX14_CONSTEXPR
f6547b68
PC
405 pair<_FIter, _FIter>
406 minmax_element(_FIter, _FIter);
407
408 template<typename _FIter, typename _Compare>
8dff34fe 409 _GLIBCXX14_CONSTEXPR
f6547b68
PC
410 pair<_FIter, _FIter>
411 minmax_element(_FIter, _FIter, _Compare);
1edd1a83
PC
412
413 template<typename _Tp>
8dff34fe 414 _GLIBCXX14_CONSTEXPR
116a365b 415 _Tp
1edd1a83
PC
416 min(initializer_list<_Tp>);
417
418 template<typename _Tp, typename _Compare>
8dff34fe 419 _GLIBCXX14_CONSTEXPR
116a365b 420 _Tp
1edd1a83
PC
421 min(initializer_list<_Tp>, _Compare);
422
423 template<typename _Tp>
8dff34fe 424 _GLIBCXX14_CONSTEXPR
116a365b 425 _Tp
1edd1a83
PC
426 max(initializer_list<_Tp>);
427
428 template<typename _Tp, typename _Compare>
8dff34fe 429 _GLIBCXX14_CONSTEXPR
116a365b 430 _Tp
1edd1a83
PC
431 max(initializer_list<_Tp>, _Compare);
432
433 template<typename _Tp>
8dff34fe 434 _GLIBCXX14_CONSTEXPR
116a365b 435 pair<_Tp, _Tp>
1edd1a83
PC
436 minmax(initializer_list<_Tp>);
437
438 template<typename _Tp, typename _Compare>
8dff34fe 439 _GLIBCXX14_CONSTEXPR
116a365b 440 pair<_Tp, _Tp>
1edd1a83 441 minmax(initializer_list<_Tp>, _Compare);
f6547b68
PC
442#endif
443
c2ba9709
JS
444 // mismatch
445
446 template<typename _BIter>
9a38acdf 447 bool
c2ba9709
JS
448 next_permutation(_BIter, _BIter);
449
450 template<typename _BIter, typename _Compare>
9a38acdf 451 bool
c2ba9709
JS
452 next_permutation(_BIter, _BIter, _Compare);
453
734f5023 454#if __cplusplus >= 201103L
688a7a07
PC
455 template<typename _IIter, typename _Predicate>
456 bool
457 none_of(_IIter, _IIter, _Predicate);
458#endif
459
c2ba9709
JS
460 // nth_element
461 // partial_sort
462
463 template<typename _IIter, typename _RAIter>
464 _RAIter
465 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
466
467 template<typename _IIter, typename _RAIter, typename _Compare>
468 _RAIter
469 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
470
688a7a07
PC
471 // partition
472
734f5023 473#if __cplusplus >= 201103L
688a7a07
PC
474 template<typename _IIter, typename _OIter1,
475 typename _OIter2, typename _Predicate>
476 pair<_OIter1, _OIter2>
477 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
d9be9bb3
PC
478
479 template<typename _FIter, typename _Predicate>
480 _FIter
481 partition_point(_FIter, _FIter, _Predicate);
688a7a07
PC
482#endif
483
c2ba9709 484 template<typename _RAIter>
9a38acdf 485 void
c2ba9709
JS
486 pop_heap(_RAIter, _RAIter);
487
488 template<typename _RAIter, typename _Compare>
9a38acdf 489 void
c2ba9709
JS
490 pop_heap(_RAIter, _RAIter, _Compare);
491
492 template<typename _BIter>
9a38acdf 493 bool
c2ba9709
JS
494 prev_permutation(_BIter, _BIter);
495
496 template<typename _BIter, typename _Compare>
9a38acdf 497 bool
c2ba9709
JS
498 prev_permutation(_BIter, _BIter, _Compare);
499
500 template<typename _RAIter>
9a38acdf 501 void
c2ba9709
JS
502 push_heap(_RAIter, _RAIter);
503
504 template<typename _RAIter, typename _Compare>
9a38acdf 505 void
c2ba9709
JS
506 push_heap(_RAIter, _RAIter, _Compare);
507
508 // random_shuffle
509
510 template<typename _FIter, typename _Tp>
9a38acdf 511 _FIter
c2ba9709
JS
512 remove(_FIter, _FIter, const _Tp&);
513
514 template<typename _FIter, typename _Predicate>
9a38acdf 515 _FIter
c2ba9709
JS
516 remove_if(_FIter, _FIter, _Predicate);
517
518 template<typename _IIter, typename _OIter, typename _Tp>
9a38acdf 519 _OIter
c2ba9709
JS
520 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
521
522 template<typename _IIter, typename _OIter, typename _Predicate>
9a38acdf 523 _OIter
c2ba9709
JS
524 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
525
526 // replace
527
528 template<typename _IIter, typename _OIter, typename _Tp>
9a38acdf 529 _OIter
c2ba9709
JS
530 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
531
532 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
9a38acdf 533 _OIter
c2ba9709
JS
534 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
535
536 // replace_if
537
538 template<typename _BIter>
9a38acdf 539 void
c2ba9709
JS
540 reverse(_BIter, _BIter);
541
542 template<typename _BIter, typename _OIter>
9a38acdf 543 _OIter
c2ba9709
JS
544 reverse_copy(_BIter, _BIter, _OIter);
545
87839f22
JW
546 inline namespace _V2
547 {
548 template<typename _FIter>
549 _FIter
550 rotate(_FIter, _FIter, _FIter);
551 }
c2ba9709
JS
552
553 template<typename _FIter, typename _OIter>
9a38acdf 554 _OIter
4f99f3d0 555 rotate_copy(_FIter, _FIter, _FIter, _OIter);
c2ba9709
JS
556
557 // search
558 // search_n
559 // set_difference
560 // set_intersection
561 // set_symmetric_difference
562 // set_union
563
734f5023 564#if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
247d8075
PC
565 template<typename _RAIter, typename _UGenerator>
566 void
633e8e19 567 shuffle(_RAIter, _RAIter, _UGenerator&&);
247d8075
PC
568#endif
569
c2ba9709 570 template<typename _RAIter>
9a38acdf 571 void
c2ba9709
JS
572 sort_heap(_RAIter, _RAIter);
573
574 template<typename _RAIter, typename _Compare>
9a38acdf 575 void
c2ba9709
JS
576 sort_heap(_RAIter, _RAIter, _Compare);
577
578 template<typename _BIter, typename _Predicate>
9a38acdf 579 _BIter
c2ba9709
JS
580 stable_partition(_BIter, _BIter, _Predicate);
581
ddb63209
VV
582#if __cplusplus < 201103L
583 // For C++11 swap() is declared in <type_traits>.
c2ba9709 584
caa8b3c6 585 template<typename _Tp, size_t _Nm>
ddb63209
VV
586 inline void
587 swap(_Tp& __a, _Tp& __b);
588
589 template<typename _Tp, size_t _Nm>
590 inline void
591 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
ccb4f5a7 592#endif
caa8b3c6 593
c2ba9709 594 template<typename _FIter1, typename _FIter2>
9a38acdf 595 _FIter2
4f99f3d0 596 swap_ranges(_FIter1, _FIter1, _FIter2);
c2ba9709
JS
597
598 // transform
599
600 template<typename _FIter>
9a38acdf 601 _FIter
c2ba9709
JS
602 unique(_FIter, _FIter);
603
604 template<typename _FIter, typename _BinaryPredicate>
9a38acdf 605 _FIter
c2ba9709
JS
606 unique(_FIter, _FIter, _BinaryPredicate);
607
608 // unique_copy
609
610 template<typename _FIter, typename _Tp>
9a38acdf 611 _FIter
c2ba9709
JS
612 upper_bound(_FIter, _FIter, const _Tp&);
613
614 template<typename _FIter, typename _Tp, typename _Compare>
9a38acdf 615 _FIter
c2ba9709
JS
616 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
617
12ffa228 618_GLIBCXX_BEGIN_NAMESPACE_ALGO
c2ba9709
JS
619
620 template<typename _FIter>
9a38acdf 621 _FIter
c2ba9709
JS
622 adjacent_find(_FIter, _FIter);
623
624 template<typename _FIter, typename _BinaryPredicate>
9a38acdf 625 _FIter
c2ba9709
JS
626 adjacent_find(_FIter, _FIter, _BinaryPredicate);
627
628 template<typename _IIter, typename _Tp>
629 typename iterator_traits<_IIter>::difference_type
630 count(_IIter, _IIter, const _Tp&);
631
632 template<typename _IIter, typename _Predicate>
633 typename iterator_traits<_IIter>::difference_type
634 count_if(_IIter, _IIter, _Predicate);
635
636 template<typename _IIter1, typename _IIter2>
9a38acdf 637 bool
c2ba9709
JS
638 equal(_IIter1, _IIter1, _IIter2);
639
640 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
9a38acdf 641 bool
c2ba9709
JS
642 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
643
644 template<typename _IIter, typename _Tp>
9a38acdf 645 _IIter
c2ba9709
JS
646 find(_IIter, _IIter, const _Tp&);
647
c2ba9709
JS
648 template<typename _FIter1, typename _FIter2>
649 _FIter1
650 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
651
652 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
653 _FIter1
654 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
655
656 template<typename _IIter, typename _Predicate>
76cc1b70 657 _IIter
c2ba9709
JS
658 find_if(_IIter, _IIter, _Predicate);
659
660 template<typename _IIter, typename _Funct>
9a38acdf 661 _Funct
c2ba9709
JS
662 for_each(_IIter, _IIter, _Funct);
663
664 template<typename _FIter, typename _Generator>
9a38acdf 665 void
c2ba9709
JS
666 generate(_FIter, _FIter, _Generator);
667
668 template<typename _OIter, typename _Size, typename _Generator>
4f99f3d0 669 _OIter
c2ba9709
JS
670 generate_n(_OIter, _Size, _Generator);
671
672 template<typename _IIter1, typename _IIter2>
9a38acdf 673 bool
c2ba9709
JS
674 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
675
676 template<typename _IIter1, typename _IIter2, typename _Compare>
9a38acdf 677 bool
c2ba9709
JS
678 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
679
680 template<typename _FIter>
8dff34fe 681 _GLIBCXX14_CONSTEXPR
9a38acdf 682 _FIter
c2ba9709
JS
683 max_element(_FIter, _FIter);
684
685 template<typename _FIter, typename _Compare>
8dff34fe 686 _GLIBCXX14_CONSTEXPR
9a38acdf 687 _FIter
c2ba9709
JS
688 max_element(_FIter, _FIter, _Compare);
689
690 template<typename _IIter1, typename _IIter2, typename _OIter>
9a38acdf 691 _OIter
c2ba9709
JS
692 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
693
9a38acdf 694 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 695 typename _Compare>
9a38acdf 696 _OIter
c2ba9709
JS
697 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
698
699 template<typename _FIter>
8dff34fe 700 _GLIBCXX14_CONSTEXPR
9a38acdf 701 _FIter
c2ba9709
JS
702 min_element(_FIter, _FIter);
703
704 template<typename _FIter, typename _Compare>
8dff34fe 705 _GLIBCXX14_CONSTEXPR
9a38acdf 706 _FIter
c2ba9709
JS
707 min_element(_FIter, _FIter, _Compare);
708
709 template<typename _IIter1, typename _IIter2>
710 pair<_IIter1, _IIter2>
711 mismatch(_IIter1, _IIter1, _IIter2);
712
713 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
714 pair<_IIter1, _IIter2>
715 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
716
717 template<typename _RAIter>
9a38acdf 718 void
c2ba9709
JS
719 nth_element(_RAIter, _RAIter, _RAIter);
720
721 template<typename _RAIter, typename _Compare>
9a38acdf 722 void
c2ba9709
JS
723 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
724
725 template<typename _RAIter>
9a38acdf 726 void
c2ba9709
JS
727 partial_sort(_RAIter, _RAIter, _RAIter);
728
729 template<typename _RAIter, typename _Compare>
9a38acdf 730 void
c2ba9709
JS
731 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
732
733 template<typename _BIter, typename _Predicate>
9a38acdf 734 _BIter
c2ba9709
JS
735 partition(_BIter, _BIter, _Predicate);
736
737 template<typename _RAIter>
9a38acdf 738 void
c2ba9709
JS
739 random_shuffle(_RAIter, _RAIter);
740
741 template<typename _RAIter, typename _Generator>
9a38acdf 742 void
247d8075 743 random_shuffle(_RAIter, _RAIter,
734f5023 744#if __cplusplus >= 201103L
247d8075
PC
745 _Generator&&);
746#else
747 _Generator&);
748#endif
c2ba9709
JS
749
750 template<typename _FIter, typename _Tp>
9a38acdf 751 void
c2ba9709
JS
752 replace(_FIter, _FIter, const _Tp&, const _Tp&);
753
754 template<typename _FIter, typename _Predicate, typename _Tp>
9a38acdf 755 void
c2ba9709
JS
756 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
757
758 template<typename _FIter1, typename _FIter2>
9a38acdf 759 _FIter1
c2ba9709
JS
760 search(_FIter1, _FIter1, _FIter2, _FIter2);
761
762 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
9a38acdf 763 _FIter1
c2ba9709
JS
764 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
765
766 template<typename _FIter, typename _Size, typename _Tp>
9a38acdf 767 _FIter
c2ba9709
JS
768 search_n(_FIter, _FIter, _Size, const _Tp&);
769
9a38acdf 770 template<typename _FIter, typename _Size, typename _Tp,
c2ba9709 771 typename _BinaryPredicate>
9a38acdf 772 _FIter
c2ba9709
JS
773 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
774
775 template<typename _IIter1, typename _IIter2, typename _OIter>
9a38acdf 776 _OIter
c2ba9709
JS
777 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
778
9a38acdf 779 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 780 typename _Compare>
9a38acdf 781 _OIter
c2ba9709
JS
782 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
783
784 template<typename _IIter1, typename _IIter2, typename _OIter>
9a38acdf 785 _OIter
c2ba9709
JS
786 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
787
788 template<typename _IIter1, typename _IIter2, typename _OIter,
789 typename _Compare>
9a38acdf 790 _OIter
c2ba9709
JS
791 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
792
793 template<typename _IIter1, typename _IIter2, typename _OIter>
794 _OIter
795 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
796
9a38acdf 797 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709
JS
798 typename _Compare>
799 _OIter
9a38acdf 800 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
c2ba9709
JS
801 _OIter, _Compare);
802
803 template<typename _IIter1, typename _IIter2, typename _OIter>
9a38acdf 804 _OIter
c2ba9709
JS
805 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
806
807 template<typename _IIter1, typename _IIter2, typename _OIter,
808 typename _Compare>
9a38acdf 809 _OIter
c2ba9709
JS
810 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
811
812 template<typename _RAIter>
9a38acdf 813 void
c2ba9709
JS
814 sort(_RAIter, _RAIter);
815
816 template<typename _RAIter, typename _Compare>
9a38acdf 817 void
c2ba9709
JS
818 sort(_RAIter, _RAIter, _Compare);
819
820 template<typename _RAIter>
9a38acdf 821 void
c2ba9709
JS
822 stable_sort(_RAIter, _RAIter);
823
824 template<typename _RAIter, typename _Compare>
9a38acdf 825 void
c2ba9709
JS
826 stable_sort(_RAIter, _RAIter, _Compare);
827
828 template<typename _IIter, typename _OIter, typename _UnaryOperation>
9a38acdf 829 _OIter
c2ba9709
JS
830 transform(_IIter, _IIter, _OIter, _UnaryOperation);
831
9a38acdf 832 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 833 typename _BinaryOperation>
9a38acdf 834 _OIter
c2ba9709
JS
835 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
836
837 template<typename _IIter, typename _OIter>
9a38acdf 838 _OIter
c2ba9709
JS
839 unique_copy(_IIter, _IIter, _OIter);
840
841 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
9a38acdf 842 _OIter
c2ba9709
JS
843 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
844
12ffa228 845_GLIBCXX_END_NAMESPACE_ALGO
4a15d842 846_GLIBCXX_END_NAMESPACE_VERSION
12ffa228 847} // namespace std
c2ba9709 848
7c3e9502 849#ifdef _GLIBCXX_PARALLEL
c2ba9709
JS
850# include <parallel/algorithmfwd.h>
851#endif
852
853#endif
854