]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/parallel/algorithmfwd.h
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / include / parallel / algorithmfwd.h
CommitLineData
cd1e6665 1// <parallel/algorithm> Forward declarations -*- C++ -*-
c2ba9709 2
99dee823 3// Copyright (C) 2007-2021 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 terms
7// of the GNU General Public License as published by the Free Software
748086b7 8// Foundation; either version 3, or (at your option) any later
c2ba9709
JS
9// version.
10
11// This library is distributed in the hope that it will be useful, but
12// WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// 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 parallel/algorithmfwd.h
26 * This file is a GNU parallel extension to the Standard C++ Library.
27 */
28
29#ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
30#define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
31
32#pragma GCC system_header
33
34#include <parallel/tags.h>
35#include <parallel/settings.h>
36
12ffa228 37namespace std _GLIBCXX_VISIBILITY(default)
c2ba9709
JS
38{
39namespace __parallel
40{
41 template<typename _FIter>
6f95a65a
BK
42 _FIter
43 adjacent_find(_FIter, _FIter);
c2ba9709
JS
44
45 template<typename _FIter>
6f95a65a
BK
46 _FIter
47 adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
c2ba9709 48
6f95a65a
BK
49 template<typename _FIter, typename _IterTag>
50 _FIter
1acba85b 51 __adjacent_find_switch(_FIter, _FIter, _IterTag);
c2ba9709
JS
52
53 template<typename _RAIter>
6f95a65a 54 _RAIter
1acba85b 55 __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
c2ba9709 56
c2ba9709 57
6f95a65a
BK
58 template<typename _FIter, typename _BiPredicate>
59 _FIter
60 adjacent_find(_FIter, _FIter, _BiPredicate);
c2ba9709 61
6f95a65a
BK
62 template<typename _FIter, typename _BiPredicate>
63 _FIter
64 adjacent_find(_FIter, _FIter, _BiPredicate,
15ac3c72 65 __gnu_parallel::sequential_tag);
6f95a65a
BK
66
67 template<typename _FIter, typename _BiPredicate, typename _IterTag>
68 _FIter
1acba85b 69 __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
c2ba9709 70
6f95a65a
BK
71 template<typename _RAIter, typename _BiPredicate>
72 _RAIter
1acba85b 73 __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
15ac3c72 74 random_access_iterator_tag);
6f95a65a
BK
75
76
77 template<typename _IIter, typename _Tp>
78 typename iterator_traits<_IIter>::difference_type
79 count(_IIter, _IIter, const _Tp&);
c2ba9709 80
531898c3 81 template<typename _IIter, typename _Tp>
6f95a65a 82 typename iterator_traits<_IIter>::difference_type
531898c3 83 count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
c2ba9709 84
531898c3 85 template<typename _IIter, typename _Tp>
6f95a65a 86 typename iterator_traits<_IIter>::difference_type
ee1b5fc5 87 count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
6f95a65a 88
531898c3 89 template<typename _IIter, typename _Tp, typename _IterTag>
6f95a65a 90 typename iterator_traits<_IIter>::difference_type
1acba85b 91 __count_switch(_IIter, _IIter, const _Tp&, _IterTag);
c2ba9709 92
531898c3 93 template<typename _RAIter, typename _Tp>
6f95a65a 94 typename iterator_traits<_RAIter>::difference_type
1acba85b 95 __count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag,
15ac3c72
JS
96 __gnu_parallel::_Parallelism __parallelism
97 = __gnu_parallel::parallel_unbalanced);
c2ba9709 98
c2ba9709 99
531898c3 100 template<typename _IIter, typename _Predicate>
6f95a65a 101 typename iterator_traits<_IIter>::difference_type
531898c3 102 count_if(_IIter, _IIter, _Predicate);
c2ba9709 103
531898c3 104 template<typename _IIter, typename _Predicate>
6f95a65a 105 typename iterator_traits<_IIter>::difference_type
531898c3 106 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
c2ba9709 107
531898c3 108 template<typename _IIter, typename _Predicate>
6f95a65a 109 typename iterator_traits<_IIter>::difference_type
ee1b5fc5 110 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
c2ba9709 111
531898c3 112 template<typename _IIter, typename _Predicate, typename _IterTag>
6f95a65a 113 typename iterator_traits<_IIter>::difference_type
1acba85b 114 __count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
c2ba9709 115
531898c3 116 template<typename _RAIter, typename _Predicate>
6f95a65a 117 typename iterator_traits<_RAIter>::difference_type
1acba85b 118 __count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag,
15ac3c72
JS
119 __gnu_parallel::_Parallelism __parallelism
120 = __gnu_parallel::parallel_unbalanced);
c2ba9709
JS
121
122 // algobase.h
123 template<typename _IIter1, typename _IIter2>
531898c3
PC
124 bool
125 equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
c2ba9709 126
1acba85b 127 template<typename _IIter1, typename _IIter2, typename _Predicate>
531898c3 128 bool
1acba85b 129 equal(_IIter1, _IIter1, _IIter2, _Predicate,
15ac3c72 130 __gnu_parallel::sequential_tag);
c2ba9709
JS
131
132 template<typename _IIter1, typename _IIter2>
e12097ed 133 _GLIBCXX20_CONSTEXPR
531898c3
PC
134 bool
135 equal(_IIter1, _IIter1, _IIter2);
c2ba9709 136
1acba85b 137 template<typename _IIter1, typename _IIter2, typename _Predicate>
e12097ed 138 _GLIBCXX20_CONSTEXPR
531898c3 139 bool
1acba85b 140 equal(_IIter1, _IIter1, _IIter2, _Predicate);
c2ba9709 141
531898c3
PC
142 template<typename _IIter, typename _Tp>
143 _IIter
144 find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
c2ba9709 145
531898c3
PC
146 template<typename _IIter, typename _Tp>
147 _IIter
1acba85b 148 find(_IIter, _IIter, const _Tp& __val);
c2ba9709 149
531898c3
PC
150 template<typename _IIter, typename _Tp, typename _IterTag>
151 _IIter
1acba85b 152 __find_switch(_IIter, _IIter, const _Tp&, _IterTag);
c2ba9709 153
531898c3
PC
154 template<typename _RAIter, typename _Tp>
155 _RAIter
1acba85b 156 __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
c2ba9709 157
531898c3
PC
158 template<typename _IIter, typename _Predicate>
159 _IIter
160 find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
c2ba9709 161
531898c3
PC
162 template<typename _IIter, typename _Predicate>
163 _IIter
164 find_if(_IIter, _IIter, _Predicate);
c2ba9709 165
531898c3
PC
166 template<typename _IIter, typename _Predicate, typename _IterTag>
167 _IIter
1acba85b 168 __find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
c2ba9709 169
531898c3
PC
170 template<typename _RAIter, typename _Predicate>
171 _RAIter
1acba85b 172 __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
c2ba9709
JS
173
174 template<typename _IIter, typename _FIter>
531898c3
PC
175 _IIter
176 find_first_of(_IIter, _IIter, _FIter, _FIter,
15ac3c72 177 __gnu_parallel::sequential_tag);
c2ba9709 178
6f95a65a 179 template<typename _IIter, typename _FIter, typename _BiPredicate>
531898c3
PC
180 _IIter
181 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
15ac3c72 182 __gnu_parallel::sequential_tag);
c2ba9709 183
6f95a65a 184 template<typename _IIter, typename _FIter, typename _BiPredicate>
531898c3
PC
185 _IIter
186 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
c2ba9709
JS
187
188 template<typename _IIter, typename _FIter>
531898c3
PC
189 _IIter
190 find_first_of(_IIter, _IIter, _FIter, _FIter);
c2ba9709 191
531898c3 192 template<typename _IIter, typename _FIter,
15ac3c72 193 typename _IterTag1, typename _IterTag2>
531898c3 194 _IIter
15ac3c72
JS
195 __find_first_of_switch(
196 _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
c2ba9709 197
531898c3 198 template<typename _RAIter, typename _FIter, typename _BiPredicate,
15ac3c72 199 typename _IterTag>
531898c3 200 _RAIter
1acba85b 201 __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
15ac3c72 202 random_access_iterator_tag, _IterTag);
c2ba9709 203
531898c3 204 template<typename _IIter, typename _FIter, typename _BiPredicate,
15ac3c72 205 typename _IterTag1, typename _IterTag2>
531898c3 206 _IIter
1acba85b 207 __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
15ac3c72 208 _IterTag1, _IterTag2);
c2ba9709
JS
209
210
531898c3
PC
211 template<typename _IIter, typename _Function>
212 _Function
213 for_each(_IIter, _IIter, _Function);
6f95a65a 214
531898c3
PC
215 template<typename _IIter, typename _Function>
216 _Function
217 for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
c2ba9709 218
531898c3
PC
219 template<typename _Iterator, typename _Function>
220 _Function
ee1b5fc5 221 for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
c2ba9709 222
531898c3
PC
223 template<typename _IIter, typename _Function, typename _IterTag>
224 _Function
1acba85b 225 __for_each_switch(_IIter, _IIter, _Function, _IterTag);
c2ba9709 226
531898c3
PC
227 template<typename _RAIter, typename _Function>
228 _Function
15ac3c72
JS
229 __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
230 __gnu_parallel::_Parallelism __parallelism
231 = __gnu_parallel::parallel_balanced);
6f95a65a 232
c2ba9709 233
531898c3 234 template<typename _FIter, typename _Generator>
6f95a65a 235 void
531898c3 236 generate(_FIter, _FIter, _Generator);
c2ba9709 237
531898c3 238 template<typename _FIter, typename _Generator>
6f95a65a 239 void
531898c3 240 generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
c2ba9709 241
531898c3 242 template<typename _FIter, typename _Generator>
6f95a65a 243 void
ee1b5fc5 244 generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
6f95a65a 245
531898c3 246 template<typename _FIter, typename _Generator, typename _IterTag>
6f95a65a 247 void
1acba85b 248 __generate_switch(_FIter, _FIter, _Generator, _IterTag);
c2ba9709 249
531898c3 250 template<typename _RAIter, typename _Generator>
6f95a65a 251 void
15ac3c72
JS
252 __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
253 __gnu_parallel::_Parallelism __parallelism
254 = __gnu_parallel::parallel_balanced);
c2ba9709 255
531898c3 256 template<typename _OIter, typename _Size, typename _Generator>
6f95a65a 257 _OIter
531898c3 258 generate_n(_OIter, _Size, _Generator);
c2ba9709 259
531898c3 260 template<typename _OIter, typename _Size, typename _Generator>
6f95a65a 261 _OIter
531898c3 262 generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
c2ba9709 263
531898c3 264 template<typename _OIter, typename _Size, typename _Generator>
6f95a65a 265 _OIter
ee1b5fc5 266 generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
6f95a65a 267
531898c3 268 template<typename _OIter, typename _Size, typename _Generator,
15ac3c72 269 typename _IterTag>
6f95a65a 270 _OIter
1acba85b 271 __generate_n_switch(_OIter, _Size, _Generator, _IterTag);
c2ba9709 272
531898c3 273 template<typename _RAIter, typename _Size, typename _Generator>
6f95a65a 274 _RAIter
15ac3c72
JS
275 __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
276 __gnu_parallel::_Parallelism __parallelism
277 = __gnu_parallel::parallel_balanced);
c2ba9709
JS
278
279 template<typename _IIter1, typename _IIter2>
531898c3
PC
280 bool
281 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
15ac3c72 282 __gnu_parallel::sequential_tag);
c2ba9709 283
531898c3
PC
284 template<typename _IIter1, typename _IIter2, typename _Predicate>
285 bool
286 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
15ac3c72 287 __gnu_parallel::sequential_tag);
c2ba9709
JS
288
289 template<typename _IIter1, typename _IIter2>
e12097ed 290 _GLIBCXX20_CONSTEXPR
531898c3
PC
291 bool
292 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
c2ba9709 293
531898c3 294 template<typename _IIter1, typename _IIter2, typename _Predicate>
e12097ed 295 _GLIBCXX20_CONSTEXPR
531898c3
PC
296 bool
297 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
c2ba9709 298
531898c3 299 template<typename _IIter1, typename _IIter2,
15ac3c72 300 typename _Predicate, typename _IterTag1, typename _IterTag2>
531898c3 301 bool
1acba85b 302 __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
15ac3c72 303 _Predicate, _IterTag1, _IterTag2);
c2ba9709 304
531898c3
PC
305 template<typename _RAIter1, typename _RAIter2, typename _Predicate>
306 bool
1acba85b 307 __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
15ac3c72
JS
308 _Predicate, random_access_iterator_tag,
309 random_access_iterator_tag);
c2ba9709
JS
310
311 // algo.h
312 template<typename _IIter1, typename _IIter2>
531898c3
PC
313 pair<_IIter1, _IIter2>
314 mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
c2ba9709 315
531898c3
PC
316 template<typename _IIter1, typename _IIter2, typename _Predicate>
317 pair<_IIter1, _IIter2>
318 mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
15ac3c72 319 __gnu_parallel::sequential_tag);
c2ba9709
JS
320
321 template<typename _IIter1, typename _IIter2>
531898c3
PC
322 pair<_IIter1, _IIter2>
323 mismatch(_IIter1, _IIter1, _IIter2);
c2ba9709 324
531898c3
PC
325 template<typename _IIter1, typename _IIter2, typename _Predicate>
326 pair<_IIter1, _IIter2>
327 mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
c2ba9709 328
531898c3 329 template<typename _IIter1, typename _IIter2, typename _Predicate,
15ac3c72 330 typename _IterTag1, typename _IterTag2>
531898c3 331 pair<_IIter1, _IIter2>
1acba85b 332 __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate,
15ac3c72 333 _IterTag1, _IterTag2);
c2ba9709 334
531898c3
PC
335 template<typename _RAIter1, typename _RAIter2, typename _Predicate>
336 pair<_RAIter1, _RAIter2>
1acba85b 337 __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate,
15ac3c72 338 random_access_iterator_tag, random_access_iterator_tag);
c2ba9709
JS
339
340 template<typename _FIter1, typename _FIter2>
531898c3
PC
341 _FIter1
342 search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
c2ba9709
JS
343
344 template<typename _FIter1, typename _FIter2>
531898c3
PC
345 _FIter1
346 search(_FIter1, _FIter1, _FIter2, _FIter2);
c2ba9709 347
6f95a65a 348 template<typename _FIter1, typename _FIter2, typename _BiPredicate>
531898c3
PC
349 _FIter1
350 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
15ac3c72 351 __gnu_parallel::sequential_tag);
c2ba9709 352
6f95a65a 353 template<typename _FIter1, typename _FIter2, typename _BiPredicate>
531898c3
PC
354 _FIter1
355 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
c2ba9709
JS
356
357 template<typename _RAIter1, typename _RAIter2>
531898c3 358 _RAIter1
1acba85b 359 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
15ac3c72 360 random_access_iterator_tag, random_access_iterator_tag);
c2ba9709 361
531898c3 362 template<typename _FIter1, typename _FIter2, typename _IterTag1,
15ac3c72 363 typename _IterTag2>
531898c3 364 _FIter1
1acba85b 365 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
c2ba9709 366
6f95a65a 367 template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
531898c3 368 _RAIter1
1acba85b 369 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
15ac3c72 370 random_access_iterator_tag, random_access_iterator_tag);
c2ba9709 371
531898c3 372 template<typename _FIter1, typename _FIter2, typename _BiPredicate,
15ac3c72 373 typename _IterTag1, typename _IterTag2>
531898c3 374 _FIter1
1acba85b 375 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
15ac3c72 376 _IterTag1, _IterTag2);
c2ba9709 377
531898c3
PC
378 template<typename _FIter, typename _Integer, typename _Tp>
379 _FIter
380 search_n(_FIter, _FIter, _Integer, const _Tp&,
15ac3c72 381 __gnu_parallel::sequential_tag);
c2ba9709 382
531898c3 383 template<typename _FIter, typename _Integer, typename _Tp,
15ac3c72 384 typename _BiPredicate>
531898c3
PC
385 _FIter
386 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
15ac3c72 387 __gnu_parallel::sequential_tag);
c2ba9709 388
531898c3
PC
389 template<typename _FIter, typename _Integer, typename _Tp>
390 _FIter
391 search_n(_FIter, _FIter, _Integer, const _Tp&);
c2ba9709 392
531898c3 393 template<typename _FIter, typename _Integer, typename _Tp,
15ac3c72 394 typename _BiPredicate>
531898c3
PC
395 _FIter
396 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
c2ba9709 397
531898c3 398 template<typename _RAIter, typename _Integer, typename _Tp,
15ac3c72 399 typename _BiPredicate>
531898c3 400 _RAIter
1acba85b 401 __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
15ac3c72 402 _BiPredicate, random_access_iterator_tag);
c2ba9709 403
531898c3 404 template<typename _FIter, typename _Integer, typename _Tp,
15ac3c72 405 typename _BiPredicate, typename _IterTag>
531898c3 406 _FIter
1acba85b 407 __search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
15ac3c72 408 _BiPredicate, _IterTag);
c2ba9709
JS
409
410
1acba85b 411 template<typename _IIter, typename _OIter, typename _UnaryOperation>
6f95a65a 412 _OIter
1acba85b 413 transform(_IIter, _IIter, _OIter, _UnaryOperation);
c2ba9709 414
1acba85b 415 template<typename _IIter, typename _OIter, typename _UnaryOperation>
6f95a65a 416 _OIter
1acba85b 417 transform(_IIter, _IIter, _OIter, _UnaryOperation,
15ac3c72 418 __gnu_parallel::sequential_tag);
c2ba9709 419
1acba85b 420 template<typename _IIter, typename _OIter, typename _UnaryOperation>
6f95a65a 421 _OIter
1acba85b 422 transform(_IIter, _IIter, _OIter, _UnaryOperation,
15ac3c72 423 __gnu_parallel::_Parallelism);
6f95a65a 424
1acba85b 425 template<typename _IIter, typename _OIter, typename _UnaryOperation,
15ac3c72 426 typename _IterTag1, typename _IterTag2>
6f95a65a 427 _OIter
1acba85b 428 __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation,
15ac3c72 429 _IterTag1, _IterTag2);
6f95a65a 430
c2ba9709 431
1acba85b 432 template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation>
6f95a65a 433 _RAOIter
1acba85b 434 __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation,
15ac3c72
JS
435 random_access_iterator_tag, random_access_iterator_tag,
436 __gnu_parallel::_Parallelism __parallelism
437 = __gnu_parallel::parallel_balanced);
c2ba9709 438
c2ba9709 439
531898c3 440 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 441 typename _BiOperation>
6f95a65a
BK
442 _OIter
443 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
444
531898c3 445 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 446 typename _BiOperation>
6f95a65a
BK
447 _OIter
448 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
15ac3c72 449 __gnu_parallel::sequential_tag);
6f95a65a 450
531898c3 451 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 452 typename _BiOperation>
6f95a65a
BK
453 _OIter
454 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
15ac3c72 455 __gnu_parallel::_Parallelism);
6f95a65a 456
531898c3 457 template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
15ac3c72 458 typename _BiOperation>
6f95a65a 459 _RAIter3
1acba85b 460 __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
15ac3c72
JS
461 random_access_iterator_tag, random_access_iterator_tag,
462 random_access_iterator_tag,
463 __gnu_parallel::_Parallelism __parallelism
464 = __gnu_parallel::parallel_balanced);
6f95a65a 465
531898c3 466 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72
JS
467 typename _BiOperation, typename _Tag1,
468 typename _Tag2, typename _Tag3>
6f95a65a 469 _OIter
1acba85b 470 __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
15ac3c72 471 _Tag1, _Tag2, _Tag3);
c2ba9709 472
c2ba9709 473
531898c3 474 template<typename _FIter, typename _Tp>
6f95a65a 475 void
531898c3 476 replace(_FIter, _FIter, const _Tp&, const _Tp&);
c2ba9709 477
531898c3 478 template<typename _FIter, typename _Tp>
6f95a65a 479 void
531898c3 480 replace(_FIter, _FIter, const _Tp&, const _Tp&,
15ac3c72 481 __gnu_parallel::sequential_tag);
c2ba9709 482
531898c3 483 template<typename _FIter, typename _Tp>
6f95a65a 484 void
531898c3 485 replace(_FIter, _FIter, const _Tp&, const _Tp&,
15ac3c72 486 __gnu_parallel::_Parallelism);
6f95a65a 487
531898c3 488 template<typename _FIter, typename _Tp, typename _IterTag>
6f95a65a 489 void
1acba85b 490 __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
c2ba9709 491
531898c3 492 template<typename _RAIter, typename _Tp>
6f95a65a 493 void
1acba85b 494 __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
15ac3c72 495 random_access_iterator_tag, __gnu_parallel::_Parallelism);
c2ba9709
JS
496
497
531898c3 498 template<typename _FIter, typename _Predicate, typename _Tp>
6f95a65a 499 void
531898c3 500 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
c2ba9709 501
531898c3 502 template<typename _FIter, typename _Predicate, typename _Tp>
6f95a65a 503 void
531898c3 504 replace_if(_FIter, _FIter, _Predicate, const _Tp&,
15ac3c72 505 __gnu_parallel::sequential_tag);
c2ba9709 506
531898c3 507 template<typename _FIter, typename _Predicate, typename _Tp>
6f95a65a 508 void
531898c3 509 replace_if(_FIter, _FIter, _Predicate, const _Tp&,
15ac3c72 510 __gnu_parallel::_Parallelism);
6f95a65a 511
531898c3 512 template<typename _FIter, typename _Predicate, typename _Tp,
15ac3c72 513 typename _IterTag>
6f95a65a 514 void
1acba85b 515 __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
6f95a65a 516
531898c3 517 template<typename _RAIter, typename _Predicate, typename _Tp>
6f95a65a 518 void
1acba85b 519 __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
15ac3c72
JS
520 random_access_iterator_tag,
521 __gnu_parallel::_Parallelism);
6f95a65a 522
c2ba9709
JS
523
524 template<typename _FIter>
6f95a65a
BK
525 _FIter
526 max_element(_FIter, _FIter);
c2ba9709 527
6f95a65a
BK
528 template<typename _FIter>
529 _FIter
530 max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
531
532 template<typename _FIter>
6f95a65a 533 _FIter
ee1b5fc5 534 max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
c2ba9709
JS
535
536 template<typename _FIter, typename _Compare>
6f95a65a
BK
537 _FIter
538 max_element(_FIter, _FIter, _Compare);
c2ba9709 539
6f95a65a
BK
540 template<typename _FIter, typename _Compare>
541 _FIter
542 max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
543
544 template<typename _FIter, typename _Compare>
545 _FIter
ee1b5fc5 546 max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
6f95a65a
BK
547
548 template<typename _FIter, typename _Compare, typename _IterTag>
549 _FIter
1acba85b 550 __max_element_switch(_FIter, _FIter, _Compare, _IterTag);
c2ba9709
JS
551
552 template<typename _RAIter, typename _Compare>
6f95a65a 553 _RAIter
15ac3c72
JS
554 __max_element_switch(
555 _RAIter, _RAIter, _Compare, random_access_iterator_tag,
556 __gnu_parallel::_Parallelism __parallelism
557 = __gnu_parallel::parallel_balanced);
6f95a65a 558
c2ba9709
JS
559
560 template<typename _IIter1, typename _IIter2, typename _OIter>
6f95a65a
BK
561 _OIter
562 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 563 __gnu_parallel::sequential_tag);
c2ba9709 564
531898c3 565 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 566 typename _Compare>
6f95a65a
BK
567 _OIter
568 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
15ac3c72 569 __gnu_parallel::sequential_tag);
c2ba9709 570
531898c3 571 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 572 typename _Compare>
6f95a65a
BK
573 _OIter
574 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
c2ba9709
JS
575
576 template<typename _IIter1, typename _IIter2, typename _OIter>
6f95a65a
BK
577 _OIter
578 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
c2ba9709 579
531898c3 580 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72
JS
581 typename _Compare, typename _IterTag1, typename _IterTag2,
582 typename _IterTag3>
6f95a65a 583 _OIter
1acba85b 584 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
15ac3c72 585 _IterTag1, _IterTag2, _IterTag3);
c2ba9709 586
531898c3 587 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 588 typename _Compare>
6f95a65a 589 _OIter
1acba85b 590 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
15ac3c72
JS
591 random_access_iterator_tag, random_access_iterator_tag,
592 random_access_iterator_tag);
6f95a65a 593
c2ba9709
JS
594
595 template<typename _FIter>
6f95a65a
BK
596 _FIter
597 min_element(_FIter, _FIter);
c2ba9709 598
6f95a65a
BK
599 template<typename _FIter>
600 _FIter
601 min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
602
603 template<typename _FIter>
6f95a65a 604 _FIter
15ac3c72
JS
605 min_element(_FIter, _FIter,
606 __gnu_parallel::_Parallelism __parallelism_tag);
c2ba9709
JS
607
608 template<typename _FIter, typename _Compare>
6f95a65a
BK
609 _FIter
610 min_element(_FIter, _FIter, _Compare);
c2ba9709 611
6f95a65a
BK
612 template<typename _FIter, typename _Compare>
613 _FIter
614 min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
615
616 template<typename _FIter, typename _Compare>
617 _FIter
ee1b5fc5 618 min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
6f95a65a
BK
619
620 template<typename _FIter, typename _Compare, typename _IterTag>
621 _FIter
1acba85b 622 __min_element_switch(_FIter, _FIter, _Compare, _IterTag);
c2ba9709
JS
623
624 template<typename _RAIter, typename _Compare>
6f95a65a 625 _RAIter
15ac3c72
JS
626 __min_element_switch(
627 _RAIter, _RAIter, _Compare, random_access_iterator_tag,
628 __gnu_parallel::_Parallelism __parallelism
629 = __gnu_parallel::parallel_balanced);
c2ba9709
JS
630
631 template<typename _RAIter>
531898c3
PC
632 void
633 nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
634
635 template<typename _RAIter, typename _Compare>
531898c3
PC
636 void
637 nth_element(_RAIter, _RAIter, _RAIter, _Compare,
15ac3c72 638 __gnu_parallel::sequential_tag);
c2ba9709
JS
639
640 template<typename _RAIter, typename _Compare>
531898c3
PC
641 void
642 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
c2ba9709
JS
643
644 template<typename _RAIter>
531898c3
PC
645 void
646 nth_element(_RAIter, _RAIter, _RAIter);
c2ba9709
JS
647
648 template<typename _RAIter, typename _Compare>
531898c3
PC
649 void
650 partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
15ac3c72 651 __gnu_parallel::sequential_tag);
c2ba9709
JS
652
653 template<typename _RAIter>
531898c3
PC
654 void
655 partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
656
657 template<typename _RAIter, typename _Compare>
531898c3
PC
658 void
659 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
c2ba9709
JS
660
661 template<typename _RAIter>
531898c3
PC
662 void
663 partial_sort(_RAIter, _RAIter, _RAIter);
c2ba9709 664
1acba85b 665 template<typename _FIter, typename _Predicate>
531898c3 666 _FIter
1acba85b 667 partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag);
c2ba9709 668
1acba85b 669 template<typename _FIter, typename _Predicate>
531898c3 670 _FIter
1acba85b 671 partition(_FIter, _FIter, _Predicate);
c2ba9709 672
1acba85b 673 template<typename _FIter, typename _Predicate, typename _IterTag>
531898c3 674 _FIter
1acba85b 675 __partition_switch(_FIter, _FIter, _Predicate, _IterTag);
c2ba9709 676
1acba85b 677 template<typename _RAIter, typename _Predicate>
531898c3 678 _RAIter
15ac3c72
JS
679 __partition_switch(
680 _RAIter, _RAIter, _Predicate, random_access_iterator_tag);
c2ba9709
JS
681
682 template<typename _RAIter>
531898c3
PC
683 void
684 random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
c2ba9709 685
531898c3
PC
686 template<typename _RAIter, typename _RandomNumberGenerator>
687 void
688 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
15ac3c72 689 __gnu_parallel::sequential_tag);
c2ba9709
JS
690
691 template<typename _RAIter>
531898c3
PC
692 void
693 random_shuffle(_RAIter, _RAIter);
c2ba9709 694
531898c3
PC
695 template<typename _RAIter, typename _RandomNumberGenerator>
696 void
247d8075 697 random_shuffle(_RAIter, _RAIter,
734f5023 698#if __cplusplus >= 201103L
247d8075
PC
699 _RandomNumberGenerator&&);
700#else
701 _RandomNumberGenerator&);
702#endif
c2ba9709
JS
703
704 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
705 _OIter
706 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 707 __gnu_parallel::sequential_tag);
c2ba9709 708
531898c3 709 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 710 typename _Predicate>
531898c3 711 _OIter
1acba85b 712 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
15ac3c72 713 __gnu_parallel::sequential_tag);
c2ba9709
JS
714
715 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
716 _OIter
717 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
c2ba9709 718
531898c3 719 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 720 typename _Predicate>
531898c3
PC
721 _OIter
722 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
c2ba9709 723
531898c3 724 template<typename _IIter1, typename _IIter2, typename _Predicate,
15ac3c72
JS
725 typename _OIter, typename _IterTag1, typename _IterTag2,
726 typename _IterTag3>
531898c3 727 _OIter
1acba85b 728 __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 729 _Predicate, _IterTag1, _IterTag2, _IterTag3);
531898c3
PC
730
731 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
15ac3c72 732 typename _Predicate>
531898c3 733 _Output_RAIter
1acba85b 734 __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
15ac3c72
JS
735 _Predicate, random_access_iterator_tag,
736 random_access_iterator_tag, random_access_iterator_tag);
c2ba9709
JS
737
738 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
739 _OIter
740 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 741 __gnu_parallel::sequential_tag);
c2ba9709 742
531898c3 743 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 744 typename _Predicate>
531898c3
PC
745 _OIter
746 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
15ac3c72 747 __gnu_parallel::sequential_tag);
c2ba9709
JS
748
749 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
750 _OIter
751 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
c2ba9709 752
531898c3 753 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 754 typename _Predicate>
531898c3
PC
755 _OIter
756 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
c2ba9709 757
531898c3 758 template<typename _IIter1, typename _IIter2, typename _Predicate,
15ac3c72
JS
759 typename _OIter, typename _IterTag1, typename _IterTag2,
760 typename _IterTag3>
531898c3 761 _OIter
1acba85b 762 __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 763 _Predicate, _IterTag1, _IterTag2, _IterTag3);
531898c3
PC
764
765 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
15ac3c72 766 typename _Predicate>
531898c3 767 _Output_RAIter
1acba85b 768 __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
15ac3c72
JS
769 _Output_RAIter, _Predicate,
770 random_access_iterator_tag,
771 random_access_iterator_tag,
772 random_access_iterator_tag);
c2ba9709
JS
773
774 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
775 _OIter
776 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 777 __gnu_parallel::sequential_tag);
c2ba9709 778
531898c3 779 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 780 typename _Predicate>
531898c3
PC
781 _OIter
782 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 783 _Predicate, __gnu_parallel::sequential_tag);
c2ba9709
JS
784
785 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
786 _OIter
787 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
788
789 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 790 typename _Predicate>
531898c3
PC
791 _OIter
792 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 793 _Predicate);
531898c3
PC
794
795 template<typename _IIter1, typename _IIter2, typename _Predicate,
15ac3c72
JS
796 typename _OIter, typename _IterTag1, typename _IterTag2,
797 typename _IterTag3>
531898c3 798 _OIter
1acba85b 799 __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
15ac3c72
JS
800 _OIter, _Predicate, _IterTag1, _IterTag2,
801 _IterTag3);
c2ba9709 802
531898c3 803 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
15ac3c72 804 typename _Predicate>
531898c3 805 _Output_RAIter
1acba85b 806 __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
15ac3c72
JS
807 _Output_RAIter, _Predicate,
808 random_access_iterator_tag,
809 random_access_iterator_tag,
810 random_access_iterator_tag);
c2ba9709
JS
811
812
813 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
814 _OIter
815 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 816 __gnu_parallel::sequential_tag);
c2ba9709 817
531898c3 818 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 819 typename _Predicate>
531898c3
PC
820 _OIter
821 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
15ac3c72 822 __gnu_parallel::sequential_tag);
c2ba9709
JS
823
824 template<typename _IIter1, typename _IIter2, typename _OIter>
531898c3
PC
825 _OIter
826 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
c2ba9709 827
531898c3 828 template<typename _IIter1, typename _IIter2, typename _OIter,
15ac3c72 829 typename _Predicate>
531898c3
PC
830 _OIter
831 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
c2ba9709 832
531898c3 833 template<typename _IIter1, typename _IIter2, typename _Predicate,
15ac3c72
JS
834 typename _OIter, typename _IterTag1, typename _IterTag2,
835 typename _IterTag3>
531898c3 836 _OIter
1acba85b 837 __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
15ac3c72 838 _Predicate, _IterTag1, _IterTag2, _IterTag3);
c2ba9709 839
531898c3 840 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
15ac3c72 841 typename _Predicate>
531898c3 842 _Output_RAIter
1acba85b 843 __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
15ac3c72
JS
844 _Output_RAIter, _Predicate,
845 random_access_iterator_tag,
846 random_access_iterator_tag,
847 random_access_iterator_tag);
c2ba9709
JS
848
849
850 template<typename _RAIter>
531898c3
PC
851 void
852 sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
853
854 template<typename _RAIter, typename _Compare>
531898c3
PC
855 void
856 sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
c2ba9709
JS
857
858 template<typename _RAIter>
531898c3
PC
859 void
860 sort(_RAIter, _RAIter);
c2ba9709
JS
861
862 template<typename _RAIter, typename _Compare>
531898c3
PC
863 void
864 sort(_RAIter, _RAIter, _Compare);
c2ba9709
JS
865
866 template<typename _RAIter>
531898c3
PC
867 void
868 stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
c2ba9709
JS
869
870 template<typename _RAIter, typename _Compare>
531898c3
PC
871 void
872 stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
c2ba9709
JS
873
874 template<typename _RAIter>
531898c3
PC
875 void
876 stable_sort(_RAIter, _RAIter);
c2ba9709
JS
877
878 template<typename _RAIter, typename _Compare>
531898c3
PC
879 void
880 stable_sort(_RAIter, _RAIter, _Compare);
c2ba9709
JS
881
882 template<typename _IIter, typename _OIter>
531898c3
PC
883 _OIter
884 unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
c2ba9709 885
531898c3
PC
886 template<typename _IIter, typename _OIter, typename _Predicate>
887 _OIter
888 unique_copy(_IIter, _IIter, _OIter, _Predicate,
15ac3c72 889 __gnu_parallel::sequential_tag);
c2ba9709
JS
890
891 template<typename _IIter, typename _OIter>
531898c3
PC
892 _OIter
893 unique_copy(_IIter, _IIter, _OIter);
c2ba9709 894
531898c3
PC
895 template<typename _IIter, typename _OIter, typename _Predicate>
896 _OIter
897 unique_copy(_IIter, _IIter, _OIter, _Predicate);
c2ba9709 898
531898c3 899 template<typename _IIter, typename _OIter, typename _Predicate,
15ac3c72 900 typename _IterTag1, typename _IterTag2>
531898c3 901 _OIter
1acba85b 902 __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
15ac3c72 903 _IterTag1, _IterTag2);
c2ba9709 904
531898c3
PC
905 template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
906 _RandomAccess_OIter
1acba85b 907 __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
15ac3c72 908 random_access_iterator_tag, random_access_iterator_tag);
c2ba9709
JS
909} // end namespace __parallel
910} // end namespace std
911
cbcd1e45 912#endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */