42 #ifndef QTCONCURRENT_FILTERKERNEL_H
43 #define QTCONCURRENT_FILTERKERNEL_H
47 #ifndef QT_NO_CONCURRENT
81 template <
typename Sequence,
typename KeepFunctor,
typename ReduceFunctor>
86 typedef typename ReduceFunctor::result_type T;
88 Sequence reducedResult;
95 FilterKernel(Sequence &_sequence, KeepFunctor _keep, ReduceFunctor _reduce)
96 : IterateKernelType(const_cast<const Sequence &>(_sequence).
begin(), const_cast<const Sequence &>(_sequence).
end()), reducedResult(),
107 results.
end = index + 1;
110 results.
vector.append(*it);
112 reducer.
runReduce(reduce, reducedResult, results);
121 results.
vector.reserve(end - begin);
124 typename Sequence::const_iterator it = sequenceBeginIterator;
126 for (
int i = begin; i <
end; ++i) {
128 results.
vector.append(*it);
132 reducer.
runReduce(reduce, reducedResult, results);
138 reducer.
finish(reduce, reducedResult);
139 sequence = reducedResult;
157 template <
typename ReducedResultType,
159 typename KeepFunctor,
160 typename ReduceFunctor,
166 ReducedResultType reducedResult;
168 ReduceFunctor reduce;
176 ReduceFunctor _reduce,
177 ReduceOptions reduceOption)
178 : IterateKernelType(begin, end), reducedResult(), keep(_keep), reduce(_reduce), reducer(reduceOption)
184 ReduceFunctor reduce,
186 : reducedResult(initialValue), keep(keep), reduce(reduce), reducer(reduceOption)
194 results.
end = index + 1;
197 results.
vector.append(*it);
199 reducer.runReduce(reduce, reducedResult, results);
208 results.
vector.reserve(end - begin);
210 Iterator it = sequenceBeginIterator;
212 for (
int i = begin; i <
end; ++i) {
214 results.
vector.append(*it);
218 reducer.runReduce(reduce, reducedResult, results);
224 reducer.finish(reduce, reducedResult);
241 return &reducedResult;
246 template <
typename Iterator,
typename KeepFunctor>
259 : IterateKernelType(begin, end), keep(_keep)
284 results.
vector.reserve(count);
286 Iterator it = sequenceBeginIterator;
288 for (
int i = begin; i <
end; ++i) {
290 results.
vector.append(*it);
299 template <
typename Iterator,
typename KeepFunctor>
301 ThreadEngineStarter<typename qValueType<Iterator>::value_type>
307 template <
typename Sequence,
typename KeepFunctor>
308 inline ThreadEngineStarter<typename Sequence::value_type>
318 template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
320 MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
321 ReduceOptions options)
323 typedef typename Sequence::const_iterator Iterator;
327 return startThreadEngine(
new SequenceHolderType(sequence, mapFunctor, reduceFunctor, options));
331 template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
333 MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
334 ReduceOptions options)
338 return startThreadEngine(
new FilteredReduceType(begin, end, mapFunctor, reduceFunctor, options));
349 #endif // QT_NO_CONCURRENT
FilteredEachKernel(Iterator begin, Iterator end, KeepFunctor _keep)
ReducedResultType ReturnType
QFutureInterfaceBase * futureInterface
bool shouldThrottleThread()
bool runIteration(Iterator it, int index, T *)
bool runIteration(typename Sequence::const_iterator it, int index, T *)
const Sequence::const_iterator begin
void reportResults(const QVector< qValueType< Iterator >::value_type > &_result, int index=-1, int count=-1)
ThreadEngineStarter< ResultType > startFilteredReduced(const Sequence &sequence, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
#define QT_BEGIN_NAMESPACE
bool shouldThrottleThread()
ReducedResultType * result()
FilterKernel(Sequence &_sequence, KeepFunctor _keep, ReduceFunctor _reduce)
GLuint GLuint GLsizei count
bool runIterations(typename Sequence::const_iterator sequenceBeginIterator, int begin, int end, T *)
ThreadEngineStarter< typename ThreadEngine::ResultType > startThreadEngine(ThreadEngine *threadEngine)
ReducedResultType ResultType
virtual bool shouldThrottleThread()
void finish(ReduceFunctor &reduce, ReduceResultType &r)
FilteredReducedKernel(Iterator begin, Iterator end, KeepFunctor _keep, ReduceFunctor _reduce, ReduceOptions reduceOption)
bool runIteration(Iterator it, int index, ReducedResultType *)
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *)
const Sequence::const_iterator end
void setFilterMode(bool enable)
void runReduce(ReduceFunctor &reduce, ReduceResultType &r, const IntermediateResults< T > &result)
bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *)
ThreadEngineStarter< typename qValueType< Iterator >::value_type > startFiltered(Iterator begin, Iterator end, KeepFunctor functor)
void reportResult(const qValueType< Iterator >::value_type *_result, int index=-1)