40 #ifndef QTCONCURRENT_MAPKERNEL_H 41 #define QTCONCURRENT_MAPKERNEL_H 43 #include <QtConcurrent/qtconcurrent_global.h> 45 #if !defined(QT_NO_CONCURRENT) || defined (Q_CLANG_QDOC) 47 #include <QtConcurrent/qtconcurrentiteratekernel.h> 48 #include <QtConcurrent/qtconcurrentreducekernel.h> 56 template <
typename Iterator,
typename MapFunctor>
72 bool runIterations(Iterator sequenceBeginIterator,
int beginIndex,
int endIndex,
void *)
override 74 Iterator it = sequenceBeginIterator;
75 std::advance(it, beginIndex);
76 for (
int i = beginIndex; i < endIndex; ++i) {
85 template <
typename ReducedResultType,
88 typename ReduceFunctor,
91 typename MapFunctor::result_type> >
94 ReducedResultType reducedResult;
101 :
IterateKernel<Iterator, ReducedResultType>(begin, end), reducedResult(), map(_map), reduce(_reduce), reducer(reduceOptions)
106 ReduceFunctor _reduce)
107 : reducedResult(initialValue), map(_map), reduce(_reduce)
110 bool runIteration(Iterator it,
int index, ReducedResultType *)
override 113 results.
begin = index;
114 results.
end = index + 1;
116 results.
vector.append(map(*it));
117 reducer.runReduce(reduce, reducedResult, results);
126 results.
vector.reserve(end - begin);
128 Iterator it = sequenceBeginIterator;
129 std::advance(it, begin);
130 for (
int i = begin; i <
end; ++i) {
131 results.
vector.append(map(*(it)));
135 reducer.runReduce(reduce, reducedResult, results);
141 reducer.finish(reduce, reducedResult);
157 return &reducedResult;
161 template <
typename Iterator,
typename MapFunctor>
165 typedef typename MapFunctor::result_type T;
182 Iterator it = sequenceBeginIterator;
183 std::advance(it, begin);
184 for (
int i = begin; i <
end; ++i) {
194 template <
typename Iterator,
typename Functor>
201 template <
typename T,
typename Iterator,
typename Functor>
211 template <
typename Sequence,
typename Base,
typename Functor>
215 :
Base(_sequence.
begin(), _sequence.
end(), functor), sequence(_sequence)
225 sequence = Sequence();
230 template <
typename T,
typename Sequence,
typename Functor>
241 template <
typename IntermediateType,
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
243 MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
244 ReduceOptions options)
246 typedef typename Sequence::const_iterator Iterator;
250 return startThreadEngine(
new SequenceHolderType(sequence, mapFunctor, reduceFunctor, options));
254 template <
typename IntermediateType,
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
256 MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
257 ReduceOptions options)
261 return startThreadEngine(
new MappedReduceType(begin, end, mapFunctor, reduceFunctor, options));
269 #endif // QT_NO_CONCURRENT Definition: qtconcurrentreducekernel.h:102
Definition: qtconcurrentiteratekernel.h:180
ReducedResultType ResultType
Definition: qtconcurrentmapkernel.h:154
ThreadEngineStarter< ResultType > startMappedReduced(const Sequence &sequence, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
[qtconcurrentmapkernel-4]
Definition: qtconcurrentmapkernel.h:242
Definition: qtconcurrentmapkernel.h:92
MappedReducedKernel(Iterator begin, Iterator end, MapFunctor _map, ReduceFunctor _reduce, ReduceOptions reduceOptions)
Definition: qtconcurrentmapkernel.h:100
virtual bool shouldThrottleThread()
Definition: qtconcurrentthreadengine.h:108
SequenceHolder1(const Sequence &_sequence, Functor functor)
Definition: qtconcurrentmapkernel.h:214
T ReturnType
Definition: qtconcurrentmapkernel.h:167
const Iterator end
Definition: qtconcurrentiteratekernel.h:312
ThreadEngineStarter< typename ThreadEngine::ResultType > startThreadEngine(ThreadEngine *threadEngine)
[qtconcurrentthreadengine-1]
Definition: qtconcurrentthreadengine.h:262
bool shouldStartThread() override
Definition: qtconcurrentiteratekernel.h:206
bool runIteration(Iterator it, int index, ReducedResultType *) override
Definition: qtconcurrentmapkernel.h:110
Sequence sequence
Definition: qtconcurrentmapkernel.h:218
Definition: qtconcurrentthreadengine.h:247
bool shouldThrottleThread() override
Definition: qtconcurrentmapkernel.h:144
virtual void * result()
Definition: qtconcurrentthreadengine.h:133
Definition: qtconcurrentmapkernel.h:212
void ReturnType
Definition: qtconcurrentmapkernel.h:61
ThreadEngineStarter< T > startMapped(Iterator begin, Iterator end, Functor functor)
[qtconcurrentmapkernel-2]
Definition: qtconcurrentmapkernel.h:202
QFuture< void > map(Sequence &sequence, MapFunctor map)
Definition: qtconcurrentmap.h:60
Definition: qtconcurrentmapkernel.h:162
bool runIteration(Iterator it, int, void *) override
Definition: qtconcurrentmapkernel.h:66
Definition: qtconcurrentreducekernel.h:223
MapKernel(Iterator begin, Iterator end, MapFunctor _map)
Definition: qtconcurrentmapkernel.h:62
Definition: qtconcurrentthreadengine.h:229
T ResultType
Definition: qtconcurrentmapkernel.h:168
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *results) override
Definition: qtconcurrentmapkernel.h:179
Definition: qtconcurrentmapkernel.h:57
MappedEachKernel(Iterator begin, Iterator end, MapFunctor _map)
Definition: qtconcurrentmapkernel.h:170
ThreadEngineStarter< void > startMap(Iterator begin, Iterator end, Functor functor)
[qtconcurrentmapkernel-1]
Definition: qtconcurrentmapkernel.h:195
The QtConcurrent namespace provides high-level APIs that make it possible to write multi-threaded pro...
Definition: qtconcurrentexception.h:51
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) override
Definition: qtconcurrentmapkernel.h:121
ReducedResultType * result() override
Definition: qtconcurrentmapkernel.h:155
bool runIteration(Iterator it, int, T *result) override
Definition: qtconcurrentmapkernel.h:173
MappedReducedKernel(ReducedResultType initialValue, MapFunctor _map, ReduceFunctor _reduce)
Definition: qtconcurrentmapkernel.h:104
bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, void *) override
Definition: qtconcurrentmapkernel.h:72
const Iterator begin
Definition: qtconcurrentiteratekernel.h:311
void finish() override
Definition: qtconcurrentmapkernel.h:220
void finish() override
Definition: qtconcurrentmapkernel.h:139
ReducedResultType ReturnType
Definition: qtconcurrentmapkernel.h:99
bool shouldStartThread() override
Definition: qtconcurrentmapkernel.h:149