diff options
author | Ivan Solovev <[email protected]> | 2020-12-01 19:22:16 +0100 |
---|---|---|
committer | Ivan Solovev <[email protected]> | 2020-12-04 15:36:50 +0100 |
commit | 3d780c0d7068a6a6876d058314b1970810008c1f (patch) | |
tree | 86f3abfbdb95e0f414ebb1d7757108631652ca39 /src/concurrent/qtconcurrentmapkernel.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 <[email protected]>
Diffstat (limited to 'src/concurrent/qtconcurrentmapkernel.h')
-rw-r--r-- | src/concurrent/qtconcurrentmapkernel.h | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/concurrent/qtconcurrentmapkernel.h b/src/concurrent/qtconcurrentmapkernel.h index 2753bc7d0a0..62e4c0b5dde 100644 --- a/src/concurrent/qtconcurrentmapkernel.h +++ b/src/concurrent/qtconcurrentmapkernel.h @@ -93,7 +93,7 @@ template <typename ReducedResultType, QtPrivate::MapResultType<Iterator, MapFunctor>>> class MappedReducedKernel : public IterateKernel<Iterator, ReducedResultType> { - ReducedResultType reducedResult; + ReducedResultType &reducedResult; MapFunctor map; ReduceFunctor reduce; Reducer reducer; @@ -102,20 +102,22 @@ class MappedReducedKernel : public IterateKernel<Iterator, ReducedResultType> public: typedef ReducedResultType ReturnType; - template <typename F1 = MapFunctor, typename F2 = ReduceFunctor> - MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, - F2 &&_reduce, ReduceOptions reduceOptions) - : IterateKernel<Iterator, ReducedResultType>(pool, begin, end), reducedResult(), - map(std::forward<F1>(_map)), reduce(std::forward<F2>(_reduce)), + template<typename F1 = MapFunctor, typename F2 = ReduceFunctor> + MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, F2 &&_reduce, + ReduceOptions reduceOptions) + : IterateKernel<Iterator, ReducedResultType>(pool, begin, end), + reducedResult(this->defaultValue.value), + map(std::forward<F1>(_map)), + reduce(std::forward<F2>(_reduce)), reducer(pool, reduceOptions) { } - template <typename F1 = MapFunctor, typename F2 = ReduceFunctor> - MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, - F2 &&_reduce, ReducedResultType &&initialValue, - ReduceOptions reduceOptions) - : IterateKernel<Iterator, ReducedResultType>(pool, begin, end), - reducedResult(std::forward<ReducedResultType>(initialValue)), + template<typename F1 = MapFunctor, typename F2 = ReduceFunctor> + MappedReducedKernel(QThreadPool *pool, Iterator begin, Iterator end, F1 &&_map, F2 &&_reduce, + ReducedResultType &&initialValue, ReduceOptions reduceOptions) + : IterateKernel<Iterator, ReducedResultType>(pool, begin, end, + std::forward<ReducedResultType>(initialValue)), + reducedResult(this->defaultValue.value), map(std::forward<F1>(_map)), reduce(std::forward<F2>(_reduce)), reducer(pool, reduceOptions) |