xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/pstl/algorithm_fwd.h (revision 4c3eb207d36f67d31994830c0a694161fc1ca39b)
1627f7eb2Smrg // -*- C++ -*-
2627f7eb2Smrg //===-- algorithm_fwd.h --------------------------------------------------===//
3627f7eb2Smrg //
4627f7eb2Smrg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5627f7eb2Smrg // See https://llvm.org/LICENSE.txt for license information.
6627f7eb2Smrg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7627f7eb2Smrg //
8627f7eb2Smrg //===----------------------------------------------------------------------===//
9627f7eb2Smrg 
10*4c3eb207Smrg #ifndef _PSTL_ALGORITHM_FWD_H
11*4c3eb207Smrg #define _PSTL_ALGORITHM_FWD_H
12627f7eb2Smrg 
13627f7eb2Smrg #include <type_traits>
14627f7eb2Smrg #include <utility>
15627f7eb2Smrg 
16627f7eb2Smrg namespace __pstl
17627f7eb2Smrg {
18627f7eb2Smrg namespace __internal
19627f7eb2Smrg {
20627f7eb2Smrg 
21627f7eb2Smrg //------------------------------------------------------------------------
22627f7eb2Smrg // any_of
23627f7eb2Smrg //------------------------------------------------------------------------
24627f7eb2Smrg 
25627f7eb2Smrg template <class _ForwardIterator, class _Pred>
26627f7eb2Smrg bool
27627f7eb2Smrg __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred,
28627f7eb2Smrg                /*__is_vector=*/std::false_type) noexcept;
29627f7eb2Smrg 
30627f7eb2Smrg template <class _ForwardIterator, class _Pred>
31627f7eb2Smrg bool
32627f7eb2Smrg __brick_any_of(const _ForwardIterator, const _ForwardIterator, _Pred,
33627f7eb2Smrg                /*__is_vector=*/std::true_type) noexcept;
34627f7eb2Smrg 
35627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector>
36627f7eb2Smrg bool
37627f7eb2Smrg __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector,
38627f7eb2Smrg                  /*parallel=*/std::false_type) noexcept;
39627f7eb2Smrg 
40627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Pred, class _IsVector>
41627f7eb2Smrg bool
42627f7eb2Smrg __pattern_any_of(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Pred, _IsVector,
43627f7eb2Smrg                  /*parallel=*/std::true_type);
44627f7eb2Smrg 
45627f7eb2Smrg //------------------------------------------------------------------------
46627f7eb2Smrg // walk1 (pseudo)
47627f7eb2Smrg //
48627f7eb2Smrg // walk1 evaluates f(x) for each dereferenced value x drawn from [first,last)
49627f7eb2Smrg //------------------------------------------------------------------------
50627f7eb2Smrg 
51627f7eb2Smrg template <class _ForwardIterator, class _Function>
52627f7eb2Smrg void __brick_walk1(_ForwardIterator, _ForwardIterator, _Function,
53627f7eb2Smrg                    /*vector=*/std::false_type) noexcept;
54627f7eb2Smrg 
55627f7eb2Smrg template <class _RandomAccessIterator, class _Function>
56627f7eb2Smrg void __brick_walk1(_RandomAccessIterator, _RandomAccessIterator, _Function,
57627f7eb2Smrg                    /*vector=*/std::true_type) noexcept;
58627f7eb2Smrg 
59627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector>
60627f7eb2Smrg void
61627f7eb2Smrg __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector,
62627f7eb2Smrg                 /*parallel=*/std::false_type) noexcept;
63627f7eb2Smrg 
64627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Function, class _IsVector>
65627f7eb2Smrg void
66627f7eb2Smrg __pattern_walk1(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Function, _IsVector,
67627f7eb2Smrg                 /*parallel=*/std::true_type);
68627f7eb2Smrg 
69627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Brick>
70627f7eb2Smrg void
71627f7eb2Smrg __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick,
72627f7eb2Smrg                      /*parallel=*/std::false_type) noexcept;
73627f7eb2Smrg 
74627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Brick>
75627f7eb2Smrg void
76627f7eb2Smrg __pattern_walk_brick(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Brick,
77627f7eb2Smrg                      /*parallel=*/std::true_type);
78627f7eb2Smrg 
79627f7eb2Smrg //------------------------------------------------------------------------
80627f7eb2Smrg // walk1_n
81627f7eb2Smrg //------------------------------------------------------------------------
82627f7eb2Smrg 
83627f7eb2Smrg template <class _ForwardIterator, class _Size, class _Function>
84627f7eb2Smrg _ForwardIterator __brick_walk1_n(_ForwardIterator, _Size, _Function,
85627f7eb2Smrg                                  /*_IsVectorTag=*/std::false_type);
86627f7eb2Smrg 
87627f7eb2Smrg template <class _RandomAccessIterator, class _DifferenceType, class _Function>
88627f7eb2Smrg _RandomAccessIterator __brick_walk1_n(_RandomAccessIterator, _DifferenceType, _Function,
89627f7eb2Smrg                                       /*vectorTag=*/std::true_type) noexcept;
90627f7eb2Smrg 
91627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function, class _IsVector>
92627f7eb2Smrg _ForwardIterator
93627f7eb2Smrg __pattern_walk1_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Function, _IsVector,
94627f7eb2Smrg                   /*is_parallel=*/std::false_type) noexcept;
95627f7eb2Smrg 
96627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Function, class _IsVector>
97627f7eb2Smrg _RandomAccessIterator
98627f7eb2Smrg __pattern_walk1_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Function, _IsVector,
99627f7eb2Smrg                   /*is_parallel=*/std::true_type);
100627f7eb2Smrg 
101627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Brick>
102627f7eb2Smrg _ForwardIterator
103627f7eb2Smrg __pattern_walk_brick_n(_ExecutionPolicy&&, _ForwardIterator, _Size, _Brick,
104627f7eb2Smrg                        /*is_parallel=*/std::false_type) noexcept;
105627f7eb2Smrg 
106627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Brick>
107627f7eb2Smrg _RandomAccessIterator
108627f7eb2Smrg __pattern_walk_brick_n(_ExecutionPolicy&&, _RandomAccessIterator, _Size, _Brick,
109627f7eb2Smrg                        /*is_parallel=*/std::true_type);
110627f7eb2Smrg 
111627f7eb2Smrg //------------------------------------------------------------------------
112627f7eb2Smrg // walk2 (pseudo)
113627f7eb2Smrg //
114627f7eb2Smrg // walk2 evaluates f(x,y) for deferenced values (x,y) drawn from [first1,last1) and [first2,...)
115627f7eb2Smrg //------------------------------------------------------------------------
116627f7eb2Smrg 
117627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Function>
118627f7eb2Smrg _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function,
119627f7eb2Smrg                                 /*vector=*/std::false_type) noexcept;
120627f7eb2Smrg 
121627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Function>
122627f7eb2Smrg _ForwardIterator2 __brick_walk2(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function,
123627f7eb2Smrg                                 /*vector=*/std::true_type) noexcept;
124627f7eb2Smrg 
125627f7eb2Smrg template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function>
126627f7eb2Smrg _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function,
127627f7eb2Smrg                                   /*vector=*/std::false_type) noexcept;
128627f7eb2Smrg 
129627f7eb2Smrg template <class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function>
130627f7eb2Smrg _ForwardIterator2 __brick_walk2_n(_ForwardIterator1, _Size, _ForwardIterator2, _Function,
131627f7eb2Smrg                                   /*vector=*/std::true_type) noexcept;
132627f7eb2Smrg 
133627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector>
134627f7eb2Smrg _ForwardIterator2
135627f7eb2Smrg __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector,
136627f7eb2Smrg                 /*parallel=*/std::false_type) noexcept;
137627f7eb2Smrg 
138627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Function, class _IsVector>
139627f7eb2Smrg _ForwardIterator2
140627f7eb2Smrg __pattern_walk2(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function, _IsVector,
141627f7eb2Smrg                 /*parallel=*/std::true_type);
142627f7eb2Smrg 
143627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Function,
144627f7eb2Smrg           class _IsVector>
145627f7eb2Smrg _ForwardIterator2
146627f7eb2Smrg __pattern_walk2_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Function, _IsVector,
147627f7eb2Smrg                   /*parallel=*/std::false_type) noexcept;
148627f7eb2Smrg 
149627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2,
150627f7eb2Smrg           class _Function, class _IsVector>
151627f7eb2Smrg _RandomAccessIterator2
152627f7eb2Smrg __pattern_walk2_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Function, _IsVector,
153627f7eb2Smrg                   /*parallel=*/std::true_type);
154627f7eb2Smrg 
155627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Brick>
156627f7eb2Smrg _ForwardIterator2
157627f7eb2Smrg __pattern_walk2_brick(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Brick,
158627f7eb2Smrg                       /*parallel=*/std::false_type) noexcept;
159627f7eb2Smrg 
160627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Brick>
161627f7eb2Smrg _RandomAccessIterator2
162627f7eb2Smrg __pattern_walk2_brick(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
163627f7eb2Smrg                       _Brick,
164627f7eb2Smrg                       /*parallel=*/std::true_type);
165627f7eb2Smrg 
166627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2, class _Brick>
167627f7eb2Smrg _ForwardIterator2
168627f7eb2Smrg __pattern_walk2_brick_n(_ExecutionPolicy&&, _ForwardIterator1, _Size, _ForwardIterator2, _Brick,
169627f7eb2Smrg                         /*parallel=*/std::false_type) noexcept;
170627f7eb2Smrg 
171627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _Size, class _RandomAccessIterator2, class _Brick>
172627f7eb2Smrg _RandomAccessIterator2
173627f7eb2Smrg __pattern_walk2_brick_n(_ExecutionPolicy&&, _RandomAccessIterator1, _Size, _RandomAccessIterator2, _Brick,
174627f7eb2Smrg                         /*parallel=*/std::true_type);
175627f7eb2Smrg 
176627f7eb2Smrg //------------------------------------------------------------------------
177627f7eb2Smrg // walk3 (pseudo)
178627f7eb2Smrg //
179627f7eb2Smrg // walk3 evaluates f(x,y,z) for (x,y,z) drawn from [first1,last1), [first2,...), [first3,...)
180627f7eb2Smrg //------------------------------------------------------------------------
181627f7eb2Smrg 
182627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3, class _Function>
183627f7eb2Smrg _ForwardIterator3 __brick_walk3(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, _Function,
184627f7eb2Smrg                                 /*vector=*/std::false_type) noexcept;
185627f7eb2Smrg 
186627f7eb2Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _RandomAccessIterator3, class _Function>
187627f7eb2Smrg _RandomAccessIterator3 __brick_walk3(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
188627f7eb2Smrg                                      _RandomAccessIterator3, _Function,
189627f7eb2Smrg                                      /*vector=*/std::true_type) noexcept;
190627f7eb2Smrg 
191627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator3,
192627f7eb2Smrg           class _Function, class _IsVector>
193627f7eb2Smrg _ForwardIterator3
194627f7eb2Smrg __pattern_walk3(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3,
195627f7eb2Smrg                 _Function, _IsVector,
196627f7eb2Smrg                 /*parallel=*/std::false_type) noexcept;
197627f7eb2Smrg 
198627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2,
199627f7eb2Smrg           class _RandomAccessIterator3, class _Function, class _IsVector>
200627f7eb2Smrg _RandomAccessIterator3
201627f7eb2Smrg __pattern_walk3(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
202627f7eb2Smrg                 _RandomAccessIterator3, _Function, _IsVector, /*parallel=*/std::true_type);
203627f7eb2Smrg 
204627f7eb2Smrg //------------------------------------------------------------------------
205627f7eb2Smrg // equal
206627f7eb2Smrg //------------------------------------------------------------------------
207627f7eb2Smrg 
208627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
209627f7eb2Smrg bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate,
210*4c3eb207Smrg                    /* is_vector = */ std::false_type) noexcept;
211627f7eb2Smrg 
212627f7eb2Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate>
213627f7eb2Smrg bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _BinaryPredicate,
214627f7eb2Smrg                    /* is_vector = */ std::true_type) noexcept;
215627f7eb2Smrg 
216627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
217627f7eb2Smrg           class _IsVector>
218627f7eb2Smrg bool
219627f7eb2Smrg __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate,
220*4c3eb207Smrg                 _IsVector, /* is_parallel = */ std::false_type) noexcept;
221627f7eb2Smrg 
222627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate,
223627f7eb2Smrg           class _IsVector>
224627f7eb2Smrg bool
225627f7eb2Smrg __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
226*4c3eb207Smrg                 _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type);
227*4c3eb207Smrg 
228*4c3eb207Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
229*4c3eb207Smrg bool __brick_equal(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate,
230*4c3eb207Smrg                    /* is_vector = */ std::false_type) noexcept;
231*4c3eb207Smrg 
232*4c3eb207Smrg template <class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate>
233*4c3eb207Smrg bool __brick_equal(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _RandomAccessIterator2,
234*4c3eb207Smrg                    _BinaryPredicate, /* is_vector = */ std::true_type) noexcept;
235*4c3eb207Smrg 
236*4c3eb207Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
237*4c3eb207Smrg           class _IsVector>
238*4c3eb207Smrg bool
239*4c3eb207Smrg __pattern_equal(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
240*4c3eb207Smrg                 _BinaryPredicate, _IsVector, /* is_parallel = */ std::false_type) noexcept;
241*4c3eb207Smrg 
242*4c3eb207Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _BinaryPredicate,
243*4c3eb207Smrg           class _IsVector>
244*4c3eb207Smrg bool
245*4c3eb207Smrg __pattern_equal(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
246*4c3eb207Smrg                 _RandomAccessIterator2, _BinaryPredicate, _IsVector, /* is_parallel = */ std::true_type);
247627f7eb2Smrg 
248627f7eb2Smrg //------------------------------------------------------------------------
249627f7eb2Smrg // find_if
250627f7eb2Smrg //------------------------------------------------------------------------
251627f7eb2Smrg 
252627f7eb2Smrg template <class _ForwardIterator, class _Predicate>
253627f7eb2Smrg _ForwardIterator __brick_find_if(_ForwardIterator, _ForwardIterator, _Predicate,
254627f7eb2Smrg                                  /*is_vector=*/std::false_type) noexcept;
255627f7eb2Smrg 
256627f7eb2Smrg template <class _RandomAccessIterator, class _Predicate>
257627f7eb2Smrg _RandomAccessIterator __brick_find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate,
258627f7eb2Smrg                                       /*is_vector=*/std::true_type) noexcept;
259627f7eb2Smrg 
260627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
261627f7eb2Smrg _ForwardIterator
262627f7eb2Smrg __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector,
263627f7eb2Smrg                   /*is_parallel=*/std::false_type) noexcept;
264627f7eb2Smrg 
265627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
266627f7eb2Smrg _ForwardIterator
267627f7eb2Smrg __pattern_find_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate, _IsVector,
268627f7eb2Smrg                   /*is_parallel=*/std::true_type);
269627f7eb2Smrg 
270627f7eb2Smrg //------------------------------------------------------------------------
271627f7eb2Smrg // find_end
272627f7eb2Smrg //------------------------------------------------------------------------
273627f7eb2Smrg 
274627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
275627f7eb2Smrg _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
276627f7eb2Smrg                                    _BinaryPredicate,
277627f7eb2Smrg                                    /*__is_vector=*/std::false_type) noexcept;
278627f7eb2Smrg 
279627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
280627f7eb2Smrg _ForwardIterator1 __brick_find_end(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
281627f7eb2Smrg                                    _BinaryPredicate,
282627f7eb2Smrg                                    /*__is_vector=*/std::true_type) noexcept;
283627f7eb2Smrg 
284627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
285627f7eb2Smrg           class _IsVector>
286627f7eb2Smrg _ForwardIterator1
287627f7eb2Smrg __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
288627f7eb2Smrg                    _BinaryPredicate, _IsVector,
289627f7eb2Smrg                    /*is_parallel=*/std::false_type) noexcept;
290627f7eb2Smrg 
291627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
292627f7eb2Smrg           class _IsVector>
293627f7eb2Smrg _ForwardIterator1
294627f7eb2Smrg __pattern_find_end(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
295627f7eb2Smrg                    _BinaryPredicate, _IsVector,
296627f7eb2Smrg                    /*is_parallel=*/std::true_type) noexcept;
297627f7eb2Smrg 
298627f7eb2Smrg //------------------------------------------------------------------------
299627f7eb2Smrg // find_first_of
300627f7eb2Smrg //------------------------------------------------------------------------
301627f7eb2Smrg 
302627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
303627f7eb2Smrg _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
304627f7eb2Smrg                                         _BinaryPredicate,
305627f7eb2Smrg                                         /*__is_vector=*/std::false_type) noexcept;
306627f7eb2Smrg 
307627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
308627f7eb2Smrg _ForwardIterator1 __brick_find_first_of(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
309627f7eb2Smrg                                         _BinaryPredicate,
310627f7eb2Smrg                                         /*__is_vector=*/std::true_type) noexcept;
311627f7eb2Smrg 
312627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
313627f7eb2Smrg           class _IsVector>
314627f7eb2Smrg _ForwardIterator1
315627f7eb2Smrg __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
316627f7eb2Smrg                         _BinaryPredicate, _IsVector, /*is_parallel=*/std::false_type) noexcept;
317627f7eb2Smrg 
318627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
319627f7eb2Smrg           class _IsVector>
320627f7eb2Smrg _ForwardIterator1
321627f7eb2Smrg __pattern_find_first_of(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
322627f7eb2Smrg                         _BinaryPredicate, _IsVector, /*is_parallel=*/std::true_type) noexcept;
323627f7eb2Smrg 
324627f7eb2Smrg //------------------------------------------------------------------------
325627f7eb2Smrg // search
326627f7eb2Smrg //------------------------------------------------------------------------
327627f7eb2Smrg 
328627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
329627f7eb2Smrg _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
330627f7eb2Smrg                                  _BinaryPredicate,
331627f7eb2Smrg                                  /*vector=*/std::false_type) noexcept;
332627f7eb2Smrg 
333627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
334627f7eb2Smrg _ForwardIterator1 __brick_search(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
335627f7eb2Smrg                                  _BinaryPredicate,
336627f7eb2Smrg                                  /*vector=*/std::true_type) noexcept;
337627f7eb2Smrg 
338627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
339627f7eb2Smrg           class _IsVector>
340627f7eb2Smrg _ForwardIterator1
341627f7eb2Smrg __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
342627f7eb2Smrg                  _BinaryPredicate, _IsVector,
343627f7eb2Smrg                  /*is_parallel=*/std::false_type) noexcept;
344627f7eb2Smrg 
345627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate,
346627f7eb2Smrg           class _IsVector>
347627f7eb2Smrg _ForwardIterator1
348627f7eb2Smrg __pattern_search(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
349627f7eb2Smrg                  _BinaryPredicate, _IsVector,
350627f7eb2Smrg                  /*is_parallel=*/std::true_type) noexcept;
351627f7eb2Smrg 
352627f7eb2Smrg //------------------------------------------------------------------------
353627f7eb2Smrg // search_n
354627f7eb2Smrg //------------------------------------------------------------------------
355627f7eb2Smrg 
356627f7eb2Smrg template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
357627f7eb2Smrg _ForwardIterator
358627f7eb2Smrg __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
359627f7eb2Smrg                  /*vector=*/std::false_type) noexcept;
360627f7eb2Smrg 
361627f7eb2Smrg template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
362627f7eb2Smrg _ForwardIterator
363627f7eb2Smrg __brick_search_n(_ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
364627f7eb2Smrg                  /*vector=*/std::true_type) noexcept;
365627f7eb2Smrg 
366627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate,
367627f7eb2Smrg           class IsVector>
368627f7eb2Smrg _ForwardIterator
369627f7eb2Smrg __pattern_search_n(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Size, const _Tp&, _BinaryPredicate,
370627f7eb2Smrg                    IsVector,
371627f7eb2Smrg                    /*is_parallel=*/std::false_type) noexcept;
372627f7eb2Smrg 
373627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Size, class _Tp, class _BinaryPredicate,
374627f7eb2Smrg           class IsVector>
375627f7eb2Smrg _RandomAccessIterator
376627f7eb2Smrg __pattern_search_n(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Size, const _Tp&,
377627f7eb2Smrg                    _BinaryPredicate, IsVector,
378627f7eb2Smrg                    /*is_parallel=*/std::true_type) noexcept;
379627f7eb2Smrg 
380627f7eb2Smrg //------------------------------------------------------------------------
381627f7eb2Smrg // copy_n
382627f7eb2Smrg //------------------------------------------------------------------------
383627f7eb2Smrg 
384627f7eb2Smrg template <class _ForwardIterator, class _Size, class _OutputIterator>
385627f7eb2Smrg _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator,
386627f7eb2Smrg                                /*vector=*/std::false_type) noexcept;
387627f7eb2Smrg 
388627f7eb2Smrg template <class _ForwardIterator, class _Size, class _OutputIterator>
389627f7eb2Smrg _OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator,
390627f7eb2Smrg                                /*vector=*/std::true_type) noexcept;
391627f7eb2Smrg 
392627f7eb2Smrg //------------------------------------------------------------------------
393627f7eb2Smrg // copy
394627f7eb2Smrg //------------------------------------------------------------------------
395627f7eb2Smrg 
396627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
397627f7eb2Smrg _OutputIterator __brick_copy(_ForwardIterator, _ForwardIterator, _OutputIterator,
398627f7eb2Smrg                              /*vector=*/std::false_type) noexcept;
399627f7eb2Smrg 
400627f7eb2Smrg template <class _RandomAccessIterator, class _OutputIterator>
401627f7eb2Smrg _OutputIterator __brick_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
402627f7eb2Smrg                              /*vector=*/std::true_type) noexcept;
403627f7eb2Smrg 
404627f7eb2Smrg //------------------------------------------------------------------------
405627f7eb2Smrg // move
406627f7eb2Smrg //------------------------------------------------------------------------
407627f7eb2Smrg 
408627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
409627f7eb2Smrg _OutputIterator __brick_move(_ForwardIterator, _ForwardIterator, _OutputIterator,
410627f7eb2Smrg                              /*vector=*/std::false_type) noexcept;
411627f7eb2Smrg 
412627f7eb2Smrg template <class _RandomAccessIterator, class _OutputIterator>
413627f7eb2Smrg _OutputIterator __brick_move(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
414627f7eb2Smrg                              /*vector=*/std::true_type) noexcept;
415627f7eb2Smrg 
416627f7eb2Smrg //------------------------------------------------------------------------
417627f7eb2Smrg // swap_ranges
418627f7eb2Smrg //------------------------------------------------------------------------
419627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
420627f7eb2Smrg _OutputIterator
421627f7eb2Smrg __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result,
422627f7eb2Smrg                     /*vector=*/std::false_type) noexcept;
423627f7eb2Smrg 
424627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
425627f7eb2Smrg _OutputIterator
426627f7eb2Smrg __brick_swap_ranges(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result,
427627f7eb2Smrg                     /*vector=*/std::true_type) noexcept;
428627f7eb2Smrg 
429627f7eb2Smrg //------------------------------------------------------------------------
430627f7eb2Smrg // copy_if
431627f7eb2Smrg //------------------------------------------------------------------------
432627f7eb2Smrg 
433627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate>
434627f7eb2Smrg _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate,
435627f7eb2Smrg                                 /*vector=*/std::false_type) noexcept;
436627f7eb2Smrg 
437627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator, class _UnaryPredicate>
438627f7eb2Smrg _OutputIterator __brick_copy_if(_ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate,
439627f7eb2Smrg                                 /*vector=*/std::true_type) noexcept;
440627f7eb2Smrg 
441627f7eb2Smrg template <class _DifferenceType, class _ForwardIterator, class _UnaryPredicate>
442627f7eb2Smrg std::pair<_DifferenceType, _DifferenceType>
443627f7eb2Smrg __brick_calc_mask_1(_ForwardIterator, _ForwardIterator, bool* __restrict, _UnaryPredicate,
444627f7eb2Smrg                     /*vector=*/std::false_type) noexcept;
445627f7eb2Smrg template <class _DifferenceType, class _RandomAccessIterator, class _UnaryPredicate>
446627f7eb2Smrg std::pair<_DifferenceType, _DifferenceType>
447627f7eb2Smrg __brick_calc_mask_1(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _UnaryPredicate,
448627f7eb2Smrg                     /*vector=*/std::true_type) noexcept;
449627f7eb2Smrg 
450627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
451627f7eb2Smrg void
452627f7eb2Smrg __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool*,
453627f7eb2Smrg                      /*vector=*/std::false_type) noexcept;
454627f7eb2Smrg 
455627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
456627f7eb2Smrg void
457627f7eb2Smrg __brick_copy_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator, bool* __restrict,
458627f7eb2Smrg                      /*vector=*/std::true_type) noexcept;
459627f7eb2Smrg 
460627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2>
461627f7eb2Smrg void
462627f7eb2Smrg __brick_partition_by_mask(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, bool*,
463627f7eb2Smrg                           /*vector=*/std::false_type) noexcept;
464627f7eb2Smrg 
465627f7eb2Smrg template <class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2>
466627f7eb2Smrg void
467627f7eb2Smrg __brick_partition_by_mask(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator1, _OutputIterator2, bool*,
468627f7eb2Smrg                           /*vector=*/std::true_type) noexcept;
469627f7eb2Smrg 
470627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _UnaryPredicate, class _IsVector>
471627f7eb2Smrg _OutputIterator
472627f7eb2Smrg __pattern_copy_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate, _IsVector,
473627f7eb2Smrg                   /*parallel=*/std::false_type) noexcept;
474627f7eb2Smrg 
475627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _UnaryPredicate,
476627f7eb2Smrg           class _IsVector>
477627f7eb2Smrg _OutputIterator
478627f7eb2Smrg __pattern_copy_if(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _UnaryPredicate,
479627f7eb2Smrg                   _IsVector, /*parallel=*/std::true_type);
480627f7eb2Smrg 
481627f7eb2Smrg //------------------------------------------------------------------------
482627f7eb2Smrg // count
483627f7eb2Smrg //------------------------------------------------------------------------
484627f7eb2Smrg 
485627f7eb2Smrg template <class _ForwardIterator, class _Predicate>
486627f7eb2Smrg typename std::iterator_traits<_ForwardIterator>::difference_type
487627f7eb2Smrg     __brick_count(_ForwardIterator, _ForwardIterator, _Predicate,
488627f7eb2Smrg                   /* is_vector = */ std::true_type) noexcept;
489627f7eb2Smrg 
490627f7eb2Smrg template <class _ForwardIterator, class _Predicate>
491627f7eb2Smrg typename std::iterator_traits<_ForwardIterator>::difference_type
492627f7eb2Smrg     __brick_count(_ForwardIterator, _ForwardIterator, _Predicate,
493627f7eb2Smrg                   /* is_vector = */ std::false_type) noexcept;
494627f7eb2Smrg 
495627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
496627f7eb2Smrg typename std::iterator_traits<_ForwardIterator>::difference_type
497627f7eb2Smrg __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate,
498627f7eb2Smrg                 /* is_parallel */ std::false_type, _IsVector) noexcept;
499627f7eb2Smrg 
500627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate, class _IsVector>
501627f7eb2Smrg typename std::iterator_traits<_ForwardIterator>::difference_type
502627f7eb2Smrg __pattern_count(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Predicate,
503627f7eb2Smrg                 /* is_parallel */ std::true_type, _IsVector);
504627f7eb2Smrg 
505627f7eb2Smrg //------------------------------------------------------------------------
506627f7eb2Smrg // unique
507627f7eb2Smrg //------------------------------------------------------------------------
508627f7eb2Smrg 
509627f7eb2Smrg template <class _ForwardIterator, class _BinaryPredicate>
510627f7eb2Smrg _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
511627f7eb2Smrg                                 /*is_vector=*/std::false_type) noexcept;
512627f7eb2Smrg 
513627f7eb2Smrg template <class _ForwardIterator, class _BinaryPredicate>
514627f7eb2Smrg _ForwardIterator __brick_unique(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
515627f7eb2Smrg                                 /*is_vector=*/std::true_type) noexcept;
516627f7eb2Smrg 
517627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
518627f7eb2Smrg _ForwardIterator
519627f7eb2Smrg __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector,
520627f7eb2Smrg                  /*is_parallel=*/std::false_type) noexcept;
521627f7eb2Smrg 
522627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
523627f7eb2Smrg _ForwardIterator
524627f7eb2Smrg __pattern_unique(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, _IsVector,
525627f7eb2Smrg                  /*is_parallel=*/std::true_type) noexcept;
526627f7eb2Smrg 
527627f7eb2Smrg //------------------------------------------------------------------------
528627f7eb2Smrg // unique_copy
529627f7eb2Smrg //------------------------------------------------------------------------
530627f7eb2Smrg 
531627f7eb2Smrg template <class _ForwardIterator, class OutputIterator, class _BinaryPredicate>
532627f7eb2Smrg OutputIterator __brick_unique_copy(_ForwardIterator, _ForwardIterator, OutputIterator, _BinaryPredicate,
533627f7eb2Smrg                                    /*vector=*/std::false_type) noexcept;
534627f7eb2Smrg 
535627f7eb2Smrg template <class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate>
536627f7eb2Smrg _OutputIterator __brick_unique_copy(_RandomAccessIterator, _RandomAccessIterator, _OutputIterator, _BinaryPredicate,
537627f7eb2Smrg                                     /*vector=*/std::true_type) noexcept;
538627f7eb2Smrg 
539*4c3eb207Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _BinaryPredicate,
540*4c3eb207Smrg           class _IsVector>
541*4c3eb207Smrg _OutputIterator
542*4c3eb207Smrg __pattern_unique_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator, _BinaryPredicate,
543*4c3eb207Smrg                       _IsVector, /*parallel=*/std::false_type) noexcept;
544627f7eb2Smrg 
545627f7eb2Smrg template <class _ExecutionPolicy, class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate>
546627f7eb2Smrg _DifferenceType
547627f7eb2Smrg __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate,
548627f7eb2Smrg                     /*vector=*/std::false_type) noexcept;
549627f7eb2Smrg 
550627f7eb2Smrg template <class _DifferenceType, class _RandomAccessIterator, class _BinaryPredicate>
551627f7eb2Smrg _DifferenceType
552627f7eb2Smrg __brick_calc_mask_2(_RandomAccessIterator, _RandomAccessIterator, bool* __restrict, _BinaryPredicate,
553627f7eb2Smrg                     /*vector=*/std::true_type) noexcept;
554627f7eb2Smrg 
555627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator, class _BinaryPredicate,
556627f7eb2Smrg           class _IsVector>
557627f7eb2Smrg _OutputIterator
558627f7eb2Smrg __pattern_unique_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator,
559627f7eb2Smrg                       _BinaryPredicate, _IsVector, /*parallel=*/std::true_type);
560627f7eb2Smrg 
561627f7eb2Smrg //------------------------------------------------------------------------
562627f7eb2Smrg // reverse
563627f7eb2Smrg //------------------------------------------------------------------------
564627f7eb2Smrg 
565627f7eb2Smrg template <class _BidirectionalIterator>
566627f7eb2Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator,
567627f7eb2Smrg                      /*__is_vector=*/std::false_type) noexcept;
568627f7eb2Smrg 
569627f7eb2Smrg template <class _BidirectionalIterator>
570627f7eb2Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator,
571627f7eb2Smrg                      /*__is_vector=*/std::true_type) noexcept;
572627f7eb2Smrg 
573627f7eb2Smrg template <class _BidirectionalIterator>
574627f7eb2Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
575627f7eb2Smrg                      /*is_vector=*/std::false_type) noexcept;
576627f7eb2Smrg 
577627f7eb2Smrg template <class _BidirectionalIterator>
578627f7eb2Smrg void __brick_reverse(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
579627f7eb2Smrg                      /*is_vector=*/std::true_type) noexcept;
580627f7eb2Smrg 
581627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector>
582627f7eb2Smrg void
583627f7eb2Smrg __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector,
584627f7eb2Smrg                   /*is_parallel=*/std::false_type) noexcept;
585627f7eb2Smrg 
586627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _IsVector>
587627f7eb2Smrg void
588627f7eb2Smrg __pattern_reverse(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _IsVector,
589627f7eb2Smrg                   /*is_parallel=*/std::true_type);
590627f7eb2Smrg 
591627f7eb2Smrg //------------------------------------------------------------------------
592627f7eb2Smrg // reverse_copy
593627f7eb2Smrg //------------------------------------------------------------------------
594627f7eb2Smrg 
595627f7eb2Smrg template <class _BidirectionalIterator, class _OutputIterator>
596627f7eb2Smrg _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator,
597627f7eb2Smrg                                      /*is_vector=*/std::false_type) noexcept;
598627f7eb2Smrg 
599627f7eb2Smrg template <class _BidirectionalIterator, class _OutputIterator>
600627f7eb2Smrg _OutputIterator __brick_reverse_copy(_BidirectionalIterator, _BidirectionalIterator, _OutputIterator,
601627f7eb2Smrg                                      /*is_vector=*/std::true_type) noexcept;
602627f7eb2Smrg 
603627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector>
604627f7eb2Smrg _OutputIterator
605627f7eb2Smrg __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector,
606627f7eb2Smrg                        /*is_parallel=*/std::false_type) noexcept;
607627f7eb2Smrg 
608627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _OutputIterator, class _IsVector>
609627f7eb2Smrg _OutputIterator
610627f7eb2Smrg __pattern_reverse_copy(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator, _IsVector,
611627f7eb2Smrg                        /*is_parallel=*/std::true_type);
612627f7eb2Smrg 
613627f7eb2Smrg //------------------------------------------------------------------------
614627f7eb2Smrg // rotate
615627f7eb2Smrg //------------------------------------------------------------------------
616627f7eb2Smrg 
617627f7eb2Smrg template <class _ForwardIterator>
618627f7eb2Smrg _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
619627f7eb2Smrg                                 /*is_vector=*/std::false_type) noexcept;
620627f7eb2Smrg 
621627f7eb2Smrg template <class _ForwardIterator>
622627f7eb2Smrg _ForwardIterator __brick_rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
623627f7eb2Smrg                                 /*is_vector=*/std::true_type) noexcept;
624627f7eb2Smrg 
625627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector>
626627f7eb2Smrg _ForwardIterator
627627f7eb2Smrg __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector,
628627f7eb2Smrg                  /*is_parallel=*/std::false_type) noexcept;
629627f7eb2Smrg 
630627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _IsVector>
631627f7eb2Smrg _ForwardIterator
632627f7eb2Smrg __pattern_rotate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _IsVector,
633627f7eb2Smrg                  /*is_parallel=*/std::true_type);
634627f7eb2Smrg 
635627f7eb2Smrg //------------------------------------------------------------------------
636627f7eb2Smrg // rotate_copy
637627f7eb2Smrg //------------------------------------------------------------------------
638627f7eb2Smrg 
639627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
640627f7eb2Smrg _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
641627f7eb2Smrg                                     /*__is_vector=*/std::false_type) noexcept;
642627f7eb2Smrg 
643627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator>
644627f7eb2Smrg _OutputIterator __brick_rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
645627f7eb2Smrg                                     /*__is_vector=*/std::true_type) noexcept;
646627f7eb2Smrg 
647627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector>
648627f7eb2Smrg _OutputIterator
649627f7eb2Smrg __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
650627f7eb2Smrg                       _IsVector,
651627f7eb2Smrg                       /*is_parallel=*/std::false_type) noexcept;
652627f7eb2Smrg 
653627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator, class _IsVector>
654627f7eb2Smrg _OutputIterator
655627f7eb2Smrg __pattern_rotate_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator,
656627f7eb2Smrg                       _IsVector,
657627f7eb2Smrg                       /*is_parallel=*/std::true_type);
658627f7eb2Smrg 
659627f7eb2Smrg //------------------------------------------------------------------------
660627f7eb2Smrg // is_partitioned
661627f7eb2Smrg //------------------------------------------------------------------------
662627f7eb2Smrg 
663627f7eb2Smrg template <class _ForwardIterator, class _UnaryPredicate>
664627f7eb2Smrg bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
665627f7eb2Smrg                             /*is_vector=*/std::false_type) noexcept;
666627f7eb2Smrg 
667627f7eb2Smrg template <class _ForwardIterator, class _UnaryPredicate>
668627f7eb2Smrg bool __brick_is_partitioned(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
669627f7eb2Smrg                             /*is_vector=*/std::true_type) noexcept;
670627f7eb2Smrg 
671627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
672627f7eb2Smrg bool
673627f7eb2Smrg __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
674627f7eb2Smrg                          /*is_parallel=*/std::false_type) noexcept;
675627f7eb2Smrg 
676627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
677627f7eb2Smrg bool
678627f7eb2Smrg __pattern_is_partitioned(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
679627f7eb2Smrg                          /*is_parallel=*/std::true_type);
680627f7eb2Smrg 
681627f7eb2Smrg //------------------------------------------------------------------------
682627f7eb2Smrg // partition
683627f7eb2Smrg //------------------------------------------------------------------------
684627f7eb2Smrg 
685627f7eb2Smrg template <class _ForwardIterator, class _UnaryPredicate>
686627f7eb2Smrg _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
687627f7eb2Smrg                                    /*is_vector=*/std::false_type) noexcept;
688627f7eb2Smrg 
689627f7eb2Smrg template <class _ForwardIterator, class _UnaryPredicate>
690627f7eb2Smrg _ForwardIterator __brick_partition(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
691627f7eb2Smrg                                    /*is_vector=*/std::true_type) noexcept;
692627f7eb2Smrg 
693627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
694627f7eb2Smrg _ForwardIterator
695627f7eb2Smrg __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
696627f7eb2Smrg                     /*is_parallel=*/std::false_type) noexcept;
697627f7eb2Smrg 
698627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
699627f7eb2Smrg _ForwardIterator
700627f7eb2Smrg __pattern_partition(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
701627f7eb2Smrg                     /*is_parallel=*/std::true_type);
702627f7eb2Smrg 
703627f7eb2Smrg //------------------------------------------------------------------------
704627f7eb2Smrg // stable_partition
705627f7eb2Smrg //------------------------------------------------------------------------
706627f7eb2Smrg 
707627f7eb2Smrg template <class _BidirectionalIterator, class _UnaryPredicate>
708627f7eb2Smrg _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
709627f7eb2Smrg                                                 /*__is_vector=*/std::false_type) noexcept;
710627f7eb2Smrg 
711627f7eb2Smrg template <class _BidirectionalIterator, class _UnaryPredicate>
712627f7eb2Smrg _BidirectionalIterator __brick_stable_partition(_BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
713627f7eb2Smrg                                                 /*__is_vector=*/std::true_type) noexcept;
714627f7eb2Smrg 
715627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector>
716627f7eb2Smrg _BidirectionalIterator
717627f7eb2Smrg __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
718627f7eb2Smrg                            _IsVector,
719627f7eb2Smrg                            /*is_parallelization=*/std::false_type) noexcept;
720627f7eb2Smrg 
721627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate, class _IsVector>
722627f7eb2Smrg _BidirectionalIterator
723627f7eb2Smrg __pattern_stable_partition(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate,
724627f7eb2Smrg                            _IsVector,
725627f7eb2Smrg                            /*is_parallelization=*/std::true_type) noexcept;
726627f7eb2Smrg 
727627f7eb2Smrg //------------------------------------------------------------------------
728627f7eb2Smrg // partition_copy
729627f7eb2Smrg //------------------------------------------------------------------------
730627f7eb2Smrg 
731627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate>
732627f7eb2Smrg std::pair<_OutputIterator1, _OutputIterator2>
733627f7eb2Smrg     __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate,
734627f7eb2Smrg                            /*is_vector=*/std::false_type) noexcept;
735627f7eb2Smrg 
736627f7eb2Smrg template <class _ForwardIterator, class _OutputIterator1, class _OutputIterator2, class _UnaryPredicate>
737627f7eb2Smrg std::pair<_OutputIterator1, _OutputIterator2>
738627f7eb2Smrg     __brick_partition_copy(_ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate,
739627f7eb2Smrg                            /*is_vector=*/std::true_type) noexcept;
740627f7eb2Smrg 
741627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _OutputIterator1, class _OutputIterator2,
742627f7eb2Smrg           class _UnaryPredicate, class _IsVector>
743627f7eb2Smrg std::pair<_OutputIterator1, _OutputIterator2>
744627f7eb2Smrg __pattern_partition_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2,
745627f7eb2Smrg                          _UnaryPredicate, _IsVector,
746627f7eb2Smrg                          /*is_parallelization=*/std::false_type) noexcept;
747627f7eb2Smrg 
748627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _OutputIterator1, class _OutputIterator2,
749627f7eb2Smrg           class _UnaryPredicate, class _IsVector>
750627f7eb2Smrg std::pair<_OutputIterator1, _OutputIterator2>
751627f7eb2Smrg __pattern_partition_copy(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _OutputIterator1,
752627f7eb2Smrg                          _OutputIterator2, _UnaryPredicate, _IsVector,
753627f7eb2Smrg                          /*is_parallelization=*/std::true_type);
754627f7eb2Smrg 
755627f7eb2Smrg //------------------------------------------------------------------------
756627f7eb2Smrg // sort
757627f7eb2Smrg //------------------------------------------------------------------------
758627f7eb2Smrg 
759627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector,
760627f7eb2Smrg           class _IsMoveConstructible>
761627f7eb2Smrg void
762627f7eb2Smrg __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/,
763627f7eb2Smrg                /*is_parallel=*/std::false_type, _IsMoveConstructible) noexcept;
764627f7eb2Smrg 
765627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
766627f7eb2Smrg void
767627f7eb2Smrg __pattern_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector /*is_vector*/,
768627f7eb2Smrg                /*is_parallel=*/std::true_type,
769627f7eb2Smrg                /*is_move_constructible=*/std::true_type);
770627f7eb2Smrg 
771627f7eb2Smrg //------------------------------------------------------------------------
772627f7eb2Smrg // stable_sort
773627f7eb2Smrg //------------------------------------------------------------------------
774627f7eb2Smrg 
775627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
776627f7eb2Smrg void
777627f7eb2Smrg __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare,
778627f7eb2Smrg                       _IsVector /*is_vector*/,
779627f7eb2Smrg                       /*is_parallel=*/std::false_type) noexcept;
780627f7eb2Smrg 
781627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
782627f7eb2Smrg void
783627f7eb2Smrg __pattern_stable_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare,
784627f7eb2Smrg                       _IsVector /*is_vector*/,
785627f7eb2Smrg                       /*is_parallel=*/std::true_type);
786627f7eb2Smrg 
787627f7eb2Smrg //------------------------------------------------------------------------
788627f7eb2Smrg // partial_sort
789627f7eb2Smrg //------------------------------------------------------------------------
790627f7eb2Smrg 
791627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
792627f7eb2Smrg void
793627f7eb2Smrg __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator,
794627f7eb2Smrg                        _Compare, _IsVector,
795627f7eb2Smrg                        /*is_parallel=*/std::false_type) noexcept;
796627f7eb2Smrg 
797627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
798627f7eb2Smrg void
799627f7eb2Smrg __pattern_partial_sort(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator,
800627f7eb2Smrg                        _Compare, _IsVector,
801627f7eb2Smrg                        /*is_parallel=*/std::true_type);
802627f7eb2Smrg 
803627f7eb2Smrg //------------------------------------------------------------------------
804627f7eb2Smrg // partial_sort_copy
805627f7eb2Smrg //------------------------------------------------------------------------
806627f7eb2Smrg 
807627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector>
808627f7eb2Smrg _RandomAccessIterator
809627f7eb2Smrg __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator,
810627f7eb2Smrg                             _RandomAccessIterator, _Compare, _IsVector,
811627f7eb2Smrg                             /*is_parallel=*/std::false_type) noexcept;
812627f7eb2Smrg 
813627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare, class _IsVector>
814627f7eb2Smrg _RandomAccessIterator
815627f7eb2Smrg __pattern_partial_sort_copy(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _RandomAccessIterator,
816627f7eb2Smrg                             _RandomAccessIterator, _Compare, _IsVector,
817627f7eb2Smrg                             /*is_parallel=*/std::true_type);
818627f7eb2Smrg 
819627f7eb2Smrg //------------------------------------------------------------------------
820627f7eb2Smrg // adjacent_find
821627f7eb2Smrg //------------------------------------------------------------------------
822627f7eb2Smrg 
823627f7eb2Smrg template <class _ForwardIterator, class _BinaryPredicate>
824627f7eb2Smrg _ForwardIterator
825627f7eb2Smrg __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
826627f7eb2Smrg                       /* IsVector = */ std::true_type, bool) noexcept;
827627f7eb2Smrg 
828627f7eb2Smrg template <class _ForwardIterator, class _BinaryPredicate>
829627f7eb2Smrg _ForwardIterator
830627f7eb2Smrg __brick_adjacent_find(_ForwardIterator, _ForwardIterator, _BinaryPredicate,
831627f7eb2Smrg                       /* IsVector = */ std::false_type, bool) noexcept;
832627f7eb2Smrg 
833627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate, class _IsVector>
834627f7eb2Smrg _ForwardIterator
835627f7eb2Smrg __pattern_adjacent_find(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _BinaryPredicate,
836627f7eb2Smrg                         /* is_parallel */ std::false_type, _IsVector, bool) noexcept;
837627f7eb2Smrg 
838627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _BinaryPredicate, class _IsVector>
839627f7eb2Smrg _RandomAccessIterator
840627f7eb2Smrg __pattern_adjacent_find(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _BinaryPredicate,
841627f7eb2Smrg                         /* is_parallel */ std::true_type, _IsVector, bool);
842627f7eb2Smrg 
843627f7eb2Smrg //------------------------------------------------------------------------
844627f7eb2Smrg // nth_element
845627f7eb2Smrg //------------------------------------------------------------------------
846627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
847627f7eb2Smrg void
848627f7eb2Smrg __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare,
849627f7eb2Smrg                       _IsVector,
850627f7eb2Smrg                       /*is_parallel=*/std::false_type) noexcept;
851627f7eb2Smrg 
852627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
853627f7eb2Smrg void
854627f7eb2Smrg __pattern_nth_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare,
855627f7eb2Smrg                       _IsVector,
856627f7eb2Smrg                       /*is_parallel=*/std::true_type) noexcept;
857627f7eb2Smrg 
858627f7eb2Smrg //------------------------------------------------------------------------
859627f7eb2Smrg // fill, fill_n
860627f7eb2Smrg //------------------------------------------------------------------------
861627f7eb2Smrg template <class _ForwardIterator, class _Tp>
862627f7eb2Smrg void
863627f7eb2Smrg __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&,
864627f7eb2Smrg              /* __is_vector = */ std::true_type) noexcept;
865627f7eb2Smrg 
866627f7eb2Smrg template <class _ForwardIterator, class _Tp>
867627f7eb2Smrg void
868627f7eb2Smrg __brick_fill(_ForwardIterator, _ForwardIterator, const _Tp&,
869627f7eb2Smrg              /* __is_vector = */ std::false_type) noexcept;
870627f7eb2Smrg 
871627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector>
872627f7eb2Smrg void
873627f7eb2Smrg __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&,
874627f7eb2Smrg                /*is_parallel=*/std::false_type, _IsVector) noexcept;
875627f7eb2Smrg 
876627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _IsVector>
877627f7eb2Smrg _ForwardIterator
878627f7eb2Smrg __pattern_fill(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, const _Tp&,
879627f7eb2Smrg                /*is_parallel=*/std::true_type, _IsVector);
880627f7eb2Smrg 
881627f7eb2Smrg template <class _OutputIterator, class _Size, class _Tp>
882627f7eb2Smrg _OutputIterator
883627f7eb2Smrg __brick_fill_n(_OutputIterator, _Size, const _Tp&,
884627f7eb2Smrg                /* __is_vector = */ std::true_type) noexcept;
885627f7eb2Smrg 
886627f7eb2Smrg template <class _OutputIterator, class _Size, class _Tp>
887627f7eb2Smrg _OutputIterator
888627f7eb2Smrg __brick_fill_n(_OutputIterator, _Size, const _Tp&,
889627f7eb2Smrg                /* __is_vector = */ std::false_type) noexcept;
890627f7eb2Smrg 
891627f7eb2Smrg template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector>
892627f7eb2Smrg _OutputIterator
893627f7eb2Smrg __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&,
894627f7eb2Smrg                  /*is_parallel=*/std::false_type, _IsVector) noexcept;
895627f7eb2Smrg 
896627f7eb2Smrg template <class _ExecutionPolicy, class _OutputIterator, class _Size, class _Tp, class _IsVector>
897627f7eb2Smrg _OutputIterator
898627f7eb2Smrg __pattern_fill_n(_ExecutionPolicy&&, _OutputIterator, _Size, const _Tp&,
899627f7eb2Smrg                  /*is_parallel=*/std::true_type, _IsVector);
900627f7eb2Smrg 
901627f7eb2Smrg //------------------------------------------------------------------------
902627f7eb2Smrg // generate, generate_n
903627f7eb2Smrg //------------------------------------------------------------------------
904627f7eb2Smrg 
905627f7eb2Smrg template <class _RandomAccessIterator, class _Generator>
906627f7eb2Smrg void __brick_generate(_RandomAccessIterator, _RandomAccessIterator, _Generator,
907627f7eb2Smrg                       /* is_vector = */ std::true_type) noexcept;
908627f7eb2Smrg 
909627f7eb2Smrg template <class _ForwardIterator, class _Generator>
910627f7eb2Smrg void __brick_generate(_ForwardIterator, _ForwardIterator, _Generator,
911627f7eb2Smrg                       /* is_vector = */ std::false_type) noexcept;
912627f7eb2Smrg 
913627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector>
914627f7eb2Smrg void
915627f7eb2Smrg __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator,
916627f7eb2Smrg                    /*is_parallel=*/std::false_type, _IsVector) noexcept;
917627f7eb2Smrg 
918627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _Generator, class _IsVector>
919627f7eb2Smrg _ForwardIterator
920627f7eb2Smrg __pattern_generate(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Generator,
921627f7eb2Smrg                    /*is_parallel=*/std::true_type, _IsVector);
922627f7eb2Smrg 
923627f7eb2Smrg template <class OutputIterator, class Size, class _Generator>
924627f7eb2Smrg OutputIterator __brick_generate_n(OutputIterator, Size, _Generator,
925627f7eb2Smrg                                   /* is_vector = */ std::true_type) noexcept;
926627f7eb2Smrg 
927627f7eb2Smrg template <class OutputIterator, class Size, class _Generator>
928627f7eb2Smrg OutputIterator __brick_generate_n(OutputIterator, Size, _Generator,
929627f7eb2Smrg                                   /* is_vector = */ std::false_type) noexcept;
930627f7eb2Smrg 
931627f7eb2Smrg template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector>
932627f7eb2Smrg OutputIterator
933627f7eb2Smrg __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator,
934627f7eb2Smrg                      /*is_parallel=*/std::false_type, _IsVector) noexcept;
935627f7eb2Smrg 
936627f7eb2Smrg template <class _ExecutionPolicy, class OutputIterator, class Size, class _Generator, class _IsVector>
937627f7eb2Smrg OutputIterator
938627f7eb2Smrg __pattern_generate_n(_ExecutionPolicy&&, OutputIterator, Size, _Generator,
939627f7eb2Smrg                      /*is_parallel=*/std::true_type, _IsVector);
940627f7eb2Smrg 
941627f7eb2Smrg //------------------------------------------------------------------------
942627f7eb2Smrg // remove
943627f7eb2Smrg //------------------------------------------------------------------------
944627f7eb2Smrg template <class _ForwardIterator, class _UnaryPredicate>
945627f7eb2Smrg _ForwardIterator __brick_remove_if(_ForwardIterator, _ForwardIterator, _UnaryPredicate,
946627f7eb2Smrg                                    /* __is_vector = */ std::false_type) noexcept;
947627f7eb2Smrg 
948627f7eb2Smrg template <class _RandomAccessIterator, class _UnaryPredicate>
949627f7eb2Smrg _RandomAccessIterator __brick_remove_if(_RandomAccessIterator, _RandomAccessIterator, _UnaryPredicate,
950627f7eb2Smrg                                         /* __is_vector = */ std::true_type) noexcept;
951627f7eb2Smrg 
952627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
953627f7eb2Smrg _ForwardIterator
954627f7eb2Smrg __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
955627f7eb2Smrg                     /*is_parallel*/ std::false_type) noexcept;
956627f7eb2Smrg 
957627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _IsVector>
958627f7eb2Smrg _ForwardIterator
959627f7eb2Smrg __pattern_remove_if(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _UnaryPredicate, _IsVector,
960627f7eb2Smrg                     /*is_parallel*/ std::true_type) noexcept;
961627f7eb2Smrg 
962627f7eb2Smrg //------------------------------------------------------------------------
963627f7eb2Smrg // merge
964627f7eb2Smrg //------------------------------------------------------------------------
965627f7eb2Smrg 
966627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
967627f7eb2Smrg _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
968627f7eb2Smrg                               _OutputIterator, _Compare,
969627f7eb2Smrg                               /* __is_vector = */ std::false_type) noexcept;
970627f7eb2Smrg 
971627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
972627f7eb2Smrg _OutputIterator __brick_merge(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
973627f7eb2Smrg                               _OutputIterator, _Compare,
974627f7eb2Smrg                               /* __is_vector = */ std::true_type) noexcept;
975627f7eb2Smrg 
976627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
977627f7eb2Smrg           class _Compare, class _IsVector>
978627f7eb2Smrg _OutputIterator
979627f7eb2Smrg __pattern_merge(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
980627f7eb2Smrg                 _OutputIterator, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept;
981627f7eb2Smrg 
982627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _OutputIterator,
983627f7eb2Smrg           class _Compare, class _IsVector>
984627f7eb2Smrg _OutputIterator
985627f7eb2Smrg __pattern_merge(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
986627f7eb2Smrg                 _RandomAccessIterator2, _OutputIterator, _Compare, _IsVector,
987627f7eb2Smrg                 /* is_parallel = */ std::true_type);
988627f7eb2Smrg 
989627f7eb2Smrg //------------------------------------------------------------------------
990627f7eb2Smrg // inplace_merge
991627f7eb2Smrg //------------------------------------------------------------------------
992627f7eb2Smrg 
993627f7eb2Smrg template <class _BidirectionalIterator, class _Compare>
994627f7eb2Smrg void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare,
995627f7eb2Smrg                            /* __is_vector = */ std::false_type) noexcept;
996627f7eb2Smrg 
997627f7eb2Smrg template <class _BidirectionalIterator, class _Compare>
998627f7eb2Smrg void __brick_inplace_merge(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare,
999627f7eb2Smrg                            /* __is_vector = */ std::true_type) noexcept;
1000627f7eb2Smrg 
1001627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector>
1002627f7eb2Smrg void
1003627f7eb2Smrg __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
1004627f7eb2Smrg                         _Compare, _IsVector,
1005627f7eb2Smrg                         /* is_parallel = */ std::false_type) noexcept;
1006627f7eb2Smrg 
1007627f7eb2Smrg template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare, class _IsVector>
1008627f7eb2Smrg void
1009627f7eb2Smrg __pattern_inplace_merge(_ExecutionPolicy&&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator,
1010627f7eb2Smrg                         _Compare, _IsVector,
1011627f7eb2Smrg                         /*is_parallel=*/std::true_type);
1012627f7eb2Smrg 
1013627f7eb2Smrg //------------------------------------------------------------------------
1014627f7eb2Smrg // includes
1015627f7eb2Smrg //------------------------------------------------------------------------
1016627f7eb2Smrg 
1017627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
1018627f7eb2Smrg bool
1019627f7eb2Smrg __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1020627f7eb2Smrg                    _Compare, _IsVector,
1021627f7eb2Smrg                    /*is_parallel=*/std::false_type) noexcept;
1022627f7eb2Smrg 
1023627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
1024627f7eb2Smrg bool
1025627f7eb2Smrg __pattern_includes(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1026627f7eb2Smrg                    _Compare, _IsVector,
1027627f7eb2Smrg                    /*is_parallel=*/std::true_type);
1028627f7eb2Smrg 
1029627f7eb2Smrg //------------------------------------------------------------------------
1030627f7eb2Smrg // set_union
1031627f7eb2Smrg //------------------------------------------------------------------------
1032627f7eb2Smrg 
1033627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1034627f7eb2Smrg _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1035627f7eb2Smrg                                   _OutputIterator, _Compare,
1036627f7eb2Smrg                                   /*__is_vector=*/std::false_type) noexcept;
1037627f7eb2Smrg 
1038627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1039627f7eb2Smrg _OutputIterator __brick_set_union(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1040627f7eb2Smrg                                   _OutputIterator, _Compare,
1041627f7eb2Smrg                                   /*__is_vector=*/std::true_type) noexcept;
1042627f7eb2Smrg 
1043627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1044627f7eb2Smrg           class _Compare, class _IsVector>
1045627f7eb2Smrg _OutputIterator
1046627f7eb2Smrg __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1047627f7eb2Smrg                     _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept;
1048627f7eb2Smrg 
1049627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1050627f7eb2Smrg           class _Compare, class _IsVector>
1051627f7eb2Smrg _OutputIterator
1052627f7eb2Smrg __pattern_set_union(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1053627f7eb2Smrg                     _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
1054627f7eb2Smrg 
1055627f7eb2Smrg //------------------------------------------------------------------------
1056627f7eb2Smrg // set_intersection
1057627f7eb2Smrg //------------------------------------------------------------------------
1058627f7eb2Smrg 
1059627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1060627f7eb2Smrg _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1061627f7eb2Smrg                                          _OutputIterator, _Compare,
1062627f7eb2Smrg                                          /*__is_vector=*/std::false_type) noexcept;
1063627f7eb2Smrg 
1064627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1065627f7eb2Smrg _OutputIterator __brick_set_intersection(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1066627f7eb2Smrg                                          _OutputIterator, _Compare,
1067627f7eb2Smrg                                          /*__is_vector=*/std::true_type) noexcept;
1068627f7eb2Smrg 
1069627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1070627f7eb2Smrg           class _Compare, class _IsVector>
1071627f7eb2Smrg _OutputIterator
1072627f7eb2Smrg __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1073627f7eb2Smrg                            _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
1074627f7eb2Smrg                            /*is_parallel=*/std::false_type) noexcept;
1075627f7eb2Smrg 
1076627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1077627f7eb2Smrg           class _Compare, class _IsVector>
1078627f7eb2Smrg _OutputIterator
1079627f7eb2Smrg __pattern_set_intersection(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1080627f7eb2Smrg                            _ForwardIterator2, _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
1081627f7eb2Smrg 
1082627f7eb2Smrg //------------------------------------------------------------------------
1083627f7eb2Smrg // set_difference
1084627f7eb2Smrg //------------------------------------------------------------------------
1085627f7eb2Smrg 
1086627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1087627f7eb2Smrg _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1088627f7eb2Smrg                                        _OutputIterator, _Compare,
1089627f7eb2Smrg                                        /*__is_vector=*/std::false_type) noexcept;
1090627f7eb2Smrg 
1091627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1092627f7eb2Smrg _OutputIterator __brick_set_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1093627f7eb2Smrg                                        _OutputIterator, _Compare,
1094627f7eb2Smrg                                        /*__is_vector=*/std::true_type) noexcept;
1095627f7eb2Smrg 
1096627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1097627f7eb2Smrg           class _Compare, class _IsVector>
1098627f7eb2Smrg _OutputIterator
1099627f7eb2Smrg __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1100627f7eb2Smrg                          _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::false_type) noexcept;
1101627f7eb2Smrg 
1102627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1103627f7eb2Smrg           class _Compare, class _IsVector>
1104627f7eb2Smrg _OutputIterator
1105627f7eb2Smrg __pattern_set_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1106627f7eb2Smrg                          _OutputIterator, _Compare, _IsVector, /*is_parallel=*/std::true_type);
1107627f7eb2Smrg 
1108627f7eb2Smrg //------------------------------------------------------------------------
1109627f7eb2Smrg // set_symmetric_difference
1110627f7eb2Smrg //------------------------------------------------------------------------
1111627f7eb2Smrg 
1112627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1113627f7eb2Smrg _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1114627f7eb2Smrg                                                  _ForwardIterator2, _OutputIterator, _Compare,
1115627f7eb2Smrg                                                  /*__is_vector=*/std::false_type) noexcept;
1116627f7eb2Smrg 
1117627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator, class _Compare>
1118627f7eb2Smrg _OutputIterator __brick_set_symmetric_difference(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1119627f7eb2Smrg                                                  _ForwardIterator2, _OutputIterator, _Compare,
1120627f7eb2Smrg                                                  /*__is_vector=*/std::true_type) noexcept;
1121627f7eb2Smrg 
1122627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1123627f7eb2Smrg           class _Compare, class _IsVector>
1124627f7eb2Smrg _OutputIterator
1125627f7eb2Smrg __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1126627f7eb2Smrg                                    _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
1127627f7eb2Smrg                                    /*is_parallel=*/std::false_type) noexcept;
1128627f7eb2Smrg 
1129627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _OutputIterator,
1130627f7eb2Smrg           class _Compare, class _IsVector>
1131627f7eb2Smrg _OutputIterator
1132627f7eb2Smrg __pattern_set_symmetric_difference(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1133627f7eb2Smrg                                    _ForwardIterator2, _OutputIterator, _Compare, _IsVector,
1134627f7eb2Smrg                                    /*is_parallel=*/std::true_type);
1135627f7eb2Smrg 
1136627f7eb2Smrg //------------------------------------------------------------------------
1137627f7eb2Smrg // is_heap_until
1138627f7eb2Smrg //------------------------------------------------------------------------
1139627f7eb2Smrg 
1140627f7eb2Smrg template <class _RandomAccessIterator, class _Compare>
1141627f7eb2Smrg _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare,
1142627f7eb2Smrg                                             /* __is_vector = */ std::false_type) noexcept;
1143627f7eb2Smrg 
1144627f7eb2Smrg template <class _RandomAccessIterator, class _Compare>
1145627f7eb2Smrg _RandomAccessIterator __brick_is_heap_until(_RandomAccessIterator, _RandomAccessIterator, _Compare,
1146627f7eb2Smrg                                             /* __is_vector = */ std::true_type) noexcept;
1147627f7eb2Smrg 
1148627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
1149627f7eb2Smrg _RandomAccessIterator
1150627f7eb2Smrg __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
1151627f7eb2Smrg                         /* is_parallel = */ std::false_type) noexcept;
1152627f7eb2Smrg 
1153627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare, class _IsVector>
1154627f7eb2Smrg _RandomAccessIterator
1155627f7eb2Smrg __pattern_is_heap_until(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
1156627f7eb2Smrg                         /* is_parallel = */ std::true_type) noexcept;
1157627f7eb2Smrg 
1158627f7eb2Smrg //------------------------------------------------------------------------
1159627f7eb2Smrg // min_element
1160627f7eb2Smrg //------------------------------------------------------------------------
1161627f7eb2Smrg 
1162627f7eb2Smrg template <typename _ForwardIterator, typename _Compare>
1163627f7eb2Smrg _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare,
1164627f7eb2Smrg                                      /* __is_vector = */ std::false_type) noexcept;
1165627f7eb2Smrg 
1166627f7eb2Smrg template <typename _ForwardIterator, typename _Compare>
1167627f7eb2Smrg _ForwardIterator __brick_min_element(_ForwardIterator, _ForwardIterator, _Compare,
1168627f7eb2Smrg                                      /* __is_vector = */ std::true_type) noexcept;
1169627f7eb2Smrg 
1170627f7eb2Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
1171627f7eb2Smrg _ForwardIterator
1172627f7eb2Smrg __pattern_min_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
1173627f7eb2Smrg                       /* is_parallel = */ std::false_type) noexcept;
1174627f7eb2Smrg 
1175627f7eb2Smrg template <typename _ExecutionPolicy, typename _RandomAccessIterator, typename _Compare, typename _IsVector>
1176627f7eb2Smrg _RandomAccessIterator
1177627f7eb2Smrg __pattern_min_element(_ExecutionPolicy&&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsVector,
1178627f7eb2Smrg                       /* is_parallel = */ std::true_type);
1179627f7eb2Smrg 
1180627f7eb2Smrg //------------------------------------------------------------------------
1181627f7eb2Smrg // minmax_element
1182627f7eb2Smrg //------------------------------------------------------------------------
1183627f7eb2Smrg 
1184627f7eb2Smrg template <typename _ForwardIterator, typename _Compare>
1185627f7eb2Smrg std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare,
1186627f7eb2Smrg                                                                      /* __is_vector = */ std::false_type) noexcept;
1187627f7eb2Smrg 
1188627f7eb2Smrg template <typename _ForwardIterator, typename _Compare>
1189627f7eb2Smrg std::pair<_ForwardIterator, _ForwardIterator> __brick_minmax_element(_ForwardIterator, _ForwardIterator, _Compare,
1190627f7eb2Smrg                                                                      /* __is_vector = */ std::true_type) noexcept;
1191627f7eb2Smrg 
1192627f7eb2Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
1193627f7eb2Smrg std::pair<_ForwardIterator, _ForwardIterator>
1194627f7eb2Smrg __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
1195627f7eb2Smrg                          /* is_parallel = */ std::false_type) noexcept;
1196627f7eb2Smrg 
1197627f7eb2Smrg template <typename _ExecutionPolicy, typename _ForwardIterator, typename _Compare, typename _IsVector>
1198627f7eb2Smrg std::pair<_ForwardIterator, _ForwardIterator>
1199627f7eb2Smrg __pattern_minmax_element(_ExecutionPolicy&&, _ForwardIterator, _ForwardIterator, _Compare, _IsVector,
1200627f7eb2Smrg                          /* is_parallel = */ std::true_type);
1201627f7eb2Smrg 
1202627f7eb2Smrg //------------------------------------------------------------------------
1203627f7eb2Smrg // mismatch
1204627f7eb2Smrg //------------------------------------------------------------------------
1205627f7eb2Smrg 
1206627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
1207627f7eb2Smrg std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1,
1208627f7eb2Smrg                                                                  _ForwardIterator2, _ForwardIterator2, _Predicate,
1209627f7eb2Smrg                                                                  /* __is_vector = */ std::false_type) noexcept;
1210627f7eb2Smrg 
1211627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
1212627f7eb2Smrg std::pair<_ForwardIterator1, _ForwardIterator2> __brick_mismatch(_ForwardIterator1, _ForwardIterator1,
1213627f7eb2Smrg                                                                  _ForwardIterator2, _ForwardIterator2, _Predicate,
1214627f7eb2Smrg                                                                  /* __is_vector = */ std::true_type) noexcept;
1215627f7eb2Smrg 
1216627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate, class _IsVector>
1217627f7eb2Smrg std::pair<_ForwardIterator1, _ForwardIterator2>
1218627f7eb2Smrg __pattern_mismatch(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1219627f7eb2Smrg                    _Predicate, _IsVector,
1220627f7eb2Smrg                    /* is_parallel = */ std::false_type) noexcept;
1221627f7eb2Smrg 
1222627f7eb2Smrg template <class _ExecutionPolicy, class _RandomAccessIterator1, class _RandomAccessIterator2, class _Predicate,
1223627f7eb2Smrg           class _IsVector>
1224627f7eb2Smrg std::pair<_RandomAccessIterator1, _RandomAccessIterator2>
1225627f7eb2Smrg __pattern_mismatch(_ExecutionPolicy&&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2,
1226627f7eb2Smrg                    _RandomAccessIterator2, _Predicate, _IsVector, /* is_parallel = */ std::true_type) noexcept;
1227627f7eb2Smrg 
1228627f7eb2Smrg //------------------------------------------------------------------------
1229627f7eb2Smrg // lexicographical_compare
1230627f7eb2Smrg //------------------------------------------------------------------------
1231627f7eb2Smrg 
1232627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Compare>
1233627f7eb2Smrg bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1234627f7eb2Smrg                                      _Compare,
1235627f7eb2Smrg                                      /* __is_vector = */ std::false_type) noexcept;
1236627f7eb2Smrg 
1237627f7eb2Smrg template <class _ForwardIterator1, class _ForwardIterator2, class _Compare>
1238627f7eb2Smrg bool __brick_lexicographical_compare(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2,
1239627f7eb2Smrg                                      _Compare,
1240627f7eb2Smrg                                      /* __is_vector = */ std::true_type) noexcept;
1241627f7eb2Smrg 
1242627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
1243627f7eb2Smrg bool
1244627f7eb2Smrg __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1245627f7eb2Smrg                                   _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::false_type) noexcept;
1246627f7eb2Smrg 
1247627f7eb2Smrg template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare, class _IsVector>
1248627f7eb2Smrg bool
1249627f7eb2Smrg __pattern_lexicographical_compare(_ExecutionPolicy&&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2,
1250627f7eb2Smrg                                   _ForwardIterator2, _Compare, _IsVector, /* is_parallel = */ std::true_type) noexcept;
1251627f7eb2Smrg 
1252627f7eb2Smrg } // namespace __internal
1253627f7eb2Smrg } // namespace __pstl
1254*4c3eb207Smrg #endif /* _PSTL_ALGORITHM_FWD_H */
1255