4#ifndef QTCONCURRENT_MAP_H
5#define QTCONCURRENT_MAP_H
8#pragma qt_class(QtConcurrentMap)
11#include <QtConcurrent/qtconcurrent_global.h>
13#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
15#include <QtConcurrent/qtconcurrentmapkernel.h>
16#include <QtConcurrent/qtconcurrentreducekernel.h>
17#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
26template <
typename Sequence,
typename MapFunctor>
27QFuture<
void>
map(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map)
29 return startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
32template <
typename Sequence,
typename MapFunctor>
35 return startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
36 std::forward<MapFunctor>(map));
40template <
typename Iterator,
typename MapFunctor>
41QFuture<
void>
map(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
43 return startMap(pool, begin, end, std::forward<MapFunctor>(map));
46template <
typename Iterator,
typename MapFunctor>
47QFuture<
void>
map(Iterator begin, Iterator end, MapFunctor &&map)
49 return startMap(QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map));
53template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
57 ReduceFunctor &&reduce,
61 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
62 (pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
63 std::forward<ReduceFunctor>(reduce), options);
66template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
69 ReduceFunctor &&reduce,
73 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
74 (QThreadPool::globalInstance(), std::forward<Sequence>(sequence),
75 std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce), options);
199template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
204 ReduceFunctor &&reduce,
208 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
209 (pool, begin, end, std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce),
213template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
217 ReduceFunctor &&reduce,
221 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
222 (QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map),
223 std::forward<ReduceFunctor>(reduce), options);
307 typename InitialValueType,
394template <
typename Sequence,
typename MapFunctor>
395void blockingMap(QThreadPool *pool, Sequence &&sequence, MapFunctor map)
397 QFuture<
void> future =
398 startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
399 future.waitForFinished();
402template <
typename Sequence,
typename MapFunctor>
405 QFuture<
void> future = startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
406 std::forward<MapFunctor>(map));
407 future.waitForFinished();
411template <
typename Iterator,
typename MapFunctor>
412void blockingMap(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
414 QFuture<
void> future = startMap(pool, begin, end, map);
415 future.waitForFinished();
418template <
typename Iterator,
typename MapFunctor>
421 QFuture<
void> future = startMap(QThreadPool::globalInstance(), begin, end,
422 std::forward<MapFunctor>(map));
423 future.waitForFinished();
427template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
431 ReduceFunctor &&reduce,
435 QFuture<ResultType> future =
436 mappedReduced<ResultType, Sequence, MapFunctor, ReduceFunctor>(
437 pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
438 std::forward<ReduceFunctor>(reduce), options);
439 return future.takeResult();
442template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
445 ReduceFunctor &&reduce,
449 QFuture<ResultType> future =
450 mappedReduced<ResultType>(std::forward<Sequence>(sequence),
451 std::forward<MapFunctor>(map),
452 std::forward<ReduceFunctor>(reduce), options);
453 return future.takeResult();
586template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
591 ReduceFunctor &&reduce,
595 QFuture<ResultType> future =
596 mappedReduced<ResultType>(pool, begin, end, std::forward<MapFunctor>(map),
597 std::forward<ReduceFunctor>(reduce), options);
598 return future.takeResult();
601template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
605 ReduceFunctor &&reduce,
609 QFuture<ResultType> future =
610 mappedReduced<ResultType>(begin, end, std::forward<MapFunctor>(map),
611 std::forward<ReduceFunctor>(reduce), options);
612 return future.takeResult();
701 typename InitialValueType,
746template <
typename OutputSequence,
typename InputSequence,
typename MapFunctor>
747OutputSequence
blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
749 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
750 std::forward<MapFunctor>(map),
751 QtPrivate::PushBackWrapper(), OrderedReduce);
754template <
typename OutputSequence,
typename InputSequence,
typename MapFunctor>
757 return blockingMappedReduced<OutputSequence>(
758 QThreadPool::globalInstance(), std::forward<InputSequence>(sequence),
759 std::forward<MapFunctor>(map), QtPrivate::PushBackWrapper(), OrderedReduce);
762template <
typename MapFunctor,
typename InputSequence>
763auto blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
765 using OutputSequence =
typename QtPrivate::MapSequenceResultType<std::decay_t<InputSequence>,
766 MapFunctor>::ResultType;
767 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
768 std::forward<MapFunctor>(map),
769 QtPrivate::PushBackWrapper(), OrderedReduce);
772template <
typename MapFunctor,
typename InputSequence>
775 using OutputSequence =
typename QtPrivate::MapSequenceResultType<std::decay_t<InputSequence>,
776 MapFunctor>::ResultType;
777 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(),
778 std::forward<InputSequence>(sequence),
779 std::forward<MapFunctor>(map),
780 QtPrivate::PushBackWrapper(), OrderedReduce);
784template <
typename Sequence,
typename Iterator,
typename MapFunctor>
785Sequence
blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
787 return blockingMappedReduced<Sequence>(pool, begin, end, std::forward<MapFunctor>(map),
788 QtPrivate::PushBackWrapper(), OrderedReduce);
791template <
typename Sequence,
typename Iterator,
typename MapFunctor>
794 return blockingMappedReduced<Sequence>(QThreadPool::globalInstance(), begin, end,
795 std::forward<MapFunctor>(map),
796 QtPrivate::PushBackWrapper(), OrderedReduce);
799template <
typename Iterator,
typename MapFunctor>
800auto blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
802 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
803 return blockingMappedReduced<OutputSequence>(pool, begin, end, std::forward<MapFunctor>(map),
804 QtPrivate::PushBackWrapper(), OrderedReduce);
807template <
typename Iterator,
typename MapFunctor>
810 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
811 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(), begin, end,
812 std::forward<MapFunctor>(map),
813 QtPrivate::PushBackWrapper(), OrderedReduce);
void blockingMap(QThreadPool *pool, Sequence &&sequence, MapFunctor map)
Calls function once for each item in sequence.
ResultType blockingMappedReduced(Sequence &&sequence, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
QFuture< void > map(Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end.
ResultType blockingMappedReduced(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
auto blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
auto blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
OutputSequence blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
Calls function once for each item in sequence and returns an OutputSequence containing the results.
QFuture< void > map(Sequence &&sequence, MapFunctor &&map)
Calls function once for each item in sequence.
void blockingMap(Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end.
auto blockingMapped(InputSequence &&sequence, MapFunctor &&map)
OutputSequence blockingMapped(InputSequence &&sequence, MapFunctor &&map)
Calls function once for each item in sequence and returns an OutputSequence containing the results.
QFuture< ResultType > mappedReduced(Sequence &&sequence, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
QFuture< ResultType > mappedReduced(Iterator begin, Iterator end, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
QFuture< void > map(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map)
Calls function once for each item in sequence.
Sequence blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end and returns a container with the results.
QFuture< ResultType > mappedReduced(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
ResultType blockingMappedReduced(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
QFuture< ResultType > mappedReduced(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
Sequence blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end and returns a container with the results.
ResultType blockingMappedReduced(Iterator begin, Iterator end, MapFunctor &&map, ReduceFunctor &&reduce, ReduceOptions options=ReduceOptions(UnorderedReduce|SequentialReduce))
auto blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
QFuture< void > map(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end.
void blockingMap(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
Calls function once for each item from begin to end.
void blockingMap(Sequence &&sequence, MapFunctor &&map)
Calls function once for each item in sequence.