xref: /netbsd-src/external/gpl3/gcc/dist/libstdc++-v3/include/pstl/algorithm_fwd.h (revision fb8a8121f28072308659629b86cfb7c449bd93e1)
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