4#ifndef QTCONCURRENT_MAPKERNEL_H
5#define QTCONCURRENT_MAPKERNEL_H
7#include <QtConcurrent/qtconcurrent_global.h>
9#if !defined(QT_NO_CONCURRENT) || defined (Q_QDOC)
11#include <QtConcurrent/qtconcurrentiteratekernel.h>
12#include <QtConcurrent/qtconcurrentreducekernel.h>
13#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
21template <
typename Iterator,
typename MapFunctor>
27 template <
typename F = MapFunctor>
34 std::invoke(
map, *
it);
38 bool runIterations(Iterator sequenceBeginIterator,
int beginIndex,
int endIndex,
void *)
override
40 Iterator
it = sequenceBeginIterator;
41 std::advance(
it, beginIndex);
42 for (
int i = beginIndex;
i < endIndex; ++
i) {
51template <
typename ReducedResultType,
54 typename ReduceFunctor,
55 typename Reducer = ReduceKernel<ReduceFunctor,
60 ReducedResultType &reducedResult;
69 template<
typename F1 = MapFunctor,
typename F2 = ReduceFunctor>
71 ReduceOptions reduceOptions)
74 map(
std::forward<F1>(_map)),
75 reduce(
std::forward<F2>(_reduce)),
76 reducer(
pool, reduceOptions)
79 template<
typename F1 = MapFunctor,
typename F2 = ReduceFunctor>
81 ReducedResultType &&initialValue, ReduceOptions reduceOptions)
83 std::forward<ReducedResultType>(initialValue)),
85 map(
std::forward<F1>(_map)),
86 reduce(
std::forward<F2>(_reduce)),
87 reducer(
pool, reduceOptions)
98 reducer.runReduce(reduce, reducedResult,
results);
102 bool runIterations(Iterator sequenceBeginIterator,
int beginIndex,
int endIndex, ReducedResultType *)
override
109 Iterator
it = sequenceBeginIterator;
110 std::advance(
it, beginIndex);
111 for (
int i = beginIndex;
i < endIndex; ++
i) {
116 reducer.runReduce(reduce, reducedResult,
results);
122 reducer.finish(reduce, reducedResult);
138 return &reducedResult;
142template <
typename Iterator,
typename MapFunctor>
149 template <
typename F = MapFunctor>
163 Iterator
it = sequenceBeginIterator;
164 std::advance(
it, beginIndex);
165 for (
int i = beginIndex;
i < endIndex; ++
i) {
175template <
typename Iterator,
typename Functor>
184template <
typename T,
typename Iterator,
typename Functor>
196template <
typename Sequence,
typename Base,
typename Functor>
199 template<
typename S = Sequence,
typename F = Functor>
215template <
typename T,
typename Sequence,
typename Functor>
219 using DecayedSequence = std::decay_t<Sequence>;
220 using DecayedFunctor = std::decay_t<Functor>;
227 std::forward<Functor>(functor)));
231template <
typename IntermediateType,
typename ResultType,
typename Sequence,
typename MapFunctor,
232 typename ReduceFunctor>
235 MapFunctor &&mapFunctor,
236 ReduceFunctor &&reduceFunctor,
237 ReduceOptions options)
239 using DecayedSequence = std::decay_t<Sequence>;
240 using DecayedMapFunctor = std::decay_t<MapFunctor>;
241 using DecayedReduceFunctor = std::decay_t<ReduceFunctor>;
242 using Iterator =
typename DecayedSequence::const_iterator;
245 DecayedReduceFunctor, Reducer>;
246 using SequenceHolderType =
SequenceHolder2<DecayedSequence, MappedReduceType, DecayedMapFunctor,
247 DecayedReduceFunctor>;
249 std::forward<MapFunctor>(mapFunctor),
250 std::forward<ReduceFunctor>(reduceFunctor),
255template <
typename IntermediateType,
typename ResultType,
typename Iterator,
typename MapFunctor,
256 typename ReduceFunctor>
260 MapFunctor &&mapFunctor,
261 ReduceFunctor &&reduceFunctor,
262 ReduceOptions options)
267 std::decay_t<ReduceFunctor>, Reducer>;
269 std::forward<MapFunctor>(mapFunctor),
270 std::forward<ReduceFunctor>(reduceFunctor),
275template <
typename IntermediateType,
typename ResultType,
typename Sequence,
typename MapFunctor,
276 typename ReduceFunctor>
279 MapFunctor &&mapFunctor,
280 ReduceFunctor &&reduceFunctor,
281 ResultType &&initialValue,
282 ReduceOptions options)
284 using DecayedSequence = std::decay_t<Sequence>;
285 using DecayedMapFunctor = std::decay_t<MapFunctor>;
286 using DecayedReduceFunctor = std::decay_t<ReduceFunctor>;
287 using Iterator =
typename DecayedSequence::const_iterator;
290 DecayedReduceFunctor, Reducer>;
291 using SequenceHolderType =
SequenceHolder2<DecayedSequence, MappedReduceType, DecayedMapFunctor,
292 DecayedReduceFunctor>;
294 new SequenceHolderType(
pool, std::forward<Sequence>(sequence),
295 std::forward<MapFunctor>(mapFunctor),
296 std::forward<ReduceFunctor>(reduceFunctor),
297 std::forward<ResultType>(initialValue), options));
301template <
typename IntermediateType,
typename ResultType,
typename Iterator,
typename MapFunctor,
302 typename ReduceFunctor>
306 MapFunctor &&mapFunctor,
307 ReduceFunctor &&reduceFunctor,
308 ResultType &&initialValue,
309 ReduceOptions options)
313 std::decay_t<ReduceFunctor>, Reducer>;
315 std::forward<MapFunctor>(mapFunctor),
316 std::forward<ReduceFunctor>(reduceFunctor),
317 std::forward<ResultType>(initialValue), options));
void reserve(qsizetype size)
void append(parameter_type t)
bool shouldStartThread() override
DefaultValueContainer< ResultType > defaultValue
bool runIteration(Iterator it, int, void *) override
MapKernel(QThreadPool *pool, Iterator begin, Iterator end, F &&_map)
bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, void *) override
MappedEachKernel(QThreadPool *pool, Iterator begin, Iterator end, F &&_map)
bool runIteration(Iterator it, int, T *result) override
bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, T *results) override
MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, F2 &&_reduce, ReduceOptions reduceOptions)
bool shouldThrottleThread() override
ReducedResultType * result() override
ReducedResultType ResultType
bool shouldStartThread() override
MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, F2 &&_reduce, ReducedResultType &&initialValue, ReduceOptions reduceOptions)
bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, ReducedResultType *) override
bool runIteration(Iterator it, int index, ReducedResultType *) override
ReducedResultType ReturnType
virtual bool shouldThrottleThread()
QMap< QString, QString > map
[6]
QSet< QString >::iterator it
Combined button and popup list for selecting options.
ThreadEngineStarter< T > startMapped(QThreadPool *pool, Iterator begin, Iterator end, Functor &&functor)
[qtconcurrentmapkernel-2]
ThreadEngineStarter< ResultType > startMappedReduced(QThreadPool *pool, Sequence &&sequence, MapFunctor &&mapFunctor, ReduceFunctor &&reduceFunctor, ReduceOptions options)
[qtconcurrentmapkernel-4]
ThreadEngineStarter< typename ThreadEngine::ResultType > startThreadEngine(ThreadEngine *threadEngine)
[qtconcurrentthreadengine-1]
ThreadEngineStarter< void > startMap(QThreadPool *pool, Iterator begin, Iterator end, Functor &&functor)
[qtconcurrentmapkernel-1]
typename MapResult< T, MapFunctor >::Type MapResultType
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
SequenceHolder1(QThreadPool *pool, S &&_sequence, F &&functor)
SequenceHolder(const Sequence &s)