]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/bits/algorithmfwd.h
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / include / bits / algorithmfwd.h
CommitLineData
cd1e6665 1// <algorithm> Forward declarations -*- C++ -*-
c2ba9709 2
8d9254fc 3// Copyright (C) 2007-2020 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 /**
ed920373 157 * @defgroup set_algorithms Set Operations
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
3a66e68a 194#if __cplusplus > 201703L
b30ee71a 195# define __cpp_lib_constexpr_algorithms 201806L
3a66e68a
ESR
196#endif
197
734f5023 198#if __cplusplus >= 201103L
688a7a07 199 template<typename _IIter, typename _Predicate>
3a66e68a 200 _GLIBCXX20_CONSTEXPR
688a7a07
PC
201 bool
202 all_of(_IIter, _IIter, _Predicate);
203
204 template<typename _IIter, typename _Predicate>
3a66e68a 205 _GLIBCXX20_CONSTEXPR
688a7a07
PC
206 bool
207 any_of(_IIter, _IIter, _Predicate);
208#endif
209
c2ba9709 210 template<typename _FIter, typename _Tp>
3a66e68a 211 _GLIBCXX20_CONSTEXPR
9a38acdf 212 bool
c2ba9709
JS
213 binary_search(_FIter, _FIter, const _Tp&);
214
215 template<typename _FIter, typename _Tp, typename _Compare>
3a66e68a 216 _GLIBCXX20_CONSTEXPR
9a38acdf 217 bool
c2ba9709
JS
218 binary_search(_FIter, _FIter, const _Tp&, _Compare);
219
4db1cb44
ESR
220#if __cplusplus > 201402L
221 template<typename _Tp>
222 _GLIBCXX14_CONSTEXPR
223 const _Tp&
224 clamp(const _Tp&, const _Tp&, const _Tp&);
225
226 template<typename _Tp, typename _Compare>
227 _GLIBCXX14_CONSTEXPR
228 const _Tp&
229 clamp(const _Tp&, const _Tp&, const _Tp&, _Compare);
230#endif
231
c2ba9709 232 template<typename _IIter, typename _OIter>
3a66e68a 233 _GLIBCXX20_CONSTEXPR
9a38acdf 234 _OIter
c2ba9709
JS
235 copy(_IIter, _IIter, _OIter);
236
237 template<typename _BIter1, typename _BIter2>
3a66e68a 238 _GLIBCXX20_CONSTEXPR
c2ba9709 239 _BIter2
4f99f3d0 240 copy_backward(_BIter1, _BIter1, _BIter2);
c2ba9709 241
734f5023 242#if __cplusplus >= 201103L
688a7a07 243 template<typename _IIter, typename _OIter, typename _Predicate>
3a66e68a 244 _GLIBCXX20_CONSTEXPR
688a7a07
PC
245 _OIter
246 copy_if(_IIter, _IIter, _OIter, _Predicate);
b0371776
PC
247
248 template<typename _IIter, typename _Size, typename _OIter>
3a66e68a 249 _GLIBCXX20_CONSTEXPR
b0371776
PC
250 _OIter
251 copy_n(_IIter, _Size, _OIter);
688a7a07
PC
252#endif
253
c2ba9709
JS
254 // count
255 // count_if
256
257 template<typename _FIter, typename _Tp>
3a66e68a 258 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
259 pair<_FIter, _FIter>
260 equal_range(_FIter, _FIter, const _Tp&);
261
262 template<typename _FIter, typename _Tp, typename _Compare>
3a66e68a 263 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
264 pair<_FIter, _FIter>
265 equal_range(_FIter, _FIter, const _Tp&, _Compare);
266
267 template<typename _FIter, typename _Tp>
3a66e68a 268 _GLIBCXX20_CONSTEXPR
9a38acdf 269 void
c2ba9709
JS
270 fill(_FIter, _FIter, const _Tp&);
271
c2ba9709 272 template<typename _OIter, typename _Size, typename _Tp>
3a66e68a 273 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
274 _OIter
275 fill_n(_OIter, _Size, const _Tp&);
276
277 // find
6f95a65a
BK
278
279 template<typename _FIter1, typename _FIter2>
3a66e68a 280 _GLIBCXX20_CONSTEXPR
6f95a65a
BK
281 _FIter1
282 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
283
284 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
3a66e68a 285 _GLIBCXX20_CONSTEXPR
6f95a65a
BK
286 _FIter1
287 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
288
c2ba9709
JS
289 // find_first_of
290 // find_if
c2ba9709 291
734f5023 292#if __cplusplus >= 201103L
76cc1b70 293 template<typename _IIter, typename _Predicate>
3a66e68a 294 _GLIBCXX20_CONSTEXPR
76cc1b70
PC
295 _IIter
296 find_if_not(_IIter, _IIter, _Predicate);
297#endif
298
688a7a07
PC
299 // for_each
300 // generate
301 // generate_n
302
c2ba9709 303 template<typename _IIter1, typename _IIter2>
3a66e68a 304 _GLIBCXX20_CONSTEXPR
9a38acdf 305 bool
c2ba9709
JS
306 includes(_IIter1, _IIter1, _IIter2, _IIter2);
307
308 template<typename _IIter1, typename _IIter2, typename _Compare>
3a66e68a 309 _GLIBCXX20_CONSTEXPR
9a38acdf 310 bool
c2ba9709
JS
311 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
312
313 template<typename _BIter>
9a38acdf 314 void
c2ba9709
JS
315 inplace_merge(_BIter, _BIter, _BIter);
316
317 template<typename _BIter, typename _Compare>
9a38acdf 318 void
c2ba9709
JS
319 inplace_merge(_BIter, _BIter, _BIter, _Compare);
320
734f5023 321#if __cplusplus >= 201103L
e69f1bad 322 template<typename _RAIter>
3a66e68a 323 _GLIBCXX20_CONSTEXPR
9a38acdf 324 bool
e69f1bad
PC
325 is_heap(_RAIter, _RAIter);
326
327 template<typename _RAIter, typename _Compare>
3a66e68a 328 _GLIBCXX20_CONSTEXPR
9a38acdf 329 bool
e69f1bad
PC
330 is_heap(_RAIter, _RAIter, _Compare);
331
332 template<typename _RAIter>
3a66e68a 333 _GLIBCXX20_CONSTEXPR
9a38acdf 334 _RAIter
e69f1bad
PC
335 is_heap_until(_RAIter, _RAIter);
336
337 template<typename _RAIter, typename _Compare>
3a66e68a 338 _GLIBCXX20_CONSTEXPR
9a38acdf 339 _RAIter
e69f1bad 340 is_heap_until(_RAIter, _RAIter, _Compare);
4b7ed13a 341
04dbd891 342 template<typename _IIter, typename _Predicate>
3a66e68a 343 _GLIBCXX20_CONSTEXPR
04dbd891
PC
344 bool
345 is_partitioned(_IIter, _IIter, _Predicate);
346
632469d0 347 template<typename _FIter1, typename _FIter2>
3a66e68a 348 _GLIBCXX20_CONSTEXPR
632469d0
PC
349 bool
350 is_permutation(_FIter1, _FIter1, _FIter2);
351
352 template<typename _FIter1, typename _FIter2,
353 typename _BinaryPredicate>
3a66e68a 354 _GLIBCXX20_CONSTEXPR
632469d0
PC
355 bool
356 is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
357
4b7ed13a 358 template<typename _FIter>
3a66e68a 359 _GLIBCXX20_CONSTEXPR
9a38acdf 360 bool
4b7ed13a
PC
361 is_sorted(_FIter, _FIter);
362
363 template<typename _FIter, typename _Compare>
3a66e68a 364 _GLIBCXX20_CONSTEXPR
9a38acdf 365 bool
4b7ed13a
PC
366 is_sorted(_FIter, _FIter, _Compare);
367
368 template<typename _FIter>
3a66e68a 369 _GLIBCXX20_CONSTEXPR
9a38acdf 370 _FIter
4b7ed13a
PC
371 is_sorted_until(_FIter, _FIter);
372
373 template<typename _FIter, typename _Compare>
3a66e68a 374 _GLIBCXX20_CONSTEXPR
9a38acdf 375 _FIter
4b7ed13a 376 is_sorted_until(_FIter, _FIter, _Compare);
e69f1bad
PC
377#endif
378
c2ba9709 379 template<typename _FIter1, typename _FIter2>
7a91c710 380 _GLIBCXX20_CONSTEXPR
9a38acdf 381 void
c2ba9709
JS
382 iter_swap(_FIter1, _FIter2);
383
c2ba9709 384 template<typename _FIter, typename _Tp>
3a66e68a 385 _GLIBCXX20_CONSTEXPR
9a38acdf 386 _FIter
c2ba9709
JS
387 lower_bound(_FIter, _FIter, const _Tp&);
388
389 template<typename _FIter, typename _Tp, typename _Compare>
3a66e68a 390 _GLIBCXX20_CONSTEXPR
9a38acdf 391 _FIter
c2ba9709
JS
392 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
393
394 template<typename _RAIter>
7a91c710 395 _GLIBCXX20_CONSTEXPR
9a38acdf 396 void
c2ba9709
JS
397 make_heap(_RAIter, _RAIter);
398
399 template<typename _RAIter, typename _Compare>
7a91c710 400 _GLIBCXX20_CONSTEXPR
9a38acdf 401 void
c2ba9709
JS
402 make_heap(_RAIter, _RAIter, _Compare);
403
9a38acdf 404 template<typename _Tp>
8dff34fe 405 _GLIBCXX14_CONSTEXPR
9a38acdf 406 const _Tp&
c2ba9709
JS
407 max(const _Tp&, const _Tp&);
408
409 template<typename _Tp, typename _Compare>
8dff34fe 410 _GLIBCXX14_CONSTEXPR
9a38acdf 411 const _Tp&
c2ba9709
JS
412 max(const _Tp&, const _Tp&, _Compare);
413
414 // max_element
415 // merge
416
9a38acdf 417 template<typename _Tp>
8dff34fe 418 _GLIBCXX14_CONSTEXPR
9a38acdf 419 const _Tp&
c2ba9709
JS
420 min(const _Tp&, const _Tp&);
421
422 template<typename _Tp, typename _Compare>
8dff34fe 423 _GLIBCXX14_CONSTEXPR
9a38acdf 424 const _Tp&
c2ba9709
JS
425 min(const _Tp&, const _Tp&, _Compare);
426
427 // min_element
f6547b68 428
734f5023 429#if __cplusplus >= 201103L
f6547b68 430 template<typename _Tp>
8dff34fe 431 _GLIBCXX14_CONSTEXPR
9a38acdf 432 pair<const _Tp&, const _Tp&>
f6547b68
PC
433 minmax(const _Tp&, const _Tp&);
434
435 template<typename _Tp, typename _Compare>
8dff34fe 436 _GLIBCXX14_CONSTEXPR
f6547b68
PC
437 pair<const _Tp&, const _Tp&>
438 minmax(const _Tp&, const _Tp&, _Compare);
439
440 template<typename _FIter>
8dff34fe 441 _GLIBCXX14_CONSTEXPR
f6547b68
PC
442 pair<_FIter, _FIter>
443 minmax_element(_FIter, _FIter);
444
445 template<typename _FIter, typename _Compare>
8dff34fe 446 _GLIBCXX14_CONSTEXPR
f6547b68
PC
447 pair<_FIter, _FIter>
448 minmax_element(_FIter, _FIter, _Compare);
1edd1a83
PC
449
450 template<typename _Tp>
8dff34fe 451 _GLIBCXX14_CONSTEXPR
116a365b 452 _Tp
1edd1a83
PC
453 min(initializer_list<_Tp>);
454
455 template<typename _Tp, typename _Compare>
8dff34fe 456 _GLIBCXX14_CONSTEXPR
116a365b 457 _Tp
1edd1a83
PC
458 min(initializer_list<_Tp>, _Compare);
459
460 template<typename _Tp>
8dff34fe 461 _GLIBCXX14_CONSTEXPR
116a365b 462 _Tp
1edd1a83
PC
463 max(initializer_list<_Tp>);
464
465 template<typename _Tp, typename _Compare>
8dff34fe 466 _GLIBCXX14_CONSTEXPR
116a365b 467 _Tp
1edd1a83
PC
468 max(initializer_list<_Tp>, _Compare);
469
470 template<typename _Tp>
8dff34fe 471 _GLIBCXX14_CONSTEXPR
116a365b 472 pair<_Tp, _Tp>
1edd1a83
PC
473 minmax(initializer_list<_Tp>);
474
475 template<typename _Tp, typename _Compare>
8dff34fe 476 _GLIBCXX14_CONSTEXPR
116a365b 477 pair<_Tp, _Tp>
1edd1a83 478 minmax(initializer_list<_Tp>, _Compare);
f6547b68
PC
479#endif
480
c2ba9709
JS
481 // mismatch
482
483 template<typename _BIter>
7a91c710 484 _GLIBCXX20_CONSTEXPR
9a38acdf 485 bool
c2ba9709
JS
486 next_permutation(_BIter, _BIter);
487
488 template<typename _BIter, typename _Compare>
7a91c710 489 _GLIBCXX20_CONSTEXPR
9a38acdf 490 bool
c2ba9709
JS
491 next_permutation(_BIter, _BIter, _Compare);
492
734f5023 493#if __cplusplus >= 201103L
688a7a07 494 template<typename _IIter, typename _Predicate>
3a66e68a 495 _GLIBCXX20_CONSTEXPR
688a7a07
PC
496 bool
497 none_of(_IIter, _IIter, _Predicate);
498#endif
499
c2ba9709
JS
500 // nth_element
501 // partial_sort
502
503 template<typename _IIter, typename _RAIter>
7a91c710 504 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
505 _RAIter
506 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
507
508 template<typename _IIter, typename _RAIter, typename _Compare>
7a91c710 509 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
510 _RAIter
511 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
512
688a7a07
PC
513 // partition
514
734f5023 515#if __cplusplus >= 201103L
688a7a07
PC
516 template<typename _IIter, typename _OIter1,
517 typename _OIter2, typename _Predicate>
3a66e68a 518 _GLIBCXX20_CONSTEXPR
688a7a07
PC
519 pair<_OIter1, _OIter2>
520 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
d9be9bb3
PC
521
522 template<typename _FIter, typename _Predicate>
3a66e68a 523 _GLIBCXX20_CONSTEXPR
d9be9bb3
PC
524 _FIter
525 partition_point(_FIter, _FIter, _Predicate);
688a7a07
PC
526#endif
527
c2ba9709 528 template<typename _RAIter>
7a91c710 529 _GLIBCXX20_CONSTEXPR
9a38acdf 530 void
c2ba9709
JS
531 pop_heap(_RAIter, _RAIter);
532
533 template<typename _RAIter, typename _Compare>
7a91c710 534 _GLIBCXX20_CONSTEXPR
9a38acdf 535 void
c2ba9709
JS
536 pop_heap(_RAIter, _RAIter, _Compare);
537
538 template<typename _BIter>
7a91c710 539 _GLIBCXX20_CONSTEXPR
9a38acdf 540 bool
c2ba9709
JS
541 prev_permutation(_BIter, _BIter);
542
543 template<typename _BIter, typename _Compare>
7a91c710 544 _GLIBCXX20_CONSTEXPR
9a38acdf 545 bool
c2ba9709
JS
546 prev_permutation(_BIter, _BIter, _Compare);
547
548 template<typename _RAIter>
7a91c710 549 _GLIBCXX20_CONSTEXPR
9a38acdf 550 void
c2ba9709
JS
551 push_heap(_RAIter, _RAIter);
552
553 template<typename _RAIter, typename _Compare>
7a91c710 554 _GLIBCXX20_CONSTEXPR
9a38acdf 555 void
c2ba9709
JS
556 push_heap(_RAIter, _RAIter, _Compare);
557
558 // random_shuffle
559
560 template<typename _FIter, typename _Tp>
3a66e68a 561 _GLIBCXX20_CONSTEXPR
9a38acdf 562 _FIter
c2ba9709
JS
563 remove(_FIter, _FIter, const _Tp&);
564
565 template<typename _FIter, typename _Predicate>
3a66e68a 566 _GLIBCXX20_CONSTEXPR
9a38acdf 567 _FIter
c2ba9709
JS
568 remove_if(_FIter, _FIter, _Predicate);
569
570 template<typename _IIter, typename _OIter, typename _Tp>
3a66e68a 571 _GLIBCXX20_CONSTEXPR
9a38acdf 572 _OIter
c2ba9709
JS
573 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
574
575 template<typename _IIter, typename _OIter, typename _Predicate>
3a66e68a 576 _GLIBCXX20_CONSTEXPR
9a38acdf 577 _OIter
c2ba9709
JS
578 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
579
580 // replace
581
582 template<typename _IIter, typename _OIter, typename _Tp>
3a66e68a 583 _GLIBCXX20_CONSTEXPR
9a38acdf 584 _OIter
c2ba9709
JS
585 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
586
587 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
3a66e68a 588 _GLIBCXX20_CONSTEXPR
9a38acdf 589 _OIter
c2ba9709
JS
590 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
591
592 // replace_if
593
594 template<typename _BIter>
7a91c710 595 _GLIBCXX20_CONSTEXPR
9a38acdf 596 void
c2ba9709
JS
597 reverse(_BIter, _BIter);
598
599 template<typename _BIter, typename _OIter>
3a66e68a 600 _GLIBCXX20_CONSTEXPR
9a38acdf 601 _OIter
c2ba9709
JS
602 reverse_copy(_BIter, _BIter, _OIter);
603
87839f22
JW
604 inline namespace _V2
605 {
606 template<typename _FIter>
7a91c710 607 _GLIBCXX20_CONSTEXPR
87839f22
JW
608 _FIter
609 rotate(_FIter, _FIter, _FIter);
610 }
c2ba9709
JS
611
612 template<typename _FIter, typename _OIter>
3a66e68a 613 _GLIBCXX20_CONSTEXPR
9a38acdf 614 _OIter
4f99f3d0 615 rotate_copy(_FIter, _FIter, _FIter, _OIter);
c2ba9709
JS
616
617 // search
618 // search_n
619 // set_difference
620 // set_intersection
621 // set_symmetric_difference
622 // set_union
623
734f5023 624#if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
247d8075
PC
625 template<typename _RAIter, typename _UGenerator>
626 void
633e8e19 627 shuffle(_RAIter, _RAIter, _UGenerator&&);
247d8075
PC
628#endif
629
c2ba9709 630 template<typename _RAIter>
7a91c710 631 _GLIBCXX20_CONSTEXPR
9a38acdf 632 void
c2ba9709
JS
633 sort_heap(_RAIter, _RAIter);
634
635 template<typename _RAIter, typename _Compare>
7a91c710 636 _GLIBCXX20_CONSTEXPR
9a38acdf 637 void
c2ba9709
JS
638 sort_heap(_RAIter, _RAIter, _Compare);
639
640 template<typename _BIter, typename _Predicate>
9a38acdf 641 _BIter
c2ba9709
JS
642 stable_partition(_BIter, _BIter, _Predicate);
643
ddb63209
VV
644#if __cplusplus < 201103L
645 // For C++11 swap() is declared in <type_traits>.
c2ba9709 646
caa8b3c6 647 template<typename _Tp, size_t _Nm>
7a91c710 648 _GLIBCXX20_CONSTEXPR
ddb63209
VV
649 inline void
650 swap(_Tp& __a, _Tp& __b);
651
652 template<typename _Tp, size_t _Nm>
7a91c710 653 _GLIBCXX20_CONSTEXPR
ddb63209
VV
654 inline void
655 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
ccb4f5a7 656#endif
caa8b3c6 657
c2ba9709 658 template<typename _FIter1, typename _FIter2>
7a91c710 659 _GLIBCXX20_CONSTEXPR
9a38acdf 660 _FIter2
4f99f3d0 661 swap_ranges(_FIter1, _FIter1, _FIter2);
c2ba9709
JS
662
663 // transform
664
665 template<typename _FIter>
3a66e68a 666 _GLIBCXX20_CONSTEXPR
9a38acdf 667 _FIter
c2ba9709
JS
668 unique(_FIter, _FIter);
669
670 template<typename _FIter, typename _BinaryPredicate>
3a66e68a 671 _GLIBCXX20_CONSTEXPR
9a38acdf 672 _FIter
c2ba9709
JS
673 unique(_FIter, _FIter, _BinaryPredicate);
674
675 // unique_copy
676
677 template<typename _FIter, typename _Tp>
3a66e68a 678 _GLIBCXX20_CONSTEXPR
9a38acdf 679 _FIter
c2ba9709
JS
680 upper_bound(_FIter, _FIter, const _Tp&);
681
682 template<typename _FIter, typename _Tp, typename _Compare>
3a66e68a 683 _GLIBCXX20_CONSTEXPR
9a38acdf 684 _FIter
c2ba9709
JS
685 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
686
12ffa228 687_GLIBCXX_BEGIN_NAMESPACE_ALGO
c2ba9709
JS
688
689 template<typename _FIter>
3a66e68a 690 _GLIBCXX20_CONSTEXPR
9a38acdf 691 _FIter
c2ba9709
JS
692 adjacent_find(_FIter, _FIter);
693
694 template<typename _FIter, typename _BinaryPredicate>
3a66e68a 695 _GLIBCXX20_CONSTEXPR
9a38acdf 696 _FIter
c2ba9709
JS
697 adjacent_find(_FIter, _FIter, _BinaryPredicate);
698
699 template<typename _IIter, typename _Tp>
3a66e68a 700 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
701 typename iterator_traits<_IIter>::difference_type
702 count(_IIter, _IIter, const _Tp&);
703
704 template<typename _IIter, typename _Predicate>
3a66e68a 705 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
706 typename iterator_traits<_IIter>::difference_type
707 count_if(_IIter, _IIter, _Predicate);
708
709 template<typename _IIter1, typename _IIter2>
3a66e68a 710 _GLIBCXX20_CONSTEXPR
9a38acdf 711 bool
c2ba9709
JS
712 equal(_IIter1, _IIter1, _IIter2);
713
714 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
3a66e68a 715 _GLIBCXX20_CONSTEXPR
9a38acdf 716 bool
c2ba9709
JS
717 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
718
719 template<typename _IIter, typename _Tp>
3a66e68a 720 _GLIBCXX20_CONSTEXPR
9a38acdf 721 _IIter
c2ba9709
JS
722 find(_IIter, _IIter, const _Tp&);
723
c2ba9709 724 template<typename _FIter1, typename _FIter2>
3a66e68a 725 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
726 _FIter1
727 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
728
729 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
3a66e68a 730 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
731 _FIter1
732 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
733
734 template<typename _IIter, typename _Predicate>
3a66e68a 735 _GLIBCXX20_CONSTEXPR
76cc1b70 736 _IIter
c2ba9709
JS
737 find_if(_IIter, _IIter, _Predicate);
738
739 template<typename _IIter, typename _Funct>
3a66e68a 740 _GLIBCXX20_CONSTEXPR
9a38acdf 741 _Funct
c2ba9709
JS
742 for_each(_IIter, _IIter, _Funct);
743
744 template<typename _FIter, typename _Generator>
3a66e68a 745 _GLIBCXX20_CONSTEXPR
9a38acdf 746 void
c2ba9709
JS
747 generate(_FIter, _FIter, _Generator);
748
749 template<typename _OIter, typename _Size, typename _Generator>
3a66e68a 750 _GLIBCXX20_CONSTEXPR
4f99f3d0 751 _OIter
c2ba9709
JS
752 generate_n(_OIter, _Size, _Generator);
753
754 template<typename _IIter1, typename _IIter2>
3a66e68a 755 _GLIBCXX20_CONSTEXPR
9a38acdf 756 bool
c2ba9709
JS
757 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
758
759 template<typename _IIter1, typename _IIter2, typename _Compare>
3a66e68a 760 _GLIBCXX20_CONSTEXPR
9a38acdf 761 bool
c2ba9709
JS
762 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
763
764 template<typename _FIter>
8dff34fe 765 _GLIBCXX14_CONSTEXPR
9a38acdf 766 _FIter
c2ba9709
JS
767 max_element(_FIter, _FIter);
768
769 template<typename _FIter, typename _Compare>
8dff34fe 770 _GLIBCXX14_CONSTEXPR
9a38acdf 771 _FIter
c2ba9709
JS
772 max_element(_FIter, _FIter, _Compare);
773
774 template<typename _IIter1, typename _IIter2, typename _OIter>
3a66e68a 775 _GLIBCXX20_CONSTEXPR
9a38acdf 776 _OIter
c2ba9709
JS
777 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
778
9a38acdf 779 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 780 typename _Compare>
3a66e68a 781 _GLIBCXX20_CONSTEXPR
9a38acdf 782 _OIter
c2ba9709
JS
783 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
784
785 template<typename _FIter>
8dff34fe 786 _GLIBCXX14_CONSTEXPR
9a38acdf 787 _FIter
c2ba9709
JS
788 min_element(_FIter, _FIter);
789
790 template<typename _FIter, typename _Compare>
8dff34fe 791 _GLIBCXX14_CONSTEXPR
9a38acdf 792 _FIter
c2ba9709
JS
793 min_element(_FIter, _FIter, _Compare);
794
795 template<typename _IIter1, typename _IIter2>
3a66e68a 796 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
797 pair<_IIter1, _IIter2>
798 mismatch(_IIter1, _IIter1, _IIter2);
799
800 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
3a66e68a 801 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
802 pair<_IIter1, _IIter2>
803 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
804
805 template<typename _RAIter>
7a91c710 806 _GLIBCXX20_CONSTEXPR
9a38acdf 807 void
c2ba9709
JS
808 nth_element(_RAIter, _RAIter, _RAIter);
809
810 template<typename _RAIter, typename _Compare>
7a91c710 811 _GLIBCXX20_CONSTEXPR
9a38acdf 812 void
c2ba9709
JS
813 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
814
815 template<typename _RAIter>
7a91c710 816 _GLIBCXX20_CONSTEXPR
9a38acdf 817 void
c2ba9709
JS
818 partial_sort(_RAIter, _RAIter, _RAIter);
819
820 template<typename _RAIter, typename _Compare>
7a91c710 821 _GLIBCXX20_CONSTEXPR
9a38acdf 822 void
c2ba9709
JS
823 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
824
825 template<typename _BIter, typename _Predicate>
7a91c710 826 _GLIBCXX20_CONSTEXPR
9a38acdf 827 _BIter
c2ba9709
JS
828 partition(_BIter, _BIter, _Predicate);
829
830 template<typename _RAIter>
9a38acdf 831 void
c2ba9709
JS
832 random_shuffle(_RAIter, _RAIter);
833
834 template<typename _RAIter, typename _Generator>
9a38acdf 835 void
247d8075 836 random_shuffle(_RAIter, _RAIter,
734f5023 837#if __cplusplus >= 201103L
247d8075
PC
838 _Generator&&);
839#else
840 _Generator&);
841#endif
c2ba9709
JS
842
843 template<typename _FIter, typename _Tp>
3a66e68a 844 _GLIBCXX20_CONSTEXPR
9a38acdf 845 void
c2ba9709
JS
846 replace(_FIter, _FIter, const _Tp&, const _Tp&);
847
848 template<typename _FIter, typename _Predicate, typename _Tp>
3a66e68a 849 _GLIBCXX20_CONSTEXPR
9a38acdf 850 void
c2ba9709
JS
851 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
852
853 template<typename _FIter1, typename _FIter2>
3a66e68a 854 _GLIBCXX20_CONSTEXPR
9a38acdf 855 _FIter1
c2ba9709
JS
856 search(_FIter1, _FIter1, _FIter2, _FIter2);
857
858 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
3a66e68a 859 _GLIBCXX20_CONSTEXPR
9a38acdf 860 _FIter1
c2ba9709
JS
861 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
862
863 template<typename _FIter, typename _Size, typename _Tp>
3a66e68a 864 _GLIBCXX20_CONSTEXPR
9a38acdf 865 _FIter
c2ba9709
JS
866 search_n(_FIter, _FIter, _Size, const _Tp&);
867
9a38acdf 868 template<typename _FIter, typename _Size, typename _Tp,
c2ba9709 869 typename _BinaryPredicate>
3a66e68a 870 _GLIBCXX20_CONSTEXPR
9a38acdf 871 _FIter
c2ba9709
JS
872 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
873
874 template<typename _IIter1, typename _IIter2, typename _OIter>
3a66e68a 875 _GLIBCXX20_CONSTEXPR
9a38acdf 876 _OIter
c2ba9709
JS
877 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
878
9a38acdf 879 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 880 typename _Compare>
3a66e68a 881 _GLIBCXX20_CONSTEXPR
9a38acdf 882 _OIter
c2ba9709
JS
883 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
884
885 template<typename _IIter1, typename _IIter2, typename _OIter>
3a66e68a 886 _GLIBCXX20_CONSTEXPR
9a38acdf 887 _OIter
c2ba9709
JS
888 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
889
890 template<typename _IIter1, typename _IIter2, typename _OIter,
891 typename _Compare>
3a66e68a 892 _GLIBCXX20_CONSTEXPR
9a38acdf 893 _OIter
c2ba9709
JS
894 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
895
896 template<typename _IIter1, typename _IIter2, typename _OIter>
3a66e68a 897 _GLIBCXX20_CONSTEXPR
c2ba9709
JS
898 _OIter
899 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
900
9a38acdf 901 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 902 typename _Compare>
3a66e68a 903 _GLIBCXX20_CONSTEXPR
c2ba9709 904 _OIter
9a38acdf 905 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
c2ba9709
JS
906 _OIter, _Compare);
907
908 template<typename _IIter1, typename _IIter2, typename _OIter>
3a66e68a 909 _GLIBCXX20_CONSTEXPR
9a38acdf 910 _OIter
c2ba9709
JS
911 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
912
913 template<typename _IIter1, typename _IIter2, typename _OIter,
914 typename _Compare>
3a66e68a 915 _GLIBCXX20_CONSTEXPR
9a38acdf 916 _OIter
c2ba9709
JS
917 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
918
919 template<typename _RAIter>
7a91c710 920 _GLIBCXX20_CONSTEXPR
9a38acdf 921 void
c2ba9709
JS
922 sort(_RAIter, _RAIter);
923
924 template<typename _RAIter, typename _Compare>
7a91c710 925 _GLIBCXX20_CONSTEXPR
9a38acdf 926 void
c2ba9709
JS
927 sort(_RAIter, _RAIter, _Compare);
928
929 template<typename _RAIter>
9a38acdf 930 void
c2ba9709
JS
931 stable_sort(_RAIter, _RAIter);
932
933 template<typename _RAIter, typename _Compare>
9a38acdf 934 void
c2ba9709
JS
935 stable_sort(_RAIter, _RAIter, _Compare);
936
937 template<typename _IIter, typename _OIter, typename _UnaryOperation>
3a66e68a 938 _GLIBCXX20_CONSTEXPR
9a38acdf 939 _OIter
c2ba9709
JS
940 transform(_IIter, _IIter, _OIter, _UnaryOperation);
941
9a38acdf 942 template<typename _IIter1, typename _IIter2, typename _OIter,
c2ba9709 943 typename _BinaryOperation>
3a66e68a 944 _GLIBCXX20_CONSTEXPR
9a38acdf 945 _OIter
c2ba9709
JS
946 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
947
948 template<typename _IIter, typename _OIter>
3a66e68a 949 _GLIBCXX20_CONSTEXPR
9a38acdf 950 _OIter
c2ba9709
JS
951 unique_copy(_IIter, _IIter, _OIter);
952
953 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
3a66e68a 954 _GLIBCXX20_CONSTEXPR
9a38acdf 955 _OIter
c2ba9709
JS
956 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
957
12ffa228 958_GLIBCXX_END_NAMESPACE_ALGO
4a15d842 959_GLIBCXX_END_NAMESPACE_VERSION
12ffa228 960} // namespace std
c2ba9709 961
7c3e9502 962#ifdef _GLIBCXX_PARALLEL
c2ba9709
JS
963# include <parallel/algorithmfwd.h>
964#endif
965
966#endif
967