| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336 |
- // -*- C++ -*-
- //===-- algorithm_fwd.h --------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef __PSTL_algorithm_fwd_H
- #define __PSTL_algorithm_fwd_H
- #include <type_traits>
- #include <utility>
- namespace __pstl
- {
- namespace __internal
- {
- //------------------------------------------------------------------------
- // any_of
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Pred>
- bool
- __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _Pred>
- bool
- __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector>
- bool
- __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector>
- bool
- __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector,
- /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // walk1 (pseudo)
- //
- // walk1 evaluates f(x) for each dereferenced value x drawn from [first,last)
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Function>
- void __brick_walk1(_ForwardIterator, _ForwardIterator, _Function,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _Function>
- void __brick_walk1(_RandomAccessIterator, _RandomAccessIterator, _Function,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector>
- void
- __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector>
- void
- __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector,
- /*parallel=*/std::true_type);
- #endif
- template <class _ExecutionPolicy, class _ForwardIterator, class _Brick>
- void
- __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Brick>
- void
- __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick,
- /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // walk1_n
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Size, class _Function>
- _ForwardIterator __brick_walk1_n(_ForwardIterator, _Size, _Function,
- /*_IsVectorTag=*/std::false_type);
- template <class _RandomAccessIterator, class _DifferenceType, class _Function>
- _RandomAccessIterator __brick_walk1_n(_RandomAccessIterator, _DifferenceType, _Function,
- /*vectorTag=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function, class _IsVector>
- _ForwardIterator
- __pattern_walk1_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Function, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Function, class _IsVector>
- _RandomAccessIterator
- __pattern_walk1_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Function, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Brick>
- _ForwardIterator
- __pattern_walk_brick_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Brick,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Brick>
- _RandomAccessIterator
- __pattern_walk_brick_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Brick,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // walk2 (pseudo)
- //
- // walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...)
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _Function>
- _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _Function>
- _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function,
- /*vector=*/std::true_type) noexcept;
- template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function>
- _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function>
- _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector>
- _ForwardIterator2
- __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector>
- _ForwardIterator2
- __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector,
- /*parallel=*/std::true_type);
- #endif
- template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function,
- class _IsVector>
- _ForwardIterator2
- __pattern_walk2_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Function, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2,
- class _Function, class _IsVector>
- _RandomAccessIterator2
- __pattern_walk2_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Function, _IsVector,
- /*parallel=*/std::true_type);
- #endif
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Brick>
- _ForwardIterator2
- __pattern_walk2_brick(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Brick,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Brick>
- _RandomAccessIterator2
- __pattern_walk2_brick(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _Brick,
- /*parallel=*/std::true_type);
- #endif
- template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Brick>
- _ForwardIterator2
- __pattern_walk2_brick_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Brick,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, class _Brick>
- _RandomAccessIterator2
- __pattern_walk2_brick_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Brick,
- /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // walk3 (pseudo)
- //
- // walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...)
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, class _Function>
- _ForwardIterator3 __brick_walk3(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, _Function,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _RandomAccessIterator3, class _Function>
- _RandomAccessIterator3 __brick_walk3(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _RandomAccessIterator3, _Function,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3,
- class _Function, class _IsVector>
- _ForwardIterator3
- __pattern_walk3(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3,
- _Function, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2,
- class _RandomAccessIterator3, class _Function, class _IsVector>
- _RandomAccessIterator3
- __pattern_walk3(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _RandomAccessIterator3, _Function, _IsVector, /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // equal
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate,
- /* IsVector = */ std::false_type) noexcept;
- template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate>
- bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _BinaryPredicate,
- /* is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- bool
- __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate,
- _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate,
- class _IsVector>
- bool
- __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // find_if
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Predicate>
- _ForwardIterator __brick_find_if(_ForwardIterator, _ForwardIterator, _Predicate,
- /*is_vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _Predicate>
- _RandomAccessIterator __brick_find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
- _ForwardIterator
- __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
- _ForwardIterator
- __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // find_end
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // find_first_of
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector, /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector, /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // search
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
- _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
- class _IsVector>
- _ForwardIterator1
- __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // search_n
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
- _ForwardIterator
- __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
- _ForwardIterator
- __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate,
- class IsVector>
- _ForwardIterator
- __pattern_search_n(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
- IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Tp, class _BinaryPredicate,
- class IsVector>
- _RandomAccessIterator
- __pattern_search_n(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Size, const _Tp&,
- _BinaryPredicate, IsVector,
- /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // copy_n
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Size, class _OutputIterator>
- _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _Size, class _OutputIterator>
- _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator,
- /*vector=*/std::true_type) noexcept;
- //------------------------------------------------------------------------
- // copy
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator __brick_copy(_ForwardIterator, _ForwardIterator, _OutputIterator,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _OutputIterator>
- _OutputIterator __brick_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
- /*vector=*/std::true_type) noexcept;
- //------------------------------------------------------------------------
- // move
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator __brick_move(_ForwardIterator, _ForwardIterator, _OutputIterator,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _OutputIterator>
- _OutputIterator __brick_move(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
- /*vector=*/std::true_type) noexcept;
- //------------------------------------------------------------------------
- // swap_ranges
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator
- __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator
- __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result,
- /*vector=*/std::true_type) noexcept;
- //------------------------------------------------------------------------
- // copy_if
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate>
- _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate>
- _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate,
- /*vector=*/std::true_type) noexcept;
- template <class _DifferenceType, class _ForwardIterator, class _UnaryPredicate>
- std::pair<_DifferenceType, _DifferenceType>
- __brick_calc_mask_1(_ForwardIterator, _ForwardIterator, bool* __restrict, _UnaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _DifferenceType, class _RandomAccessIterator, class _UnaryPredicate>
- std::pair<_DifferenceType, _DifferenceType>
- __brick_calc_mask_1(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _UnaryPredicate,
- /*vector=*/std::true_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator>
- void
- __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool*,
- /*vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator>
- void
- __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool* __restrict,
- /*vector=*/std::true_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2>
- void
- __brick_partition_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, bool*,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2>
- void
- __brick_partition_by_mask(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, _OutputIterator2, bool*,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _UnaryPredicate, class _IsVector>
- _OutputIterator
- __pattern_copy_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _UnaryPredicate,
- class _IsVector>
- _OutputIterator
- __pattern_copy_if(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _UnaryPredicate,
- _IsVector, /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // count
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Predicate>
- typename std::iterator_traits<_ForwardIterator>::difference_type
- __brick_count(_ForwardIterator, _ForwardIterator, _Predicate,
- /* is_vector = */ std::true_type) noexcept;
- template <class _ForwardIterator, class _Predicate>
- typename std::iterator_traits<_ForwardIterator>::difference_type
- __brick_count(_ForwardIterator, _ForwardIterator, _Predicate,
- /* is_vector = */ std::false_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
- typename std::iterator_traits<_ForwardIterator>::difference_type
- __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate,
- /* is_parallel */ std::false_type, _IsVector) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
- typename std::iterator_traits<_ForwardIterator>::difference_type
- __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate,
- /* is_parallel */ std::true_type, _IsVector);
- #endif
- //------------------------------------------------------------------------
- // unique
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _BinaryPredicate>
- _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
- /*is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _BinaryPredicate>
- _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // unique_copy
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class OutputIterator, class _BinaryPredicate>
- OutputIterator __brick_unique_copy(_ForwardIterator, _ForwardIterator, OutputIterator, _BinaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate>
- _OutputIterator __brick_unique_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _BinaryPredicate,
- /*vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class OutputIterator, class _BinaryPredicate, class _IsVector>
- OutputIterator __pattern_unique_copy(_ForwardIterator, _ForwardIterator, OutputIterator, _BinaryPredicate, _IsVector,
- /*parallel=*/std::false_type) noexcept;
- template <class _ExecutionPolicy, class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate>
- _DifferenceType
- __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate,
- /*vector=*/std::false_type) noexcept;
- template <class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate>
- _DifferenceType
- __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate,
- /*vector=*/std::true_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate,
- class _IsVector>
- _OutputIterator
- __pattern_unique_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
- _BinaryPredicate, _IsVector, /*parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // reverse
- //------------------------------------------------------------------------
- template <class _BidirectionalIterator>
- void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _BidirectionalIterator>
- void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _BidirectionalIterator>
- void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
- /*is_vector=*/std::false_type) noexcept;
- template <class _BidirectionalIterator>
- void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector>
- void
- __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector>
- void
- __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // reverse_copy
- //------------------------------------------------------------------------
- template <class _BidirectionalIterator, class _OutputIterator>
- _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator,
- /*is_vector=*/std::false_type) noexcept;
- template <class _BidirectionalIterator, class _OutputIterator>
- _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector>
- _OutputIterator
- __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector>
- _OutputIterator
- __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // rotate
- //------------------------------------------------------------------------
- template <class _ForwardIterator>
- _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
- /*is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator>
- _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector>
- _ForwardIterator
- __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector>
- _ForwardIterator
- __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // rotate_copy
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator>
- _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector>
- _OutputIterator
- __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
- _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector>
- _OutputIterator
- __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
- _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // is_partitioned
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _UnaryPredicate>
- bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
- /*is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _UnaryPredicate>
- bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- bool
- __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- bool
- __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // partition
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _UnaryPredicate>
- _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
- /*is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _UnaryPredicate>
- _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // stable_partition
- //------------------------------------------------------------------------
- template <class _BidirectionalIterator, class _UnaryPredicate>
- _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _BidirectionalIterator, class _UnaryPredicate>
- _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector>
- _BidirectionalIterator
- __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
- _IsVector,
- /*is_parallelization=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector>
- _BidirectionalIterator
- __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
- _IsVector,
- /*is_parallelization=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // partition_copy
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate>
- std::pair<_OutputIterator1, _OutputIterator2>
- __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate,
- /*is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate>
- std::pair<_OutputIterator1, _OutputIterator2>
- __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate,
- /*is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator1, class _OutputIterator2,
- class _UnaryPredicate, class _IsVector>
- std::pair<_OutputIterator1, _OutputIterator2>
- __pattern_partition_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2,
- _UnaryPredicate, _IsVector,
- /*is_parallelization=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2,
- class _UnaryPredicate, class _IsVector>
- std::pair<_OutputIterator1, _OutputIterator2>
- __pattern_partition_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator1,
- _OutputIterator2, _UnaryPredicate, _IsVector,
- /*is_parallelization=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // sort
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector,
- class _IsMoveConstructible>
- void
- __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/,
- /*is_parallel=*/std::false_type, _IsMoveConstructible) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/,
- /*is_parallel=*/std::true_type,
- /*is_move_constructible=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // stable_sort
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare,
- _IsVector /*is_vector*/,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare,
- _IsVector /*is_vector*/,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // partial_sort
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator,
- _Compare, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator,
- _Compare, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // partial_sort_copy
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector>
- _RandomAccessIterator
- __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator,
- _RandomAccessIterator, _Compare, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector>
- _RandomAccessIterator
- __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator,
- _RandomAccessIterator, _Compare, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // adjacent_find
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _BinaryPredicate>
- _ForwardIterator
- __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
- /* IsVector = */ std::true_type, bool) noexcept;
- template <class _ForwardIterator, class _BinaryPredicate>
- _ForwardIterator
- __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
- /* IsVector = */ std::false_type, bool) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_adjacent_find(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate,
- /* is_parallel */ std::false_type, _IsVector, bool) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _BinaryPredicate, class _IsVector>
- _RandomAccessIterator
- __pattern_adjacent_find(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _BinaryPredicate,
- /* is_parallel */ std::true_type, _IsVector, bool);
- #endif
- //------------------------------------------------------------------------
- // nth_element
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare,
- _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- void
- __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare,
- _IsVector,
- /*is_parallel=*/std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // fill, fill_n
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _Tp>
- void
- __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ForwardIterator, class _Tp>
- void
- __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector>
- void
- __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&,
- /*is_parallel=*/std::false_type, _IsVector) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector>
- _ForwardIterator
- __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&,
- /*is_parallel=*/std::true_type, _IsVector);
- #endif
- template <class _OutputIterator, class _Size, class _Tp>
- _OutputIterator
- __brick_fill_n(_OutputIterator, _Size, const _Tp&,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _OutputIterator, class _Size, class _Tp>
- _OutputIterator
- __brick_fill_n(_OutputIterator, _Size, const _Tp&,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector>
- _OutputIterator
- __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&,
- /*is_parallel=*/std::false_type, _IsVector) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector>
- _OutputIterator
- __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&,
- /*is_parallel=*/std::true_type, _IsVector);
- #endif
- //------------------------------------------------------------------------
- // generate, generate_n
- //------------------------------------------------------------------------
- template <class _RandomAccessIterator, class _Generator>
- void __brick_generate(_RandomAccessIterator, _RandomAccessIterator, _Generator,
- /* is_vector = */ std::true_type) noexcept;
- template <class _ForwardIterator, class _Generator>
- void __brick_generate(_ForwardIterator, _ForwardIterator, _Generator,
- /* is_vector = */ std::false_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector>
- void
- __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator,
- /*is_parallel=*/std::false_type, _IsVector) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector>
- _ForwardIterator
- __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator,
- /*is_parallel=*/std::true_type, _IsVector);
- #endif
- template <class OutputIterator, class Size, class _Generator>
- OutputIterator __brick_generate_n(OutputIterator, Size, _Generator,
- /* is_vector = */ std::true_type) noexcept;
- template <class OutputIterator, class Size, class _Generator>
- OutputIterator __brick_generate_n(OutputIterator, Size, _Generator,
- /* is_vector = */ std::false_type) noexcept;
- template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector>
- OutputIterator
- __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator,
- /*is_parallel=*/std::false_type, _IsVector) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector>
- OutputIterator
- __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator,
- /*is_parallel=*/std::true_type, _IsVector);
- #endif
- //------------------------------------------------------------------------
- // remove
- //------------------------------------------------------------------------
- template <class _ForwardIterator, class _UnaryPredicate>
- _ForwardIterator __brick_remove_if(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _RandomAccessIterator, class _UnaryPredicate>
- _RandomAccessIterator __brick_remove_if(_RandomAccessIterator, _RandomAccessIterator, _UnaryPredicate,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel*/ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
- _ForwardIterator
- __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
- /*is_parallel*/ std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // merge
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_merge(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_merge(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _RandomAccessIterator2, _OutputIterator, _Compare, _IsVector,
- /* is_parallel = */ std::true_type);
- #endif
- //------------------------------------------------------------------------
- // inplace_merge
- //------------------------------------------------------------------------
- template <class _BidirectionalIterator, class _Compare>
- void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _BidirectionalIterator, class _Compare>
- void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector>
- void
- __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
- _Compare, _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector>
- void
- __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
- _Compare, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // includes
- //------------------------------------------------------------------------
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
- bool
- __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _Compare, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
- bool
- __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _Compare, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // set_union
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // set_intersection
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // set_difference
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // set_symmetric_difference
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare,
- /*__is_vector=*/std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
- _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare,
- /*__is_vector=*/std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
- /*is_parallel=*/std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
- class _Compare, class _IsVector>
- _OutputIterator
- __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
- /*is_parallel=*/std::true_type);
- #endif
- //------------------------------------------------------------------------
- // is_heap_until
- //------------------------------------------------------------------------
- template <class _RandomAccessIterator, class _Compare>
- _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _RandomAccessIterator, class _Compare>
- _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- _RandomAccessIterator
- __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
- _RandomAccessIterator
- __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
- /* is_parallel = */ std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // min_element
- //------------------------------------------------------------------------
- template <typename _ForwardIterator, typename _Compare>
- _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <typename _ForwardIterator, typename _Compare>
- _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
- _ForwardIterator
- __pattern_min_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <typename _ExecutionPolicy, typename _RandomAccessIterator, typename _Compare, typename _IsVector>
- _RandomAccessIterator
- __pattern_min_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
- /* is_parallel = */ std::true_type);
- #endif
- //------------------------------------------------------------------------
- // minmax_element
- //------------------------------------------------------------------------
- template <typename _ForwardIterator, typename _Compare>
- std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <typename _ForwardIterator, typename _Compare>
- std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
- std::pair<_ForwardIterator, _ForwardIterator>
- __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
- std::pair<_ForwardIterator, _ForwardIterator>
- __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
- /* is_parallel = */ std::true_type);
- #endif
- //------------------------------------------------------------------------
- // mismatch
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
- std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1,
- _ForwardIterator2, _ForwardIterator2, _Predicate,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
- std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1,
- _ForwardIterator2, _ForwardIterator2, _Predicate,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate, class _IsVector>
- std::pair<_ForwardIterator1, _ForwardIterator2>
- __pattern_mismatch(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _Predicate, _IsVector,
- /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Predicate,
- class _IsVector>
- std::pair<_RandomAccessIterator1, _RandomAccessIterator2>
- __pattern_mismatch(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
- _RandomAccessIterator2, _Predicate, _IsVector, /* is_parallel = */ std::true_type) noexcept;
- #endif
- //------------------------------------------------------------------------
- // lexicographical_compare
- //------------------------------------------------------------------------
- template <class _ForwardIterator1, class _ForwardIterator2, class _Compare>
- bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _Compare,
- /* __is_vector = */ std::false_type) noexcept;
- template <class _ForwardIterator1, class _ForwardIterator2, class _Compare>
- bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
- _Compare,
- /* __is_vector = */ std::true_type) noexcept;
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
- bool
- __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept;
- #if __PSTL_USE_PAR_POLICIES
- template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
- bool
- __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
- _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::true_type) noexcept;
- #endif
- } // namespace __internal
- } // namespace __pstl
- #endif /* __PSTL_algorithm_fwd_H */
|