summaryrefslogtreecommitdiffstats
path: root/src/concurrent/qtconcurrentmapkernel.h
diff options
context:
space:
mode:
authorIvan Solovev <[email protected]>2020-12-01 19:22:16 +0100
committerIvan Solovev <[email protected]>2020-12-04 15:36:50 +0100
commit3d780c0d7068a6a6876d058314b1970810008c1f (patch)
tree86f3abfbdb95e0f414ebb1d7757108631652ca39 /src/concurrent/qtconcurrentmapkernel.h
parent0c19e3f703a7c3fd59e6db8a9d4ac7091674b552 (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.h26
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)