diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2020-12-01 19:22:16 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2020-12-04 15:36:50 +0100 |
commit | 3d780c0d7068a6a6876d058314b1970810008c1f (patch) | |
tree | 86f3abfbdb95e0f414ebb1d7757108631652ca39 /src/concurrent/qtconcurrentfilterkernel.h | |
parent | 0c19e3f703a7c3fd59e6db8a9d4ac7091674b552 (diff) |
QtConcurrent: filter/map reduction without default ctor
Previously a default constructor was required for the result type
of mappedReduced() and filteredReduced(), even if a default value
was provided.
This patch fixes the problem.
The issue was in the ResultReporter type, that was calling
QList::resize() to adjust the size of expected reported results.
A default-value parameter was added to the class, so that
a corresponding overload of QList::resize could be invoked.
Task-number: QTBUG-88452
Change-Id: I51113753e314d76aa74d201b5a7e327a6ca75f47
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'src/concurrent/qtconcurrentfilterkernel.h')
-rw-r--r-- | src/concurrent/qtconcurrentfilterkernel.h | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/concurrent/qtconcurrentfilterkernel.h b/src/concurrent/qtconcurrentfilterkernel.h index ede775e9bd..379ea5a946 100644 --- a/src/concurrent/qtconcurrentfilterkernel.h +++ b/src/concurrent/qtconcurrentfilterkernel.h @@ -160,21 +160,19 @@ template <typename ReducedResultType, typename qValueType<Iterator>::value_type> > class FilteredReducedKernel : public IterateKernel<Iterator, ReducedResultType> { - ReducedResultType reducedResult; + ReducedResultType &reducedResult; KeepFunctor keep; ReduceFunctor reduce; Reducer reducer; typedef IterateKernel<Iterator, ReducedResultType> IterateKernelType; public: - template <typename Keep = KeepFunctor, typename Reduce = ReduceFunctor> - FilteredReducedKernel(QThreadPool *pool, - Iterator begin, - Iterator end, - Keep &&_keep, - Reduce &&_reduce, - ReduceOptions reduceOption) - : IterateKernelType(pool, begin, end), reducedResult(), keep(std::forward<Keep>(_keep)), + template<typename Keep = KeepFunctor, typename Reduce = ReduceFunctor> + FilteredReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, Keep &&_keep, + Reduce &&_reduce, ReduceOptions reduceOption) + : IterateKernelType(pool, begin, end), + reducedResult(this->defaultValue.value), + keep(std::forward<Keep>(_keep)), reduce(std::forward<Reduce>(_reduce)), reducer(pool, reduceOption) { } @@ -183,8 +181,8 @@ public: FilteredReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, Keep &&_keep, Reduce &&_reduce, ReducedResultType &&initialValue, ReduceOptions reduceOption) - : IterateKernelType(pool, begin, end), - reducedResult(std::forward<ReducedResultType>(initialValue)), + : IterateKernelType(pool, begin, end, std::forward<ReducedResultType>(initialValue)), + reducedResult(this->defaultValue.value), keep(std::forward<Keep>(_keep)), reduce(std::forward<Reduce>(_reduce)), reducer(pool, reduceOption) |