42 #ifndef QTCONCURRENT_MAPKERNEL_H
43 #define QTCONCURRENT_MAPKERNEL_H
47 #ifndef QT_NO_CONCURRENT
61 template <
typename Iterator,
typename MapFunctor>
77 bool runIterations(Iterator sequenceBeginIterator,
int beginIndex,
int endIndex,
void *)
79 Iterator it = sequenceBeginIterator;
80 advance(it, beginIndex);
81 for (
int i = beginIndex; i < endIndex; ++i) {
90 template <
typename ReducedResultType,
93 typename ReduceFunctor,
94 typename Reducer = ReduceKernel<ReduceFunctor,
96 typename MapFunctor::result_type> >
99 ReducedResultType reducedResult;
101 ReduceFunctor reduce;
106 :
IterateKernel<Iterator, ReducedResultType>(begin, end), reducedResult(), map(_map), reduce(_reduce), reducer(reduceOptions)
111 ReduceFunctor _reduce)
112 : reducedResult(initialValue), map(_map), reduce(_reduce)
119 results.
end = index + 1;
121 results.
vector.append(map(*it));
122 reducer.runReduce(reduce, reducedResult, results);
131 results.
vector.reserve(end - begin);
133 Iterator it = sequenceBeginIterator;
135 for (
int i = begin; i <
end; ++i) {
136 results.
vector.append(map(*(it)));
140 reducer.runReduce(reduce, reducedResult, results);
146 reducer.finish(reduce, reducedResult);
162 return &reducedResult;
166 template <
typename Iterator,
typename MapFunctor>
170 typedef typename MapFunctor::result_type T;
187 Iterator it = sequenceBeginIterator;
189 for (
int i = begin; i <
end; ++i) {
198 template <
typename Iterator,
typename Functor>
204 template <
typename T,
typename Iterator,
typename Functor>
214 template <
typename Sequence,
typename Base,
typename Functor>
218 : Base(_sequence.begin(), _sequence.
end(), functor),
sequence(_sequence)
228 sequence = Sequence();
232 template <
typename T,
typename Sequence,
typename Functor>
242 template <
typename IntermediateType,
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
244 MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
245 ReduceOptions options)
247 typedef typename Sequence::const_iterator Iterator;
251 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));
271 #endif // QT_NO_CONCURRENT
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *)
bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, void *)
MappedEachKernel(Iterator begin, Iterator end, MapFunctor _map)
ReducedResultType ResultType
MapKernel(Iterator begin, Iterator end, MapFunctor _map)
MappedReducedKernel(Iterator begin, Iterator end, MapFunctor _map, ReduceFunctor _reduce, ReduceOptions reduceOptions)
typedef void(APIENTRYP PFNGLBLENDCOLORPROC)(GLclampf red
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *results)
MappedReducedKernel(ReducedResultType initialValue, MapFunctor _map, ReduceFunctor _reduce)
virtual MapFunctor::result_type * result()
#define QT_BEGIN_NAMESPACE
bool runIteration(Iterator it, int, void *)
ThreadEngineStarter< ResultType > startMappedReduced(const Sequence &sequence, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
ReducedResultType * result()
bool shouldThrottleThread()
bool runIteration(Iterator it, int index, ReducedResultType *)
ReducedResultType ReturnType
ThreadEngineStarter< typename ThreadEngine::ResultType > startThreadEngine(ThreadEngine *threadEngine)
virtual bool shouldThrottleThread()
bool runIteration(Iterator it, int, T *result)
SequenceHolder1(const Sequence &_sequence, Functor functor)
ThreadEngineStarter< T > startMapped(Iterator begin, Iterator end, Functor functor)
ThreadEngineStarter< void > startMap(Iterator begin, Iterator end, Functor functor)