35 template<
class E,
class P,
class I,
class S,
class T>
38 traits::is_executor_v<E> &&
39 traits::is_partitioner_v<P, I, S> &&
40 traits::is_input_iterator_v<I> &&
41 traits::is_sentinel_for_v<S, I> &&
42 traits::is_indirectly_binary_invocable_v<std::equal_to<>,
T *,
I>
44 )
constexpr decltype(
auto)
46 if(std::is_constant_evaluated()) {
49 return Derived().run(executor, p, first, last, std::move(f));
54 template<
class E,
class P,
class R,
class T>
57 traits::is_executor_v<E> &&
58 traits::is_range_partitioner_v<P, R> &&
59 traits::is_input_range_v<R> &&
61 std::is_copy_constructible_v<T>
63 )
constexpr decltype(
auto)
65 if(std::is_constant_evaluated()) {
68 return Derived().run(executor, p, std::begin(r), std::end(r), std::move(f));
73 template<
class P,
class I,
class S,
class T>
76 traits::is_partitioner_v<P, I, S> &&
77 traits::is_input_iterator_v<I> &&
78 traits::is_sentinel_for_v<S, I> &&
79 traits::is_indirectly_binary_invocable_v<std::equal_to<>,
T *,
I> &&
80 std::is_copy_constructible_v<T>
82 )
constexpr decltype(
auto)
84 if(std::is_constant_evaluated()) {
92 template<
class P,
class R,
class T>
95 traits::is_range_partitioner_v<P, R> &&
96 traits::is_input_range_v<R> &&
98 std::is_copy_constructible_v<T>
100 )
constexpr decltype(
auto)
102 if(std::is_constant_evaluated()) {
110 template<
class E,
class I,
class S,
class T>
113 traits::is_executor_v<E> &&
114 traits::is_input_iterator_v<I> &&
115 traits::is_sentinel_for_v<S, I> &&
116 traits::is_indirectly_binary_invocable_v<std::equal_to<>,
T *,
I>
118 )
constexpr decltype(
auto)
120 if(std::is_constant_evaluated()) {
128 template<
class E,
class R,
class T>
131 traits::is_executor_v<E> &&
132 traits::is_input_range_v<R> &&
134 std::is_copy_constructible_v<T>
136 )
constexpr decltype(
auto)
138 if(std::is_constant_evaluated()) {
146 template<
class I,
class S,
class T>
149 traits::is_input_iterator_v<I> &&
150 traits::is_sentinel_for_v<S, I> &&
151 traits::is_indirectly_binary_invocable_v<std::equal_to<>,
T *,
I>
153 )
constexpr decltype(
auto)
155 if(std::is_constant_evaluated()) {
163 template<
class R,
class T>
166 traits::is_input_range_v<R> &&
168 std::is_copy_constructible_v<T>
170 )
constexpr decltype(
auto)
172 if(std::is_constant_evaluated()) {
A partitioner is a light callable object that takes a pair of iterators and returns the middle of the...
The halve partitioner always splits the sequence into two parts of roughly equal size.
Definition Partitioner.hpp:37
Value-compare algorithm overloads.
Definition ValueCompareAlgorithm.hpp:32
constexpr decltype(auto) operator()(const E &executor, R &&r, T f) const
Overload for Ranges / default partitioner.
Definition ValueCompareAlgorithm.hpp:137
constexpr decltype(auto) operator()(R &&r, T f) const
Overload for Ranges / default executor / default partitioner.
Definition ValueCompareAlgorithm.hpp:171
constexpr decltype(auto) operator()(const E &executor, I first, S last, T f) const
Overload for Iterators / default partitioner.
Definition ValueCompareAlgorithm.hpp:119
constexpr decltype(auto) operator()(P p, R &&r, T f) const
Overload for Ranges / default parallel executor.
Definition ValueCompareAlgorithm.hpp:101
constexpr decltype(auto) operator()(P p, I first, S last, T f) const
Overload for Iterators / default parallel executor.
Definition ValueCompareAlgorithm.hpp:83
constexpr decltype(auto) operator()(const E &executor, P p, R &&r, T f) const
Overload for Ranges.
Definition ValueCompareAlgorithm.hpp:64
constexpr decltype(auto) operator()(const E &executor, P p, I first, S last, T f) const
Complete overload.
Definition ValueCompareAlgorithm.hpp:45
constexpr decltype(auto) operator()(I first, S last, T f) const
Overload for Iterators / default executor / default partitioner.
Definition ValueCompareAlgorithm.hpp:154
typename iterator< T >::type iterator_t
A C++17 type trait equivalent to the C++20 iterator_t concept.
Definition iterator.hpp:27
Definition Application.hpp:19
constexpr auto make_inline_executor()
An executor that runs anything inline.
Definition ExecutionContext.hpp:660
auto make_default_executor()
The default executor to be used when no other executor is provided.
Definition ExecutionContext.hpp:743
DefaultPartitioner make_default_partitioner(const size_t n, const std::size_t occupancy=hardware_concurrency())
Create an instance of the default partitioner with a reasonable grain size for n elements.
Definition Partitioner.hpp:97