summaryrefslogtreecommitdiffstats
path: root/src/concurrent/qtconcurrentfilterkernel.h
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2020-12-01 19:22:16 +0100
committerIvan Solovev <ivan.solovev@qt.io>2020-12-04 15:36:50 +0100
commit3d780c0d7068a6a6876d058314b1970810008c1f (patch)
tree86f3abfbdb95e0f414ebb1d7757108631652ca39 /src/concurrent/qtconcurrentfilterkernel.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 <sona.kurazyan@qt.io>
Diffstat (limited to 'src/concurrent/qtconcurrentfilterkernel.h')
-rw-r--r--src/concurrent/qtconcurrentfilterkernel.h20
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)