1181254a7Smrg // -*- C++ -*- 2181254a7Smrg //===-- algorithm_fwd.h --------------------------------------------------===// 3181254a7Smrg // 4181254a7Smrg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5181254a7Smrg // See https://llvm.org/LICENSE.txt for license information. 6181254a7Smrg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7181254a7Smrg // 8181254a7Smrg //===----------------------------------------------------------------------===// 9181254a7Smrg 10*fb8a8121Smrg #ifndef _PSTL_ALGORITHM_FWD_H 11*fb8a8121Smrg #define _PSTL_ALGORITHM_FWD_H 12181254a7Smrg 13181254a7Smrg #include <type_traits> 14181254a7Smrg #include <utility> 15181254a7Smrg 16181254a7Smrg namespace __pstl 17181254a7Smrg { 18181254a7Smrg namespace __internal 19181254a7Smrg { 20181254a7Smrg 21181254a7Smrg //------------------------------------------------------------------------ 22181254a7Smrg // any_of 23181254a7Smrg //------------------------------------------------------------------------ 24181254a7Smrg 25181254a7Smrg template <class _ForwardIterator, class _Pred> 26181254a7Smrg bool 27181254a7Smrg __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred, 28181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 29181254a7Smrg 30181254a7Smrg template <class _ForwardIterator, class _Pred> 31181254a7Smrg bool 32181254a7Smrg __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred, 33181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 34181254a7Smrg 35181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector> 36181254a7Smrg bool 37181254a7Smrg __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector, 38181254a7Smrg /*parallel=*/std::false_type) noexcept; 39181254a7Smrg 40181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector> 41181254a7Smrg bool 42181254a7Smrg __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector, 43181254a7Smrg /*parallel=*/std::true_type); 44181254a7Smrg 45181254a7Smrg //------------------------------------------------------------------------ 46181254a7Smrg // walk1 (pseudo) 47181254a7Smrg // 48181254a7Smrg // walk1 evaluates f(x) for each dereferenced value x drawn from [first,last) 49181254a7Smrg //------------------------------------------------------------------------ 50181254a7Smrg 51181254a7Smrg template <class _ForwardIterator, class _Function> 52181254a7Smrg void __brick_walk1(_ForwardIterator, _ForwardIterator, _Function, 53181254a7Smrg /*vector=*/std::false_type) noexcept; 54181254a7Smrg 55181254a7Smrg template <class _RandomAccessIterator, class _Function> 56181254a7Smrg void __brick_walk1(_RandomAccessIterator, _RandomAccessIterator, _Function, 57181254a7Smrg /*vector=*/std::true_type) noexcept; 58181254a7Smrg 59181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector> 60181254a7Smrg void 61181254a7Smrg __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector, 62181254a7Smrg /*parallel=*/std::false_type) noexcept; 63181254a7Smrg 64181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector> 65181254a7Smrg void 66181254a7Smrg __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector, 67181254a7Smrg /*parallel=*/std::true_type); 68181254a7Smrg 69181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Brick> 70181254a7Smrg void 71181254a7Smrg __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick, 72181254a7Smrg /*parallel=*/std::false_type) noexcept; 73181254a7Smrg 74181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Brick> 75181254a7Smrg void 76181254a7Smrg __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick, 77181254a7Smrg /*parallel=*/std::true_type); 78181254a7Smrg 79181254a7Smrg //------------------------------------------------------------------------ 80181254a7Smrg // walk1_n 81181254a7Smrg //------------------------------------------------------------------------ 82181254a7Smrg 83181254a7Smrg template <class _ForwardIterator, class _Size, class _Function> 84181254a7Smrg _ForwardIterator __brick_walk1_n(_ForwardIterator, _Size, _Function, 85181254a7Smrg /*_IsVectorTag=*/std::false_type); 86181254a7Smrg 87181254a7Smrg template <class _RandomAccessIterator, class _DifferenceType, class _Function> 88181254a7Smrg _RandomAccessIterator __brick_walk1_n(_RandomAccessIterator, _DifferenceType, _Function, 89181254a7Smrg /*vectorTag=*/std::true_type) noexcept; 90181254a7Smrg 91181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function, class _IsVector> 92181254a7Smrg _ForwardIterator 93181254a7Smrg __pattern_walk1_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Function, _IsVector, 94181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 95181254a7Smrg 96181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Function, class _IsVector> 97181254a7Smrg _RandomAccessIterator 98181254a7Smrg __pattern_walk1_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Function, _IsVector, 99181254a7Smrg /*is_parallel=*/std::true_type); 100181254a7Smrg 101181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Brick> 102181254a7Smrg _ForwardIterator 103181254a7Smrg __pattern_walk_brick_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Brick, 104181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 105181254a7Smrg 106181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Brick> 107181254a7Smrg _RandomAccessIterator 108181254a7Smrg __pattern_walk_brick_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Brick, 109181254a7Smrg /*is_parallel=*/std::true_type); 110181254a7Smrg 111181254a7Smrg //------------------------------------------------------------------------ 112181254a7Smrg // walk2 (pseudo) 113181254a7Smrg // 114181254a7Smrg // walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...) 115181254a7Smrg //------------------------------------------------------------------------ 116181254a7Smrg 117181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Function> 118181254a7Smrg _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, 119181254a7Smrg /*vector=*/std::false_type) noexcept; 120181254a7Smrg 121181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Function> 122181254a7Smrg _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, 123181254a7Smrg /*vector=*/std::true_type) noexcept; 124181254a7Smrg 125181254a7Smrg template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function> 126181254a7Smrg _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function, 127181254a7Smrg /*vector=*/std::false_type) noexcept; 128181254a7Smrg 129181254a7Smrg template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function> 130181254a7Smrg _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function, 131181254a7Smrg /*vector=*/std::true_type) noexcept; 132181254a7Smrg 133181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector> 134181254a7Smrg _ForwardIterator2 135181254a7Smrg __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector, 136181254a7Smrg /*parallel=*/std::false_type) noexcept; 137181254a7Smrg 138181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector> 139181254a7Smrg _ForwardIterator2 140181254a7Smrg __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector, 141181254a7Smrg /*parallel=*/std::true_type); 142181254a7Smrg 143181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function, 144181254a7Smrg class _IsVector> 145181254a7Smrg _ForwardIterator2 146181254a7Smrg __pattern_walk2_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Function, _IsVector, 147181254a7Smrg /*parallel=*/std::false_type) noexcept; 148181254a7Smrg 149181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, 150181254a7Smrg class _Function, class _IsVector> 151181254a7Smrg _RandomAccessIterator2 152181254a7Smrg __pattern_walk2_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Function, _IsVector, 153181254a7Smrg /*parallel=*/std::true_type); 154181254a7Smrg 155181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Brick> 156181254a7Smrg _ForwardIterator2 157181254a7Smrg __pattern_walk2_brick(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Brick, 158181254a7Smrg /*parallel=*/std::false_type) noexcept; 159181254a7Smrg 160181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Brick> 161181254a7Smrg _RandomAccessIterator2 162181254a7Smrg __pattern_walk2_brick(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 163181254a7Smrg _Brick, 164181254a7Smrg /*parallel=*/std::true_type); 165181254a7Smrg 166181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Brick> 167181254a7Smrg _ForwardIterator2 168181254a7Smrg __pattern_walk2_brick_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Brick, 169181254a7Smrg /*parallel=*/std::false_type) noexcept; 170181254a7Smrg 171181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, class _Brick> 172181254a7Smrg _RandomAccessIterator2 173181254a7Smrg __pattern_walk2_brick_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Brick, 174181254a7Smrg /*parallel=*/std::true_type); 175181254a7Smrg 176181254a7Smrg //------------------------------------------------------------------------ 177181254a7Smrg // walk3 (pseudo) 178181254a7Smrg // 179181254a7Smrg // walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...) 180181254a7Smrg //------------------------------------------------------------------------ 181181254a7Smrg 182181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, class _Function> 183181254a7Smrg _ForwardIterator3 __brick_walk3(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, _Function, 184181254a7Smrg /*vector=*/std::false_type) noexcept; 185181254a7Smrg 186181254a7Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _RandomAccessIterator3, class _Function> 187181254a7Smrg _RandomAccessIterator3 __brick_walk3(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 188181254a7Smrg _RandomAccessIterator3, _Function, 189181254a7Smrg /*vector=*/std::true_type) noexcept; 190181254a7Smrg 191181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, 192181254a7Smrg class _Function, class _IsVector> 193181254a7Smrg _ForwardIterator3 194181254a7Smrg __pattern_walk3(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, 195181254a7Smrg _Function, _IsVector, 196181254a7Smrg /*parallel=*/std::false_type) noexcept; 197181254a7Smrg 198181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, 199181254a7Smrg class _RandomAccessIterator3, class _Function, class _IsVector> 200181254a7Smrg _RandomAccessIterator3 201181254a7Smrg __pattern_walk3(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 202181254a7Smrg _RandomAccessIterator3, _Function, _IsVector, /*parallel=*/std::true_type); 203181254a7Smrg 204181254a7Smrg //------------------------------------------------------------------------ 205181254a7Smrg // equal 206181254a7Smrg //------------------------------------------------------------------------ 207181254a7Smrg 208181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 209181254a7Smrg bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate, 210*fb8a8121Smrg /* is_vector = */ std::false_type) noexcept; 211181254a7Smrg 212181254a7Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate> 213181254a7Smrg bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _BinaryPredicate, 214181254a7Smrg /* is_vector = */ std::true_type) noexcept; 215181254a7Smrg 216181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 217181254a7Smrg class _IsVector> 218181254a7Smrg bool 219181254a7Smrg __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate, 220*fb8a8121Smrg _IsVector, /* is_parallel = */ std::false_type) noexcept; 221181254a7Smrg 222181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate, 223181254a7Smrg class _IsVector> 224181254a7Smrg bool 225181254a7Smrg __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 226*fb8a8121Smrg _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type); 227*fb8a8121Smrg 228*fb8a8121Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 229*fb8a8121Smrg bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate, 230*fb8a8121Smrg /* is_vector = */ std::false_type) noexcept; 231*fb8a8121Smrg 232*fb8a8121Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate> 233*fb8a8121Smrg bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _RandomAccessIterator2, 234*fb8a8121Smrg _BinaryPredicate, /* is_vector = */ std::true_type) noexcept; 235*fb8a8121Smrg 236*fb8a8121Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 237*fb8a8121Smrg class _IsVector> 238*fb8a8121Smrg bool 239*fb8a8121Smrg __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 240*fb8a8121Smrg _BinaryPredicate, _IsVector, /* is_parallel = */ std::false_type) noexcept; 241*fb8a8121Smrg 242*fb8a8121Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate, 243*fb8a8121Smrg class _IsVector> 244*fb8a8121Smrg bool 245*fb8a8121Smrg __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 246*fb8a8121Smrg _RandomAccessIterator2, _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type); 247181254a7Smrg 248181254a7Smrg //------------------------------------------------------------------------ 249181254a7Smrg // find_if 250181254a7Smrg //------------------------------------------------------------------------ 251181254a7Smrg 252181254a7Smrg template <class _ForwardIterator, class _Predicate> 253181254a7Smrg _ForwardIterator __brick_find_if(_ForwardIterator, _ForwardIterator, _Predicate, 254181254a7Smrg /*is_vector=*/std::false_type) noexcept; 255181254a7Smrg 256181254a7Smrg template <class _RandomAccessIterator, class _Predicate> 257181254a7Smrg _RandomAccessIterator __brick_find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, 258181254a7Smrg /*is_vector=*/std::true_type) noexcept; 259181254a7Smrg 260181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> 261181254a7Smrg _ForwardIterator 262181254a7Smrg __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector, 263181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 264181254a7Smrg 265181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> 266181254a7Smrg _ForwardIterator 267181254a7Smrg __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector, 268181254a7Smrg /*is_parallel=*/std::true_type); 269181254a7Smrg 270181254a7Smrg //------------------------------------------------------------------------ 271181254a7Smrg // find_end 272181254a7Smrg //------------------------------------------------------------------------ 273181254a7Smrg 274181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 275181254a7Smrg _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 276181254a7Smrg _BinaryPredicate, 277181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 278181254a7Smrg 279181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 280181254a7Smrg _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 281181254a7Smrg _BinaryPredicate, 282181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 283181254a7Smrg 284181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 285181254a7Smrg class _IsVector> 286181254a7Smrg _ForwardIterator1 287181254a7Smrg __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 288181254a7Smrg _BinaryPredicate, _IsVector, 289181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 290181254a7Smrg 291181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 292181254a7Smrg class _IsVector> 293181254a7Smrg _ForwardIterator1 294181254a7Smrg __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 295181254a7Smrg _BinaryPredicate, _IsVector, 296181254a7Smrg /*is_parallel=*/std::true_type) noexcept; 297181254a7Smrg 298181254a7Smrg //------------------------------------------------------------------------ 299181254a7Smrg // find_first_of 300181254a7Smrg //------------------------------------------------------------------------ 301181254a7Smrg 302181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 303181254a7Smrg _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 304181254a7Smrg _BinaryPredicate, 305181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 306181254a7Smrg 307181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 308181254a7Smrg _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 309181254a7Smrg _BinaryPredicate, 310181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 311181254a7Smrg 312181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 313181254a7Smrg class _IsVector> 314181254a7Smrg _ForwardIterator1 315181254a7Smrg __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 316181254a7Smrg _BinaryPredicate, _IsVector, /*is_parallel=*/std::false_type) noexcept; 317181254a7Smrg 318181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 319181254a7Smrg class _IsVector> 320181254a7Smrg _ForwardIterator1 321181254a7Smrg __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 322181254a7Smrg _BinaryPredicate, _IsVector, /*is_parallel=*/std::true_type) noexcept; 323181254a7Smrg 324181254a7Smrg //------------------------------------------------------------------------ 325181254a7Smrg // search 326181254a7Smrg //------------------------------------------------------------------------ 327181254a7Smrg 328181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 329181254a7Smrg _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 330181254a7Smrg _BinaryPredicate, 331181254a7Smrg /*vector=*/std::false_type) noexcept; 332181254a7Smrg 333181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate> 334181254a7Smrg _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 335181254a7Smrg _BinaryPredicate, 336181254a7Smrg /*vector=*/std::true_type) noexcept; 337181254a7Smrg 338181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 339181254a7Smrg class _IsVector> 340181254a7Smrg _ForwardIterator1 341181254a7Smrg __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 342181254a7Smrg _BinaryPredicate, _IsVector, 343181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 344181254a7Smrg 345181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate, 346181254a7Smrg class _IsVector> 347181254a7Smrg _ForwardIterator1 348181254a7Smrg __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 349181254a7Smrg _BinaryPredicate, _IsVector, 350181254a7Smrg /*is_parallel=*/std::true_type) noexcept; 351181254a7Smrg 352181254a7Smrg //------------------------------------------------------------------------ 353181254a7Smrg // search_n 354181254a7Smrg //------------------------------------------------------------------------ 355181254a7Smrg 356181254a7Smrg template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate> 357181254a7Smrg _ForwardIterator 358181254a7Smrg __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, 359181254a7Smrg /*vector=*/std::false_type) noexcept; 360181254a7Smrg 361181254a7Smrg template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate> 362181254a7Smrg _ForwardIterator 363181254a7Smrg __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, 364181254a7Smrg /*vector=*/std::true_type) noexcept; 365181254a7Smrg 366181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate, 367181254a7Smrg class IsVector> 368181254a7Smrg _ForwardIterator 369181254a7Smrg __pattern_search_n(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate, 370181254a7Smrg IsVector, 371181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 372181254a7Smrg 373181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Tp, class _BinaryPredicate, 374181254a7Smrg class IsVector> 375181254a7Smrg _RandomAccessIterator 376181254a7Smrg __pattern_search_n(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Size, const _Tp&, 377181254a7Smrg _BinaryPredicate, IsVector, 378181254a7Smrg /*is_parallel=*/std::true_type) noexcept; 379181254a7Smrg 380181254a7Smrg //------------------------------------------------------------------------ 381181254a7Smrg // copy_n 382181254a7Smrg //------------------------------------------------------------------------ 383181254a7Smrg 384181254a7Smrg template <class _ForwardIterator, class _Size, class _OutputIterator> 385181254a7Smrg _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator, 386181254a7Smrg /*vector=*/std::false_type) noexcept; 387181254a7Smrg 388181254a7Smrg template <class _ForwardIterator, class _Size, class _OutputIterator> 389181254a7Smrg _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator, 390181254a7Smrg /*vector=*/std::true_type) noexcept; 391181254a7Smrg 392181254a7Smrg //------------------------------------------------------------------------ 393181254a7Smrg // copy 394181254a7Smrg //------------------------------------------------------------------------ 395181254a7Smrg 396181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 397181254a7Smrg _OutputIterator __brick_copy(_ForwardIterator, _ForwardIterator, _OutputIterator, 398181254a7Smrg /*vector=*/std::false_type) noexcept; 399181254a7Smrg 400181254a7Smrg template <class _RandomAccessIterator, class _OutputIterator> 401181254a7Smrg _OutputIterator __brick_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, 402181254a7Smrg /*vector=*/std::true_type) noexcept; 403181254a7Smrg 404181254a7Smrg //------------------------------------------------------------------------ 405181254a7Smrg // move 406181254a7Smrg //------------------------------------------------------------------------ 407181254a7Smrg 408181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 409181254a7Smrg _OutputIterator __brick_move(_ForwardIterator, _ForwardIterator, _OutputIterator, 410181254a7Smrg /*vector=*/std::false_type) noexcept; 411181254a7Smrg 412181254a7Smrg template <class _RandomAccessIterator, class _OutputIterator> 413181254a7Smrg _OutputIterator __brick_move(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, 414181254a7Smrg /*vector=*/std::true_type) noexcept; 415181254a7Smrg 416181254a7Smrg //------------------------------------------------------------------------ 417181254a7Smrg // swap_ranges 418181254a7Smrg //------------------------------------------------------------------------ 419181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 420181254a7Smrg _OutputIterator 421181254a7Smrg __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, 422181254a7Smrg /*vector=*/std::false_type) noexcept; 423181254a7Smrg 424181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 425181254a7Smrg _OutputIterator 426181254a7Smrg __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, 427181254a7Smrg /*vector=*/std::true_type) noexcept; 428181254a7Smrg 429181254a7Smrg //------------------------------------------------------------------------ 430181254a7Smrg // copy_if 431181254a7Smrg //------------------------------------------------------------------------ 432181254a7Smrg 433181254a7Smrg template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate> 434181254a7Smrg _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, 435181254a7Smrg /*vector=*/std::false_type) noexcept; 436181254a7Smrg 437181254a7Smrg template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate> 438181254a7Smrg _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, 439181254a7Smrg /*vector=*/std::true_type) noexcept; 440181254a7Smrg 441181254a7Smrg template <class _DifferenceType, class _ForwardIterator, class _UnaryPredicate> 442181254a7Smrg std::pair<_DifferenceType, _DifferenceType> 443181254a7Smrg __brick_calc_mask_1(_ForwardIterator, _ForwardIterator, bool* __restrict, _UnaryPredicate, 444181254a7Smrg /*vector=*/std::false_type) noexcept; 445181254a7Smrg template <class _DifferenceType, class _RandomAccessIterator, class _UnaryPredicate> 446181254a7Smrg std::pair<_DifferenceType, _DifferenceType> 447181254a7Smrg __brick_calc_mask_1(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _UnaryPredicate, 448181254a7Smrg /*vector=*/std::true_type) noexcept; 449181254a7Smrg 450181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 451181254a7Smrg void 452181254a7Smrg __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool*, 453181254a7Smrg /*vector=*/std::false_type) noexcept; 454181254a7Smrg 455181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 456181254a7Smrg void 457181254a7Smrg __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool* __restrict, 458181254a7Smrg /*vector=*/std::true_type) noexcept; 459181254a7Smrg 460181254a7Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2> 461181254a7Smrg void 462181254a7Smrg __brick_partition_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, bool*, 463181254a7Smrg /*vector=*/std::false_type) noexcept; 464181254a7Smrg 465181254a7Smrg template <class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2> 466181254a7Smrg void 467181254a7Smrg __brick_partition_by_mask(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, _OutputIterator2, bool*, 468181254a7Smrg /*vector=*/std::true_type) noexcept; 469181254a7Smrg 470181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _UnaryPredicate, class _IsVector> 471181254a7Smrg _OutputIterator 472181254a7Smrg __pattern_copy_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, _IsVector, 473181254a7Smrg /*parallel=*/std::false_type) noexcept; 474181254a7Smrg 475181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _UnaryPredicate, 476181254a7Smrg class _IsVector> 477181254a7Smrg _OutputIterator 478181254a7Smrg __pattern_copy_if(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _UnaryPredicate, 479181254a7Smrg _IsVector, /*parallel=*/std::true_type); 480181254a7Smrg 481181254a7Smrg //------------------------------------------------------------------------ 482181254a7Smrg // count 483181254a7Smrg //------------------------------------------------------------------------ 484181254a7Smrg 485181254a7Smrg template <class _ForwardIterator, class _Predicate> 486181254a7Smrg typename std::iterator_traits<_ForwardIterator>::difference_type 487181254a7Smrg __brick_count(_ForwardIterator, _ForwardIterator, _Predicate, 488181254a7Smrg /* is_vector = */ std::true_type) noexcept; 489181254a7Smrg 490181254a7Smrg template <class _ForwardIterator, class _Predicate> 491181254a7Smrg typename std::iterator_traits<_ForwardIterator>::difference_type 492181254a7Smrg __brick_count(_ForwardIterator, _ForwardIterator, _Predicate, 493181254a7Smrg /* is_vector = */ std::false_type) noexcept; 494181254a7Smrg 495181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> 496181254a7Smrg typename std::iterator_traits<_ForwardIterator>::difference_type 497181254a7Smrg __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, 498181254a7Smrg /* is_parallel */ std::false_type, _IsVector) noexcept; 499181254a7Smrg 500181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector> 501181254a7Smrg typename std::iterator_traits<_ForwardIterator>::difference_type 502181254a7Smrg __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, 503181254a7Smrg /* is_parallel */ std::true_type, _IsVector); 504181254a7Smrg 505181254a7Smrg //------------------------------------------------------------------------ 506181254a7Smrg // unique 507181254a7Smrg //------------------------------------------------------------------------ 508181254a7Smrg 509181254a7Smrg template <class _ForwardIterator, class _BinaryPredicate> 510181254a7Smrg _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate, 511181254a7Smrg /*is_vector=*/std::false_type) noexcept; 512181254a7Smrg 513181254a7Smrg template <class _ForwardIterator, class _BinaryPredicate> 514181254a7Smrg _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate, 515181254a7Smrg /*is_vector=*/std::true_type) noexcept; 516181254a7Smrg 517181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> 518181254a7Smrg _ForwardIterator 519181254a7Smrg __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector, 520181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 521181254a7Smrg 522181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> 523181254a7Smrg _ForwardIterator 524181254a7Smrg __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector, 525181254a7Smrg /*is_parallel=*/std::true_type) noexcept; 526181254a7Smrg 527181254a7Smrg //------------------------------------------------------------------------ 528181254a7Smrg // unique_copy 529181254a7Smrg //------------------------------------------------------------------------ 530181254a7Smrg 531181254a7Smrg template <class _ForwardIterator, class OutputIterator, class _BinaryPredicate> 532181254a7Smrg OutputIterator __brick_unique_copy(_ForwardIterator, _ForwardIterator, OutputIterator, _BinaryPredicate, 533181254a7Smrg /*vector=*/std::false_type) noexcept; 534181254a7Smrg 535181254a7Smrg template <class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate> 536181254a7Smrg _OutputIterator __brick_unique_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _BinaryPredicate, 537181254a7Smrg /*vector=*/std::true_type) noexcept; 538181254a7Smrg 539*fb8a8121Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _BinaryPredicate, 540*fb8a8121Smrg class _IsVector> 541*fb8a8121Smrg _OutputIterator 542*fb8a8121Smrg __pattern_unique_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _BinaryPredicate, 543*fb8a8121Smrg _IsVector, /*parallel=*/std::false_type) noexcept; 544181254a7Smrg 545181254a7Smrg template <class _ExecutionPolicy, class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate> 546181254a7Smrg _DifferenceType 547181254a7Smrg __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate, 548181254a7Smrg /*vector=*/std::false_type) noexcept; 549181254a7Smrg 550181254a7Smrg template <class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate> 551181254a7Smrg _DifferenceType 552181254a7Smrg __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate, 553181254a7Smrg /*vector=*/std::true_type) noexcept; 554181254a7Smrg 555181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate, 556181254a7Smrg class _IsVector> 557181254a7Smrg _OutputIterator 558181254a7Smrg __pattern_unique_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, 559181254a7Smrg _BinaryPredicate, _IsVector, /*parallel=*/std::true_type); 560181254a7Smrg 561181254a7Smrg //------------------------------------------------------------------------ 562181254a7Smrg // reverse 563181254a7Smrg //------------------------------------------------------------------------ 564181254a7Smrg 565181254a7Smrg template <class _BidirectionalIterator> 566181254a7Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, 567181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 568181254a7Smrg 569181254a7Smrg template <class _BidirectionalIterator> 570181254a7Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, 571181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 572181254a7Smrg 573181254a7Smrg template <class _BidirectionalIterator> 574181254a7Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, 575181254a7Smrg /*is_vector=*/std::false_type) noexcept; 576181254a7Smrg 577181254a7Smrg template <class _BidirectionalIterator> 578181254a7Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, 579181254a7Smrg /*is_vector=*/std::true_type) noexcept; 580181254a7Smrg 581181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector> 582181254a7Smrg void 583181254a7Smrg __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector, 584181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 585181254a7Smrg 586181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector> 587181254a7Smrg void 588181254a7Smrg __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector, 589181254a7Smrg /*is_parallel=*/std::true_type); 590181254a7Smrg 591181254a7Smrg //------------------------------------------------------------------------ 592181254a7Smrg // reverse_copy 593181254a7Smrg //------------------------------------------------------------------------ 594181254a7Smrg 595181254a7Smrg template <class _BidirectionalIterator, class _OutputIterator> 596181254a7Smrg _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator, 597181254a7Smrg /*is_vector=*/std::false_type) noexcept; 598181254a7Smrg 599181254a7Smrg template <class _BidirectionalIterator, class _OutputIterator> 600181254a7Smrg _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator, 601181254a7Smrg /*is_vector=*/std::true_type) noexcept; 602181254a7Smrg 603181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector> 604181254a7Smrg _OutputIterator 605181254a7Smrg __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector, 606181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 607181254a7Smrg 608181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector> 609181254a7Smrg _OutputIterator 610181254a7Smrg __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector, 611181254a7Smrg /*is_parallel=*/std::true_type); 612181254a7Smrg 613181254a7Smrg //------------------------------------------------------------------------ 614181254a7Smrg // rotate 615181254a7Smrg //------------------------------------------------------------------------ 616181254a7Smrg 617181254a7Smrg template <class _ForwardIterator> 618181254a7Smrg _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator, 619181254a7Smrg /*is_vector=*/std::false_type) noexcept; 620181254a7Smrg 621181254a7Smrg template <class _ForwardIterator> 622181254a7Smrg _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator, 623181254a7Smrg /*is_vector=*/std::true_type) noexcept; 624181254a7Smrg 625181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector> 626181254a7Smrg _ForwardIterator 627181254a7Smrg __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector, 628181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 629181254a7Smrg 630181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector> 631181254a7Smrg _ForwardIterator 632181254a7Smrg __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector, 633181254a7Smrg /*is_parallel=*/std::true_type); 634181254a7Smrg 635181254a7Smrg //------------------------------------------------------------------------ 636181254a7Smrg // rotate_copy 637181254a7Smrg //------------------------------------------------------------------------ 638181254a7Smrg 639181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 640181254a7Smrg _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, 641181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 642181254a7Smrg 643181254a7Smrg template <class _ForwardIterator, class _OutputIterator> 644181254a7Smrg _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, 645181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 646181254a7Smrg 647181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector> 648181254a7Smrg _OutputIterator 649181254a7Smrg __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, 650181254a7Smrg _IsVector, 651181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 652181254a7Smrg 653181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector> 654181254a7Smrg _OutputIterator 655181254a7Smrg __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator, 656181254a7Smrg _IsVector, 657181254a7Smrg /*is_parallel=*/std::true_type); 658181254a7Smrg 659181254a7Smrg //------------------------------------------------------------------------ 660181254a7Smrg // is_partitioned 661181254a7Smrg //------------------------------------------------------------------------ 662181254a7Smrg 663181254a7Smrg template <class _ForwardIterator, class _UnaryPredicate> 664181254a7Smrg bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate, 665181254a7Smrg /*is_vector=*/std::false_type) noexcept; 666181254a7Smrg 667181254a7Smrg template <class _ForwardIterator, class _UnaryPredicate> 668181254a7Smrg bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate, 669181254a7Smrg /*is_vector=*/std::true_type) noexcept; 670181254a7Smrg 671181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 672181254a7Smrg bool 673181254a7Smrg __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 674181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 675181254a7Smrg 676181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 677181254a7Smrg bool 678181254a7Smrg __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 679181254a7Smrg /*is_parallel=*/std::true_type); 680181254a7Smrg 681181254a7Smrg //------------------------------------------------------------------------ 682181254a7Smrg // partition 683181254a7Smrg //------------------------------------------------------------------------ 684181254a7Smrg 685181254a7Smrg template <class _ForwardIterator, class _UnaryPredicate> 686181254a7Smrg _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate, 687181254a7Smrg /*is_vector=*/std::false_type) noexcept; 688181254a7Smrg 689181254a7Smrg template <class _ForwardIterator, class _UnaryPredicate> 690181254a7Smrg _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate, 691181254a7Smrg /*is_vector=*/std::true_type) noexcept; 692181254a7Smrg 693181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 694181254a7Smrg _ForwardIterator 695181254a7Smrg __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 696181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 697181254a7Smrg 698181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 699181254a7Smrg _ForwardIterator 700181254a7Smrg __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 701181254a7Smrg /*is_parallel=*/std::true_type); 702181254a7Smrg 703181254a7Smrg //------------------------------------------------------------------------ 704181254a7Smrg // stable_partition 705181254a7Smrg //------------------------------------------------------------------------ 706181254a7Smrg 707181254a7Smrg template <class _BidirectionalIterator, class _UnaryPredicate> 708181254a7Smrg _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, 709181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 710181254a7Smrg 711181254a7Smrg template <class _BidirectionalIterator, class _UnaryPredicate> 712181254a7Smrg _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, 713181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 714181254a7Smrg 715181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector> 716181254a7Smrg _BidirectionalIterator 717181254a7Smrg __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, 718181254a7Smrg _IsVector, 719181254a7Smrg /*is_parallelization=*/std::false_type) noexcept; 720181254a7Smrg 721181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector> 722181254a7Smrg _BidirectionalIterator 723181254a7Smrg __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate, 724181254a7Smrg _IsVector, 725181254a7Smrg /*is_parallelization=*/std::true_type) noexcept; 726181254a7Smrg 727181254a7Smrg //------------------------------------------------------------------------ 728181254a7Smrg // partition_copy 729181254a7Smrg //------------------------------------------------------------------------ 730181254a7Smrg 731181254a7Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate> 732181254a7Smrg std::pair<_OutputIterator1, _OutputIterator2> 733181254a7Smrg __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate, 734181254a7Smrg /*is_vector=*/std::false_type) noexcept; 735181254a7Smrg 736181254a7Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate> 737181254a7Smrg std::pair<_OutputIterator1, _OutputIterator2> 738181254a7Smrg __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate, 739181254a7Smrg /*is_vector=*/std::true_type) noexcept; 740181254a7Smrg 741181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, 742181254a7Smrg class _UnaryPredicate, class _IsVector> 743181254a7Smrg std::pair<_OutputIterator1, _OutputIterator2> 744181254a7Smrg __pattern_partition_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, 745181254a7Smrg _UnaryPredicate, _IsVector, 746181254a7Smrg /*is_parallelization=*/std::false_type) noexcept; 747181254a7Smrg 748181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2, 749181254a7Smrg class _UnaryPredicate, class _IsVector> 750181254a7Smrg std::pair<_OutputIterator1, _OutputIterator2> 751181254a7Smrg __pattern_partition_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, 752181254a7Smrg _OutputIterator2, _UnaryPredicate, _IsVector, 753181254a7Smrg /*is_parallelization=*/std::true_type); 754181254a7Smrg 755181254a7Smrg //------------------------------------------------------------------------ 756181254a7Smrg // sort 757181254a7Smrg //------------------------------------------------------------------------ 758181254a7Smrg 759181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector, 760181254a7Smrg class _IsMoveConstructible> 761181254a7Smrg void 762181254a7Smrg __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/, 763181254a7Smrg /*is_parallel=*/std::false_type, _IsMoveConstructible) noexcept; 764181254a7Smrg 765181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 766181254a7Smrg void 767181254a7Smrg __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/, 768181254a7Smrg /*is_parallel=*/std::true_type, 769181254a7Smrg /*is_move_constructible=*/std::true_type); 770181254a7Smrg 771181254a7Smrg //------------------------------------------------------------------------ 772181254a7Smrg // stable_sort 773181254a7Smrg //------------------------------------------------------------------------ 774181254a7Smrg 775181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 776181254a7Smrg void 777181254a7Smrg __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, 778181254a7Smrg _IsVector /*is_vector*/, 779181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 780181254a7Smrg 781181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 782181254a7Smrg void 783181254a7Smrg __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, 784181254a7Smrg _IsVector /*is_vector*/, 785181254a7Smrg /*is_parallel=*/std::true_type); 786181254a7Smrg 787181254a7Smrg //------------------------------------------------------------------------ 788181254a7Smrg // partial_sort 789181254a7Smrg //------------------------------------------------------------------------ 790181254a7Smrg 791181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 792181254a7Smrg void 793181254a7Smrg __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, 794181254a7Smrg _Compare, _IsVector, 795181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 796181254a7Smrg 797181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 798181254a7Smrg void 799181254a7Smrg __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, 800181254a7Smrg _Compare, _IsVector, 801181254a7Smrg /*is_parallel=*/std::true_type); 802181254a7Smrg 803181254a7Smrg //------------------------------------------------------------------------ 804181254a7Smrg // partial_sort_copy 805181254a7Smrg //------------------------------------------------------------------------ 806181254a7Smrg 807181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector> 808181254a7Smrg _RandomAccessIterator 809181254a7Smrg __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator, 810181254a7Smrg _RandomAccessIterator, _Compare, _IsVector, 811181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 812181254a7Smrg 813181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector> 814181254a7Smrg _RandomAccessIterator 815181254a7Smrg __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator, 816181254a7Smrg _RandomAccessIterator, _Compare, _IsVector, 817181254a7Smrg /*is_parallel=*/std::true_type); 818181254a7Smrg 819181254a7Smrg //------------------------------------------------------------------------ 820181254a7Smrg // adjacent_find 821181254a7Smrg //------------------------------------------------------------------------ 822181254a7Smrg 823181254a7Smrg template <class _ForwardIterator, class _BinaryPredicate> 824181254a7Smrg _ForwardIterator 825181254a7Smrg __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate, 826181254a7Smrg /* IsVector = */ std::true_type, bool) noexcept; 827181254a7Smrg 828181254a7Smrg template <class _ForwardIterator, class _BinaryPredicate> 829181254a7Smrg _ForwardIterator 830181254a7Smrg __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate, 831181254a7Smrg /* IsVector = */ std::false_type, bool) noexcept; 832181254a7Smrg 833181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector> 834181254a7Smrg _ForwardIterator 835181254a7Smrg __pattern_adjacent_find(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, 836181254a7Smrg /* is_parallel */ std::false_type, _IsVector, bool) noexcept; 837181254a7Smrg 838181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _BinaryPredicate, class _IsVector> 839181254a7Smrg _RandomAccessIterator 840181254a7Smrg __pattern_adjacent_find(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _BinaryPredicate, 841181254a7Smrg /* is_parallel */ std::true_type, _IsVector, bool); 842181254a7Smrg 843181254a7Smrg //------------------------------------------------------------------------ 844181254a7Smrg // nth_element 845181254a7Smrg //------------------------------------------------------------------------ 846181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 847181254a7Smrg void 848181254a7Smrg __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare, 849181254a7Smrg _IsVector, 850181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 851181254a7Smrg 852181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 853181254a7Smrg void 854181254a7Smrg __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare, 855181254a7Smrg _IsVector, 856181254a7Smrg /*is_parallel=*/std::true_type) noexcept; 857181254a7Smrg 858181254a7Smrg //------------------------------------------------------------------------ 859181254a7Smrg // fill, fill_n 860181254a7Smrg //------------------------------------------------------------------------ 861181254a7Smrg template <class _ForwardIterator, class _Tp> 862181254a7Smrg void 863181254a7Smrg __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&, 864181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 865181254a7Smrg 866181254a7Smrg template <class _ForwardIterator, class _Tp> 867181254a7Smrg void 868181254a7Smrg __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&, 869181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 870181254a7Smrg 871181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector> 872181254a7Smrg void 873181254a7Smrg __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&, 874181254a7Smrg /*is_parallel=*/std::false_type, _IsVector) noexcept; 875181254a7Smrg 876181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector> 877181254a7Smrg _ForwardIterator 878181254a7Smrg __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&, 879181254a7Smrg /*is_parallel=*/std::true_type, _IsVector); 880181254a7Smrg 881181254a7Smrg template <class _OutputIterator, class _Size, class _Tp> 882181254a7Smrg _OutputIterator 883181254a7Smrg __brick_fill_n(_OutputIterator, _Size, const _Tp&, 884181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 885181254a7Smrg 886181254a7Smrg template <class _OutputIterator, class _Size, class _Tp> 887181254a7Smrg _OutputIterator 888181254a7Smrg __brick_fill_n(_OutputIterator, _Size, const _Tp&, 889181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 890181254a7Smrg 891181254a7Smrg template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector> 892181254a7Smrg _OutputIterator 893181254a7Smrg __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&, 894181254a7Smrg /*is_parallel=*/std::false_type, _IsVector) noexcept; 895181254a7Smrg 896181254a7Smrg template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector> 897181254a7Smrg _OutputIterator 898181254a7Smrg __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&, 899181254a7Smrg /*is_parallel=*/std::true_type, _IsVector); 900181254a7Smrg 901181254a7Smrg //------------------------------------------------------------------------ 902181254a7Smrg // generate, generate_n 903181254a7Smrg //------------------------------------------------------------------------ 904181254a7Smrg 905181254a7Smrg template <class _RandomAccessIterator, class _Generator> 906181254a7Smrg void __brick_generate(_RandomAccessIterator, _RandomAccessIterator, _Generator, 907181254a7Smrg /* is_vector = */ std::true_type) noexcept; 908181254a7Smrg 909181254a7Smrg template <class _ForwardIterator, class _Generator> 910181254a7Smrg void __brick_generate(_ForwardIterator, _ForwardIterator, _Generator, 911181254a7Smrg /* is_vector = */ std::false_type) noexcept; 912181254a7Smrg 913181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector> 914181254a7Smrg void 915181254a7Smrg __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator, 916181254a7Smrg /*is_parallel=*/std::false_type, _IsVector) noexcept; 917181254a7Smrg 918181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector> 919181254a7Smrg _ForwardIterator 920181254a7Smrg __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator, 921181254a7Smrg /*is_parallel=*/std::true_type, _IsVector); 922181254a7Smrg 923181254a7Smrg template <class OutputIterator, class Size, class _Generator> 924181254a7Smrg OutputIterator __brick_generate_n(OutputIterator, Size, _Generator, 925181254a7Smrg /* is_vector = */ std::true_type) noexcept; 926181254a7Smrg 927181254a7Smrg template <class OutputIterator, class Size, class _Generator> 928181254a7Smrg OutputIterator __brick_generate_n(OutputIterator, Size, _Generator, 929181254a7Smrg /* is_vector = */ std::false_type) noexcept; 930181254a7Smrg 931181254a7Smrg template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector> 932181254a7Smrg OutputIterator 933181254a7Smrg __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator, 934181254a7Smrg /*is_parallel=*/std::false_type, _IsVector) noexcept; 935181254a7Smrg 936181254a7Smrg template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector> 937181254a7Smrg OutputIterator 938181254a7Smrg __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator, 939181254a7Smrg /*is_parallel=*/std::true_type, _IsVector); 940181254a7Smrg 941181254a7Smrg //------------------------------------------------------------------------ 942181254a7Smrg // remove 943181254a7Smrg //------------------------------------------------------------------------ 944181254a7Smrg template <class _ForwardIterator, class _UnaryPredicate> 945181254a7Smrg _ForwardIterator __brick_remove_if(_ForwardIterator, _ForwardIterator, _UnaryPredicate, 946181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 947181254a7Smrg 948181254a7Smrg template <class _RandomAccessIterator, class _UnaryPredicate> 949181254a7Smrg _RandomAccessIterator __brick_remove_if(_RandomAccessIterator, _RandomAccessIterator, _UnaryPredicate, 950181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 951181254a7Smrg 952181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 953181254a7Smrg _ForwardIterator 954181254a7Smrg __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 955181254a7Smrg /*is_parallel*/ std::false_type) noexcept; 956181254a7Smrg 957181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector> 958181254a7Smrg _ForwardIterator 959181254a7Smrg __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector, 960181254a7Smrg /*is_parallel*/ std::true_type) noexcept; 961181254a7Smrg 962181254a7Smrg //------------------------------------------------------------------------ 963181254a7Smrg // merge 964181254a7Smrg //------------------------------------------------------------------------ 965181254a7Smrg 966181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 967181254a7Smrg _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 968181254a7Smrg _OutputIterator, _Compare, 969181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 970181254a7Smrg 971181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 972181254a7Smrg _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 973181254a7Smrg _OutputIterator, _Compare, 974181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 975181254a7Smrg 976181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 977181254a7Smrg class _Compare, class _IsVector> 978181254a7Smrg _OutputIterator 979181254a7Smrg __pattern_merge(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 980181254a7Smrg _OutputIterator, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept; 981181254a7Smrg 982181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _OutputIterator, 983181254a7Smrg class _Compare, class _IsVector> 984181254a7Smrg _OutputIterator 985181254a7Smrg __pattern_merge(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 986181254a7Smrg _RandomAccessIterator2, _OutputIterator, _Compare, _IsVector, 987181254a7Smrg /* is_parallel = */ std::true_type); 988181254a7Smrg 989181254a7Smrg //------------------------------------------------------------------------ 990181254a7Smrg // inplace_merge 991181254a7Smrg //------------------------------------------------------------------------ 992181254a7Smrg 993181254a7Smrg template <class _BidirectionalIterator, class _Compare> 994181254a7Smrg void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare, 995181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 996181254a7Smrg 997181254a7Smrg template <class _BidirectionalIterator, class _Compare> 998181254a7Smrg void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare, 999181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1000181254a7Smrg 1001181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector> 1002181254a7Smrg void 1003181254a7Smrg __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, 1004181254a7Smrg _Compare, _IsVector, 1005181254a7Smrg /* is_parallel = */ std::false_type) noexcept; 1006181254a7Smrg 1007181254a7Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector> 1008181254a7Smrg void 1009181254a7Smrg __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, 1010181254a7Smrg _Compare, _IsVector, 1011181254a7Smrg /*is_parallel=*/std::true_type); 1012181254a7Smrg 1013181254a7Smrg //------------------------------------------------------------------------ 1014181254a7Smrg // includes 1015181254a7Smrg //------------------------------------------------------------------------ 1016181254a7Smrg 1017181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> 1018181254a7Smrg bool 1019181254a7Smrg __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1020181254a7Smrg _Compare, _IsVector, 1021181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 1022181254a7Smrg 1023181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> 1024181254a7Smrg bool 1025181254a7Smrg __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1026181254a7Smrg _Compare, _IsVector, 1027181254a7Smrg /*is_parallel=*/std::true_type); 1028181254a7Smrg 1029181254a7Smrg //------------------------------------------------------------------------ 1030181254a7Smrg // set_union 1031181254a7Smrg //------------------------------------------------------------------------ 1032181254a7Smrg 1033181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1034181254a7Smrg _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1035181254a7Smrg _OutputIterator, _Compare, 1036181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 1037181254a7Smrg 1038181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1039181254a7Smrg _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1040181254a7Smrg _OutputIterator, _Compare, 1041181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 1042181254a7Smrg 1043181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1044181254a7Smrg class _Compare, class _IsVector> 1045181254a7Smrg _OutputIterator 1046181254a7Smrg __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1047181254a7Smrg _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept; 1048181254a7Smrg 1049181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1050181254a7Smrg class _Compare, class _IsVector> 1051181254a7Smrg _OutputIterator 1052181254a7Smrg __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1053181254a7Smrg _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); 1054181254a7Smrg 1055181254a7Smrg //------------------------------------------------------------------------ 1056181254a7Smrg // set_intersection 1057181254a7Smrg //------------------------------------------------------------------------ 1058181254a7Smrg 1059181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1060181254a7Smrg _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1061181254a7Smrg _OutputIterator, _Compare, 1062181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 1063181254a7Smrg 1064181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1065181254a7Smrg _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1066181254a7Smrg _OutputIterator, _Compare, 1067181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 1068181254a7Smrg 1069181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1070181254a7Smrg class _Compare, class _IsVector> 1071181254a7Smrg _OutputIterator 1072181254a7Smrg __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1073181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, _IsVector, 1074181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 1075181254a7Smrg 1076181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1077181254a7Smrg class _Compare, class _IsVector> 1078181254a7Smrg _OutputIterator 1079181254a7Smrg __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1080181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); 1081181254a7Smrg 1082181254a7Smrg //------------------------------------------------------------------------ 1083181254a7Smrg // set_difference 1084181254a7Smrg //------------------------------------------------------------------------ 1085181254a7Smrg 1086181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1087181254a7Smrg _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1088181254a7Smrg _OutputIterator, _Compare, 1089181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 1090181254a7Smrg 1091181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1092181254a7Smrg _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1093181254a7Smrg _OutputIterator, _Compare, 1094181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 1095181254a7Smrg 1096181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1097181254a7Smrg class _Compare, class _IsVector> 1098181254a7Smrg _OutputIterator 1099181254a7Smrg __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1100181254a7Smrg _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept; 1101181254a7Smrg 1102181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1103181254a7Smrg class _Compare, class _IsVector> 1104181254a7Smrg _OutputIterator 1105181254a7Smrg __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1106181254a7Smrg _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type); 1107181254a7Smrg 1108181254a7Smrg //------------------------------------------------------------------------ 1109181254a7Smrg // set_symmetric_difference 1110181254a7Smrg //------------------------------------------------------------------------ 1111181254a7Smrg 1112181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1113181254a7Smrg _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1114181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, 1115181254a7Smrg /*__is_vector=*/std::false_type) noexcept; 1116181254a7Smrg 1117181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare> 1118181254a7Smrg _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1119181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, 1120181254a7Smrg /*__is_vector=*/std::true_type) noexcept; 1121181254a7Smrg 1122181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1123181254a7Smrg class _Compare, class _IsVector> 1124181254a7Smrg _OutputIterator 1125181254a7Smrg __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1126181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, _IsVector, 1127181254a7Smrg /*is_parallel=*/std::false_type) noexcept; 1128181254a7Smrg 1129181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, 1130181254a7Smrg class _Compare, class _IsVector> 1131181254a7Smrg _OutputIterator 1132181254a7Smrg __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1133181254a7Smrg _ForwardIterator2, _OutputIterator, _Compare, _IsVector, 1134181254a7Smrg /*is_parallel=*/std::true_type); 1135181254a7Smrg 1136181254a7Smrg //------------------------------------------------------------------------ 1137181254a7Smrg // is_heap_until 1138181254a7Smrg //------------------------------------------------------------------------ 1139181254a7Smrg 1140181254a7Smrg template <class _RandomAccessIterator, class _Compare> 1141181254a7Smrg _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare, 1142181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 1143181254a7Smrg 1144181254a7Smrg template <class _RandomAccessIterator, class _Compare> 1145181254a7Smrg _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare, 1146181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1147181254a7Smrg 1148181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 1149181254a7Smrg _RandomAccessIterator 1150181254a7Smrg __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, 1151181254a7Smrg /* is_parallel = */ std::false_type) noexcept; 1152181254a7Smrg 1153181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector> 1154181254a7Smrg _RandomAccessIterator 1155181254a7Smrg __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, 1156181254a7Smrg /* is_parallel = */ std::true_type) noexcept; 1157181254a7Smrg 1158181254a7Smrg //------------------------------------------------------------------------ 1159181254a7Smrg // min_element 1160181254a7Smrg //------------------------------------------------------------------------ 1161181254a7Smrg 1162181254a7Smrg template <typename _ForwardIterator, typename _Compare> 1163181254a7Smrg _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare, 1164181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 1165181254a7Smrg 1166181254a7Smrg template <typename _ForwardIterator, typename _Compare> 1167181254a7Smrg _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare, 1168181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1169181254a7Smrg 1170181254a7Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> 1171181254a7Smrg _ForwardIterator 1172181254a7Smrg __pattern_min_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, 1173181254a7Smrg /* is_parallel = */ std::false_type) noexcept; 1174181254a7Smrg 1175181254a7Smrg template <typename _ExecutionPolicy, typename _RandomAccessIterator, typename _Compare, typename _IsVector> 1176181254a7Smrg _RandomAccessIterator 1177181254a7Smrg __pattern_min_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector, 1178181254a7Smrg /* is_parallel = */ std::true_type); 1179181254a7Smrg 1180181254a7Smrg //------------------------------------------------------------------------ 1181181254a7Smrg // minmax_element 1182181254a7Smrg //------------------------------------------------------------------------ 1183181254a7Smrg 1184181254a7Smrg template <typename _ForwardIterator, typename _Compare> 1185181254a7Smrg std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare, 1186181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 1187181254a7Smrg 1188181254a7Smrg template <typename _ForwardIterator, typename _Compare> 1189181254a7Smrg std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare, 1190181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1191181254a7Smrg 1192181254a7Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> 1193181254a7Smrg std::pair<_ForwardIterator, _ForwardIterator> 1194181254a7Smrg __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, 1195181254a7Smrg /* is_parallel = */ std::false_type) noexcept; 1196181254a7Smrg 1197181254a7Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector> 1198181254a7Smrg std::pair<_ForwardIterator, _ForwardIterator> 1199181254a7Smrg __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector, 1200181254a7Smrg /* is_parallel = */ std::true_type); 1201181254a7Smrg 1202181254a7Smrg //------------------------------------------------------------------------ 1203181254a7Smrg // mismatch 1204181254a7Smrg //------------------------------------------------------------------------ 1205181254a7Smrg 1206181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate> 1207181254a7Smrg std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1, 1208181254a7Smrg _ForwardIterator2, _ForwardIterator2, _Predicate, 1209181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 1210181254a7Smrg 1211181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate> 1212181254a7Smrg std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1, 1213181254a7Smrg _ForwardIterator2, _ForwardIterator2, _Predicate, 1214181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1215181254a7Smrg 1216181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate, class _IsVector> 1217181254a7Smrg std::pair<_ForwardIterator1, _ForwardIterator2> 1218181254a7Smrg __pattern_mismatch(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1219181254a7Smrg _Predicate, _IsVector, 1220181254a7Smrg /* is_parallel = */ std::false_type) noexcept; 1221181254a7Smrg 1222181254a7Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Predicate, 1223181254a7Smrg class _IsVector> 1224181254a7Smrg std::pair<_RandomAccessIterator1, _RandomAccessIterator2> 1225181254a7Smrg __pattern_mismatch(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, 1226181254a7Smrg _RandomAccessIterator2, _Predicate, _IsVector, /* is_parallel = */ std::true_type) noexcept; 1227181254a7Smrg 1228181254a7Smrg //------------------------------------------------------------------------ 1229181254a7Smrg // lexicographical_compare 1230181254a7Smrg //------------------------------------------------------------------------ 1231181254a7Smrg 1232181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Compare> 1233181254a7Smrg bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1234181254a7Smrg _Compare, 1235181254a7Smrg /* __is_vector = */ std::false_type) noexcept; 1236181254a7Smrg 1237181254a7Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Compare> 1238181254a7Smrg bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, 1239181254a7Smrg _Compare, 1240181254a7Smrg /* __is_vector = */ std::true_type) noexcept; 1241181254a7Smrg 1242181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> 1243181254a7Smrg bool 1244181254a7Smrg __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1245181254a7Smrg _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept; 1246181254a7Smrg 1247181254a7Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector> 1248181254a7Smrg bool 1249181254a7Smrg __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, 1250181254a7Smrg _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::true_type) noexcept; 1251181254a7Smrg 1252181254a7Smrg } // namespace __internal 1253181254a7Smrg } // namespace __pstl 1254*fb8a8121Smrg #endif /* _PSTL_ALGORITHM_FWD_H */ 1255