5#ifndef QTCONCURRENT_MAP_H
6#define QTCONCURRENT_MAP_H
9#pragma qt_class(QtConcurrentMap)
12#include <QtConcurrent/qtconcurrent_global.h>
14#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
16#include <QtConcurrent/qtconcurrentmapkernel.h>
17#include <QtConcurrent/qtconcurrentreducekernel.h>
18#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
27template <
typename Sequence,
typename MapFunctor>
28QFuture<
void>
map(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map)
30 return startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
33template <
typename Sequence,
typename MapFunctor>
36 return startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
37 std::forward<MapFunctor>(map));
41template <
typename Iterator,
typename MapFunctor>
42QFuture<
void>
map(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
44 return startMap(pool, begin, end, std::forward<MapFunctor>(map));
47template <
typename Iterator,
typename MapFunctor>
48QFuture<
void>
map(Iterator begin, Iterator end, MapFunctor &&map)
50 return startMap(QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map));
54template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
58 ReduceFunctor &&reduce,
62 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
63 (pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
64 std::forward<ReduceFunctor>(reduce), options);
67template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
70 ReduceFunctor &&reduce,
74 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
75 (QThreadPool::globalInstance(), std::forward<Sequence>(sequence),
76 std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce), options);
200template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
205 ReduceFunctor &&reduce,
209 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
210 (pool, begin, end, std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce),
214template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
218 ReduceFunctor &&reduce,
222 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
223 (QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map),
224 std::forward<ReduceFunctor>(reduce), options);
308 typename InitialValueType,
395template <
typename Sequence,
typename MapFunctor>
396void blockingMap(QThreadPool *pool, Sequence &&sequence, MapFunctor map)
398 QFuture<
void> future =
399 startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
400 future.waitForFinished();
403template <
typename Sequence,
typename MapFunctor>
406 QFuture<
void> future = startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
407 std::forward<MapFunctor>(map));
408 future.waitForFinished();
412template <
typename Iterator,
typename MapFunctor>
413void blockingMap(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
415 QFuture<
void> future = startMap(pool, begin, end, map);
416 future.waitForFinished();
419template <
typename Iterator,
typename MapFunctor>
422 QFuture<
void> future = startMap(QThreadPool::globalInstance(), begin, end,
423 std::forward<MapFunctor>(map));
424 future.waitForFinished();
428template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
432 ReduceFunctor &&reduce,
436 QFuture<ResultType> future =
437 mappedReduced<ResultType, Sequence, MapFunctor, ReduceFunctor>(
438 pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
439 std::forward<ReduceFunctor>(reduce), options);
440 return future.takeResult();
443template <
typename ResultType,
typename Sequence,
typename MapFunctor,
typename ReduceFunctor>
446 ReduceFunctor &&reduce,
450 QFuture<ResultType> future =
451 mappedReduced<ResultType>(std::forward<Sequence>(sequence),
452 std::forward<MapFunctor>(map),
453 std::forward<ReduceFunctor>(reduce), options);
454 return future.takeResult();
587template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
592 ReduceFunctor &&reduce,
596 QFuture<ResultType> future =
597 mappedReduced<ResultType>(pool, begin, end, std::forward<MapFunctor>(map),
598 std::forward<ReduceFunctor>(reduce), options);
599 return future.takeResult();
602template <
typename ResultType,
typename Iterator,
typename MapFunctor,
typename ReduceFunctor>
606 ReduceFunctor &&reduce,
610 QFuture<ResultType> future =
611 mappedReduced<ResultType>(begin, end, std::forward<MapFunctor>(map),
612 std::forward<ReduceFunctor>(reduce), options);
613 return future.takeResult();
702 typename InitialValueType,
747template <
typename OutputSequence,
typename InputSequence,
typename MapFunctor>
748OutputSequence
blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
750 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
751 std::forward<MapFunctor>(map),
752 QtPrivate::PushBackWrapper(), OrderedReduce);
755template <
typename OutputSequence,
typename InputSequence,
typename MapFunctor>
758 return blockingMappedReduced<OutputSequence>(
759 QThreadPool::globalInstance(), std::forward<InputSequence>(sequence),
760 std::forward<MapFunctor>(map), QtPrivate::PushBackWrapper(), OrderedReduce);
763template <
typename MapFunctor,
typename InputSequence>
764auto blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
766 using OutputSequence =
typename QtPrivate::MapSequenceResultType<std::decay_t<InputSequence>,
767 MapFunctor>::ResultType;
768 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
769 std::forward<MapFunctor>(map),
770 QtPrivate::PushBackWrapper(), OrderedReduce);
773template <
typename MapFunctor,
typename InputSequence>
776 using OutputSequence =
typename QtPrivate::MapSequenceResultType<std::decay_t<InputSequence>,
777 MapFunctor>::ResultType;
778 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(),
779 std::forward<InputSequence>(sequence),
780 std::forward<MapFunctor>(map),
781 QtPrivate::PushBackWrapper(), OrderedReduce);
785template <
typename Sequence,
typename Iterator,
typename MapFunctor>
786Sequence
blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
788 return blockingMappedReduced<Sequence>(pool, begin, end, std::forward<MapFunctor>(map),
789 QtPrivate::PushBackWrapper(), OrderedReduce);
792template <
typename Sequence,
typename Iterator,
typename MapFunctor>
795 return blockingMappedReduced<Sequence>(QThreadPool::globalInstance(), begin, end,
796 std::forward<MapFunctor>(map),
797 QtPrivate::PushBackWrapper(), OrderedReduce);
800template <
typename Iterator,
typename MapFunctor>
801auto blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
803 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
804 return blockingMappedReduced<OutputSequence>(pool, begin, end, std::forward<MapFunctor>(map),
805 QtPrivate::PushBackWrapper(), OrderedReduce);
808template <
typename Iterator,
typename MapFunctor>
811 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
812 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(), begin, end,
813 std::forward<MapFunctor>(map),
814 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.