algorithmfwd.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. // <parallel/algorithm> Forward declarations -*- C++ -*-
  2. // Copyright (C) 2007-2018 Free Software Foundation, Inc.
  3. //
  4. // This file is part of the GNU ISO C++ Library. This library is free
  5. // software; you can redistribute it and/or modify it under the terms
  6. // of the GNU General Public License as published by the Free Software
  7. // Foundation; either version 3, or (at your option) any later
  8. // version.
  9. // This library is distributed in the hope that it will be useful, but
  10. // WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. // General Public License for more details.
  13. // Under Section 7 of GPL version 3, you are granted additional
  14. // permissions described in the GCC Runtime Library Exception, version
  15. // 3.1, as published by the Free Software Foundation.
  16. // You should have received a copy of the GNU General Public License and
  17. // a copy of the GCC Runtime Library Exception along with this program;
  18. // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
  19. // <http://www.gnu.org/licenses/>.
  20. /** @file parallel/algorithmfwd.h
  21. * This file is a GNU parallel extension to the Standard C++ Library.
  22. */
  23. #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
  24. #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
  25. #pragma GCC system_header
  26. #include <parallel/tags.h>
  27. #include <parallel/settings.h>
  28. namespace std _GLIBCXX_VISIBILITY(default)
  29. {
  30. namespace __parallel
  31. {
  32. template<typename _FIter>
  33. _FIter
  34. adjacent_find(_FIter, _FIter);
  35. template<typename _FIter>
  36. _FIter
  37. adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
  38. template<typename _FIter, typename _IterTag>
  39. _FIter
  40. __adjacent_find_switch(_FIter, _FIter, _IterTag);
  41. template<typename _RAIter>
  42. _RAIter
  43. __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
  44. template<typename _FIter, typename _BiPredicate>
  45. _FIter
  46. adjacent_find(_FIter, _FIter, _BiPredicate);
  47. template<typename _FIter, typename _BiPredicate>
  48. _FIter
  49. adjacent_find(_FIter, _FIter, _BiPredicate,
  50. __gnu_parallel::sequential_tag);
  51. template<typename _FIter, typename _BiPredicate, typename _IterTag>
  52. _FIter
  53. __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
  54. template<typename _RAIter, typename _BiPredicate>
  55. _RAIter
  56. __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
  57. random_access_iterator_tag);
  58. template<typename _IIter, typename _Tp>
  59. typename iterator_traits<_IIter>::difference_type
  60. count(_IIter, _IIter, const _Tp&);
  61. template<typename _IIter, typename _Tp>
  62. typename iterator_traits<_IIter>::difference_type
  63. count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
  64. template<typename _IIter, typename _Tp>
  65. typename iterator_traits<_IIter>::difference_type
  66. count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
  67. template<typename _IIter, typename _Tp, typename _IterTag>
  68. typename iterator_traits<_IIter>::difference_type
  69. __count_switch(_IIter, _IIter, const _Tp&, _IterTag);
  70. template<typename _RAIter, typename _Tp>
  71. typename iterator_traits<_RAIter>::difference_type
  72. __count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag,
  73. __gnu_parallel::_Parallelism __parallelism
  74. = __gnu_parallel::parallel_unbalanced);
  75. template<typename _IIter, typename _Predicate>
  76. typename iterator_traits<_IIter>::difference_type
  77. count_if(_IIter, _IIter, _Predicate);
  78. template<typename _IIter, typename _Predicate>
  79. typename iterator_traits<_IIter>::difference_type
  80. count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
  81. template<typename _IIter, typename _Predicate>
  82. typename iterator_traits<_IIter>::difference_type
  83. count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
  84. template<typename _IIter, typename _Predicate, typename _IterTag>
  85. typename iterator_traits<_IIter>::difference_type
  86. __count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
  87. template<typename _RAIter, typename _Predicate>
  88. typename iterator_traits<_RAIter>::difference_type
  89. __count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag,
  90. __gnu_parallel::_Parallelism __parallelism
  91. = __gnu_parallel::parallel_unbalanced);
  92. // algobase.h
  93. template<typename _IIter1, typename _IIter2>
  94. bool
  95. equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
  96. template<typename _IIter1, typename _IIter2, typename _Predicate>
  97. bool
  98. equal(_IIter1, _IIter1, _IIter2, _Predicate,
  99. __gnu_parallel::sequential_tag);
  100. template<typename _IIter1, typename _IIter2>
  101. bool
  102. equal(_IIter1, _IIter1, _IIter2);
  103. template<typename _IIter1, typename _IIter2, typename _Predicate>
  104. bool
  105. equal(_IIter1, _IIter1, _IIter2, _Predicate);
  106. template<typename _IIter, typename _Tp>
  107. _IIter
  108. find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
  109. template<typename _IIter, typename _Tp>
  110. _IIter
  111. find(_IIter, _IIter, const _Tp& __val);
  112. template<typename _IIter, typename _Tp, typename _IterTag>
  113. _IIter
  114. __find_switch(_IIter, _IIter, const _Tp&, _IterTag);
  115. template<typename _RAIter, typename _Tp>
  116. _RAIter
  117. __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
  118. template<typename _IIter, typename _Predicate>
  119. _IIter
  120. find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
  121. template<typename _IIter, typename _Predicate>
  122. _IIter
  123. find_if(_IIter, _IIter, _Predicate);
  124. template<typename _IIter, typename _Predicate, typename _IterTag>
  125. _IIter
  126. __find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
  127. template<typename _RAIter, typename _Predicate>
  128. _RAIter
  129. __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
  130. template<typename _IIter, typename _FIter>
  131. _IIter
  132. find_first_of(_IIter, _IIter, _FIter, _FIter,
  133. __gnu_parallel::sequential_tag);
  134. template<typename _IIter, typename _FIter, typename _BiPredicate>
  135. _IIter
  136. find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
  137. __gnu_parallel::sequential_tag);
  138. template<typename _IIter, typename _FIter, typename _BiPredicate>
  139. _IIter
  140. find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
  141. template<typename _IIter, typename _FIter>
  142. _IIter
  143. find_first_of(_IIter, _IIter, _FIter, _FIter);
  144. template<typename _IIter, typename _FIter,
  145. typename _IterTag1, typename _IterTag2>
  146. _IIter
  147. __find_first_of_switch(
  148. _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
  149. template<typename _RAIter, typename _FIter, typename _BiPredicate,
  150. typename _IterTag>
  151. _RAIter
  152. __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
  153. random_access_iterator_tag, _IterTag);
  154. template<typename _IIter, typename _FIter, typename _BiPredicate,
  155. typename _IterTag1, typename _IterTag2>
  156. _IIter
  157. __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
  158. _IterTag1, _IterTag2);
  159. template<typename _IIter, typename _Function>
  160. _Function
  161. for_each(_IIter, _IIter, _Function);
  162. template<typename _IIter, typename _Function>
  163. _Function
  164. for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
  165. template<typename _Iterator, typename _Function>
  166. _Function
  167. for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
  168. template<typename _IIter, typename _Function, typename _IterTag>
  169. _Function
  170. __for_each_switch(_IIter, _IIter, _Function, _IterTag);
  171. template<typename _RAIter, typename _Function>
  172. _Function
  173. __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
  174. __gnu_parallel::_Parallelism __parallelism
  175. = __gnu_parallel::parallel_balanced);
  176. template<typename _FIter, typename _Generator>
  177. void
  178. generate(_FIter, _FIter, _Generator);
  179. template<typename _FIter, typename _Generator>
  180. void
  181. generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
  182. template<typename _FIter, typename _Generator>
  183. void
  184. generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
  185. template<typename _FIter, typename _Generator, typename _IterTag>
  186. void
  187. __generate_switch(_FIter, _FIter, _Generator, _IterTag);
  188. template<typename _RAIter, typename _Generator>
  189. void
  190. __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
  191. __gnu_parallel::_Parallelism __parallelism
  192. = __gnu_parallel::parallel_balanced);
  193. template<typename _OIter, typename _Size, typename _Generator>
  194. _OIter
  195. generate_n(_OIter, _Size, _Generator);
  196. template<typename _OIter, typename _Size, typename _Generator>
  197. _OIter
  198. generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
  199. template<typename _OIter, typename _Size, typename _Generator>
  200. _OIter
  201. generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
  202. template<typename _OIter, typename _Size, typename _Generator,
  203. typename _IterTag>
  204. _OIter
  205. __generate_n_switch(_OIter, _Size, _Generator, _IterTag);
  206. template<typename _RAIter, typename _Size, typename _Generator>
  207. _RAIter
  208. __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
  209. __gnu_parallel::_Parallelism __parallelism
  210. = __gnu_parallel::parallel_balanced);
  211. template<typename _IIter1, typename _IIter2>
  212. bool
  213. lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
  214. __gnu_parallel::sequential_tag);
  215. template<typename _IIter1, typename _IIter2, typename _Predicate>
  216. bool
  217. lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
  218. __gnu_parallel::sequential_tag);
  219. template<typename _IIter1, typename _IIter2>
  220. bool
  221. lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
  222. template<typename _IIter1, typename _IIter2, typename _Predicate>
  223. bool
  224. lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
  225. template<typename _IIter1, typename _IIter2,
  226. typename _Predicate, typename _IterTag1, typename _IterTag2>
  227. bool
  228. __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
  229. _Predicate, _IterTag1, _IterTag2);
  230. template<typename _RAIter1, typename _RAIter2, typename _Predicate>
  231. bool
  232. __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  233. _Predicate, random_access_iterator_tag,
  234. random_access_iterator_tag);
  235. // algo.h
  236. template<typename _IIter1, typename _IIter2>
  237. pair<_IIter1, _IIter2>
  238. mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
  239. template<typename _IIter1, typename _IIter2, typename _Predicate>
  240. pair<_IIter1, _IIter2>
  241. mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
  242. __gnu_parallel::sequential_tag);
  243. template<typename _IIter1, typename _IIter2>
  244. pair<_IIter1, _IIter2>
  245. mismatch(_IIter1, _IIter1, _IIter2);
  246. template<typename _IIter1, typename _IIter2, typename _Predicate>
  247. pair<_IIter1, _IIter2>
  248. mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
  249. template<typename _IIter1, typename _IIter2, typename _Predicate,
  250. typename _IterTag1, typename _IterTag2>
  251. pair<_IIter1, _IIter2>
  252. __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate,
  253. _IterTag1, _IterTag2);
  254. template<typename _RAIter1, typename _RAIter2, typename _Predicate>
  255. pair<_RAIter1, _RAIter2>
  256. __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate,
  257. random_access_iterator_tag, random_access_iterator_tag);
  258. template<typename _FIter1, typename _FIter2>
  259. _FIter1
  260. search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
  261. template<typename _FIter1, typename _FIter2>
  262. _FIter1
  263. search(_FIter1, _FIter1, _FIter2, _FIter2);
  264. template<typename _FIter1, typename _FIter2, typename _BiPredicate>
  265. _FIter1
  266. search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
  267. __gnu_parallel::sequential_tag);
  268. template<typename _FIter1, typename _FIter2, typename _BiPredicate>
  269. _FIter1
  270. search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
  271. template<typename _RAIter1, typename _RAIter2>
  272. _RAIter1
  273. __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  274. random_access_iterator_tag, random_access_iterator_tag);
  275. template<typename _FIter1, typename _FIter2, typename _IterTag1,
  276. typename _IterTag2>
  277. _FIter1
  278. __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
  279. template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
  280. _RAIter1
  281. __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
  282. random_access_iterator_tag, random_access_iterator_tag);
  283. template<typename _FIter1, typename _FIter2, typename _BiPredicate,
  284. typename _IterTag1, typename _IterTag2>
  285. _FIter1
  286. __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
  287. _IterTag1, _IterTag2);
  288. template<typename _FIter, typename _Integer, typename _Tp>
  289. _FIter
  290. search_n(_FIter, _FIter, _Integer, const _Tp&,
  291. __gnu_parallel::sequential_tag);
  292. template<typename _FIter, typename _Integer, typename _Tp,
  293. typename _BiPredicate>
  294. _FIter
  295. search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
  296. __gnu_parallel::sequential_tag);
  297. template<typename _FIter, typename _Integer, typename _Tp>
  298. _FIter
  299. search_n(_FIter, _FIter, _Integer, const _Tp&);
  300. template<typename _FIter, typename _Integer, typename _Tp,
  301. typename _BiPredicate>
  302. _FIter
  303. search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
  304. template<typename _RAIter, typename _Integer, typename _Tp,
  305. typename _BiPredicate>
  306. _RAIter
  307. __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
  308. _BiPredicate, random_access_iterator_tag);
  309. template<typename _FIter, typename _Integer, typename _Tp,
  310. typename _BiPredicate, typename _IterTag>
  311. _FIter
  312. __search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
  313. _BiPredicate, _IterTag);
  314. template<typename _IIter, typename _OIter, typename _UnaryOperation>
  315. _OIter
  316. transform(_IIter, _IIter, _OIter, _UnaryOperation);
  317. template<typename _IIter, typename _OIter, typename _UnaryOperation>
  318. _OIter
  319. transform(_IIter, _IIter, _OIter, _UnaryOperation,
  320. __gnu_parallel::sequential_tag);
  321. template<typename _IIter, typename _OIter, typename _UnaryOperation>
  322. _OIter
  323. transform(_IIter, _IIter, _OIter, _UnaryOperation,
  324. __gnu_parallel::_Parallelism);
  325. template<typename _IIter, typename _OIter, typename _UnaryOperation,
  326. typename _IterTag1, typename _IterTag2>
  327. _OIter
  328. __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation,
  329. _IterTag1, _IterTag2);
  330. template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation>
  331. _RAOIter
  332. __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation,
  333. random_access_iterator_tag, random_access_iterator_tag,
  334. __gnu_parallel::_Parallelism __parallelism
  335. = __gnu_parallel::parallel_balanced);
  336. template<typename _IIter1, typename _IIter2, typename _OIter,
  337. typename _BiOperation>
  338. _OIter
  339. transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
  340. template<typename _IIter1, typename _IIter2, typename _OIter,
  341. typename _BiOperation>
  342. _OIter
  343. transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  344. __gnu_parallel::sequential_tag);
  345. template<typename _IIter1, typename _IIter2, typename _OIter,
  346. typename _BiOperation>
  347. _OIter
  348. transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  349. __gnu_parallel::_Parallelism);
  350. template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
  351. typename _BiOperation>
  352. _RAIter3
  353. __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
  354. random_access_iterator_tag, random_access_iterator_tag,
  355. random_access_iterator_tag,
  356. __gnu_parallel::_Parallelism __parallelism
  357. = __gnu_parallel::parallel_balanced);
  358. template<typename _IIter1, typename _IIter2, typename _OIter,
  359. typename _BiOperation, typename _Tag1,
  360. typename _Tag2, typename _Tag3>
  361. _OIter
  362. __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  363. _Tag1, _Tag2, _Tag3);
  364. template<typename _FIter, typename _Tp>
  365. void
  366. replace(_FIter, _FIter, const _Tp&, const _Tp&);
  367. template<typename _FIter, typename _Tp>
  368. void
  369. replace(_FIter, _FIter, const _Tp&, const _Tp&,
  370. __gnu_parallel::sequential_tag);
  371. template<typename _FIter, typename _Tp>
  372. void
  373. replace(_FIter, _FIter, const _Tp&, const _Tp&,
  374. __gnu_parallel::_Parallelism);
  375. template<typename _FIter, typename _Tp, typename _IterTag>
  376. void
  377. __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
  378. template<typename _RAIter, typename _Tp>
  379. void
  380. __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
  381. random_access_iterator_tag, __gnu_parallel::_Parallelism);
  382. template<typename _FIter, typename _Predicate, typename _Tp>
  383. void
  384. replace_if(_FIter, _FIter, _Predicate, const _Tp&);
  385. template<typename _FIter, typename _Predicate, typename _Tp>
  386. void
  387. replace_if(_FIter, _FIter, _Predicate, const _Tp&,
  388. __gnu_parallel::sequential_tag);
  389. template<typename _FIter, typename _Predicate, typename _Tp>
  390. void
  391. replace_if(_FIter, _FIter, _Predicate, const _Tp&,
  392. __gnu_parallel::_Parallelism);
  393. template<typename _FIter, typename _Predicate, typename _Tp,
  394. typename _IterTag>
  395. void
  396. __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
  397. template<typename _RAIter, typename _Predicate, typename _Tp>
  398. void
  399. __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
  400. random_access_iterator_tag,
  401. __gnu_parallel::_Parallelism);
  402. template<typename _FIter>
  403. _FIter
  404. max_element(_FIter, _FIter);
  405. template<typename _FIter>
  406. _FIter
  407. max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
  408. template<typename _FIter>
  409. _FIter
  410. max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
  411. template<typename _FIter, typename _Compare>
  412. _FIter
  413. max_element(_FIter, _FIter, _Compare);
  414. template<typename _FIter, typename _Compare>
  415. _FIter
  416. max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
  417. template<typename _FIter, typename _Compare>
  418. _FIter
  419. max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
  420. template<typename _FIter, typename _Compare, typename _IterTag>
  421. _FIter
  422. __max_element_switch(_FIter, _FIter, _Compare, _IterTag);
  423. template<typename _RAIter, typename _Compare>
  424. _RAIter
  425. __max_element_switch(
  426. _RAIter, _RAIter, _Compare, random_access_iterator_tag,
  427. __gnu_parallel::_Parallelism __parallelism
  428. = __gnu_parallel::parallel_balanced);
  429. template<typename _IIter1, typename _IIter2, typename _OIter>
  430. _OIter
  431. merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  432. __gnu_parallel::sequential_tag);
  433. template<typename _IIter1, typename _IIter2, typename _OIter,
  434. typename _Compare>
  435. _OIter
  436. merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  437. __gnu_parallel::sequential_tag);
  438. template<typename _IIter1, typename _IIter2, typename _OIter,
  439. typename _Compare>
  440. _OIter
  441. merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  442. template<typename _IIter1, typename _IIter2, typename _OIter>
  443. _OIter
  444. merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  445. template<typename _IIter1, typename _IIter2, typename _OIter,
  446. typename _Compare, typename _IterTag1, typename _IterTag2,
  447. typename _IterTag3>
  448. _OIter
  449. __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  450. _IterTag1, _IterTag2, _IterTag3);
  451. template<typename _IIter1, typename _IIter2, typename _OIter,
  452. typename _Compare>
  453. _OIter
  454. __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  455. random_access_iterator_tag, random_access_iterator_tag,
  456. random_access_iterator_tag);
  457. template<typename _FIter>
  458. _FIter
  459. min_element(_FIter, _FIter);
  460. template<typename _FIter>
  461. _FIter
  462. min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
  463. template<typename _FIter>
  464. _FIter
  465. min_element(_FIter, _FIter,
  466. __gnu_parallel::_Parallelism __parallelism_tag);
  467. template<typename _FIter, typename _Compare>
  468. _FIter
  469. min_element(_FIter, _FIter, _Compare);
  470. template<typename _FIter, typename _Compare>
  471. _FIter
  472. min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
  473. template<typename _FIter, typename _Compare>
  474. _FIter
  475. min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
  476. template<typename _FIter, typename _Compare, typename _IterTag>
  477. _FIter
  478. __min_element_switch(_FIter, _FIter, _Compare, _IterTag);
  479. template<typename _RAIter, typename _Compare>
  480. _RAIter
  481. __min_element_switch(
  482. _RAIter, _RAIter, _Compare, random_access_iterator_tag,
  483. __gnu_parallel::_Parallelism __parallelism
  484. = __gnu_parallel::parallel_balanced);
  485. template<typename _RAIter>
  486. void
  487. nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
  488. template<typename _RAIter, typename _Compare>
  489. void
  490. nth_element(_RAIter, _RAIter, _RAIter, _Compare,
  491. __gnu_parallel::sequential_tag);
  492. template<typename _RAIter, typename _Compare>
  493. void
  494. nth_element(_RAIter, _RAIter, _RAIter, _Compare);
  495. template<typename _RAIter>
  496. void
  497. nth_element(_RAIter, _RAIter, _RAIter);
  498. template<typename _RAIter, typename _Compare>
  499. void
  500. partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
  501. __gnu_parallel::sequential_tag);
  502. template<typename _RAIter>
  503. void
  504. partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
  505. template<typename _RAIter, typename _Compare>
  506. void
  507. partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
  508. template<typename _RAIter>
  509. void
  510. partial_sort(_RAIter, _RAIter, _RAIter);
  511. template<typename _FIter, typename _Predicate>
  512. _FIter
  513. partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag);
  514. template<typename _FIter, typename _Predicate>
  515. _FIter
  516. partition(_FIter, _FIter, _Predicate);
  517. template<typename _FIter, typename _Predicate, typename _IterTag>
  518. _FIter
  519. __partition_switch(_FIter, _FIter, _Predicate, _IterTag);
  520. template<typename _RAIter, typename _Predicate>
  521. _RAIter
  522. __partition_switch(
  523. _RAIter, _RAIter, _Predicate, random_access_iterator_tag);
  524. template<typename _RAIter>
  525. void
  526. random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  527. template<typename _RAIter, typename _RandomNumberGenerator>
  528. void
  529. random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
  530. __gnu_parallel::sequential_tag);
  531. template<typename _RAIter>
  532. void
  533. random_shuffle(_RAIter, _RAIter);
  534. template<typename _RAIter, typename _RandomNumberGenerator>
  535. void
  536. random_shuffle(_RAIter, _RAIter,
  537. #if __cplusplus >= 201103L
  538. _RandomNumberGenerator&&);
  539. #else
  540. _RandomNumberGenerator&);
  541. #endif
  542. template<typename _IIter1, typename _IIter2, typename _OIter>
  543. _OIter
  544. set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  545. __gnu_parallel::sequential_tag);
  546. template<typename _IIter1, typename _IIter2, typename _OIter,
  547. typename _Predicate>
  548. _OIter
  549. set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  550. __gnu_parallel::sequential_tag);
  551. template<typename _IIter1, typename _IIter2, typename _OIter>
  552. _OIter
  553. set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  554. template<typename _IIter1, typename _IIter2, typename _OIter,
  555. typename _Predicate>
  556. _OIter
  557. set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  558. template<typename _IIter1, typename _IIter2, typename _Predicate,
  559. typename _OIter, typename _IterTag1, typename _IterTag2,
  560. typename _IterTag3>
  561. _OIter
  562. __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  563. _Predicate, _IterTag1, _IterTag2, _IterTag3);
  564. template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  565. typename _Predicate>
  566. _Output_RAIter
  567. __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
  568. _Predicate, random_access_iterator_tag,
  569. random_access_iterator_tag, random_access_iterator_tag);
  570. template<typename _IIter1, typename _IIter2, typename _OIter>
  571. _OIter
  572. set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  573. __gnu_parallel::sequential_tag);
  574. template<typename _IIter1, typename _IIter2, typename _OIter,
  575. typename _Predicate>
  576. _OIter
  577. set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  578. __gnu_parallel::sequential_tag);
  579. template<typename _IIter1, typename _IIter2, typename _OIter>
  580. _OIter
  581. set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  582. template<typename _IIter1, typename _IIter2, typename _OIter,
  583. typename _Predicate>
  584. _OIter
  585. set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  586. template<typename _IIter1, typename _IIter2, typename _Predicate,
  587. typename _OIter, typename _IterTag1, typename _IterTag2,
  588. typename _IterTag3>
  589. _OIter
  590. __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  591. _Predicate, _IterTag1, _IterTag2, _IterTag3);
  592. template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  593. typename _Predicate>
  594. _Output_RAIter
  595. __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  596. _Output_RAIter, _Predicate,
  597. random_access_iterator_tag,
  598. random_access_iterator_tag,
  599. random_access_iterator_tag);
  600. template<typename _IIter1, typename _IIter2, typename _OIter>
  601. _OIter
  602. set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  603. __gnu_parallel::sequential_tag);
  604. template<typename _IIter1, typename _IIter2, typename _OIter,
  605. typename _Predicate>
  606. _OIter
  607. set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  608. _Predicate, __gnu_parallel::sequential_tag);
  609. template<typename _IIter1, typename _IIter2, typename _OIter>
  610. _OIter
  611. set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  612. template<typename _IIter1, typename _IIter2, typename _OIter,
  613. typename _Predicate>
  614. _OIter
  615. set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  616. _Predicate);
  617. template<typename _IIter1, typename _IIter2, typename _Predicate,
  618. typename _OIter, typename _IterTag1, typename _IterTag2,
  619. typename _IterTag3>
  620. _OIter
  621. __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
  622. _OIter, _Predicate, _IterTag1, _IterTag2,
  623. _IterTag3);
  624. template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  625. typename _Predicate>
  626. _Output_RAIter
  627. __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  628. _Output_RAIter, _Predicate,
  629. random_access_iterator_tag,
  630. random_access_iterator_tag,
  631. random_access_iterator_tag);
  632. template<typename _IIter1, typename _IIter2, typename _OIter>
  633. _OIter
  634. set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  635. __gnu_parallel::sequential_tag);
  636. template<typename _IIter1, typename _IIter2, typename _OIter,
  637. typename _Predicate>
  638. _OIter
  639. set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  640. __gnu_parallel::sequential_tag);
  641. template<typename _IIter1, typename _IIter2, typename _OIter>
  642. _OIter
  643. set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  644. template<typename _IIter1, typename _IIter2, typename _OIter,
  645. typename _Predicate>
  646. _OIter
  647. set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  648. template<typename _IIter1, typename _IIter2, typename _Predicate,
  649. typename _OIter, typename _IterTag1, typename _IterTag2,
  650. typename _IterTag3>
  651. _OIter
  652. __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  653. _Predicate, _IterTag1, _IterTag2, _IterTag3);
  654. template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  655. typename _Predicate>
  656. _Output_RAIter
  657. __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  658. _Output_RAIter, _Predicate,
  659. random_access_iterator_tag,
  660. random_access_iterator_tag,
  661. random_access_iterator_tag);
  662. template<typename _RAIter>
  663. void
  664. sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  665. template<typename _RAIter, typename _Compare>
  666. void
  667. sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
  668. template<typename _RAIter>
  669. void
  670. sort(_RAIter, _RAIter);
  671. template<typename _RAIter, typename _Compare>
  672. void
  673. sort(_RAIter, _RAIter, _Compare);
  674. template<typename _RAIter>
  675. void
  676. stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  677. template<typename _RAIter, typename _Compare>
  678. void
  679. stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
  680. template<typename _RAIter>
  681. void
  682. stable_sort(_RAIter, _RAIter);
  683. template<typename _RAIter, typename _Compare>
  684. void
  685. stable_sort(_RAIter, _RAIter, _Compare);
  686. template<typename _IIter, typename _OIter>
  687. _OIter
  688. unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
  689. template<typename _IIter, typename _OIter, typename _Predicate>
  690. _OIter
  691. unique_copy(_IIter, _IIter, _OIter, _Predicate,
  692. __gnu_parallel::sequential_tag);
  693. template<typename _IIter, typename _OIter>
  694. _OIter
  695. unique_copy(_IIter, _IIter, _OIter);
  696. template<typename _IIter, typename _OIter, typename _Predicate>
  697. _OIter
  698. unique_copy(_IIter, _IIter, _OIter, _Predicate);
  699. template<typename _IIter, typename _OIter, typename _Predicate,
  700. typename _IterTag1, typename _IterTag2>
  701. _OIter
  702. __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
  703. _IterTag1, _IterTag2);
  704. template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
  705. _RandomAccess_OIter
  706. __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
  707. random_access_iterator_tag, random_access_iterator_tag);
  708. } // end namespace __parallel
  709. } // end namespace std
  710. #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */