Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtconcurrentmap.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTCONCURRENT_MAP_H
5#define QTCONCURRENT_MAP_H
6
7#if 0
8#pragma qt_class(QtConcurrentMap)
9#endif
10
11#include <QtConcurrent/qtconcurrent_global.h>
12
13#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
14
15#include <QtConcurrent/qtconcurrentmapkernel.h>
16#include <QtConcurrent/qtconcurrentreducekernel.h>
17#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
18
19QT_BEGIN_NAMESPACE
20
21
22
23namespace QtConcurrent {
24
25// map() on sequences
26template <typename Sequence, typename MapFunctor>
27QFuture<void> map(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map)
28{
29 return startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
30}
31
32template <typename Sequence, typename MapFunctor>
33QFuture<void> map(Sequence &&sequence, MapFunctor &&map)
34{
35 return startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
36 std::forward<MapFunctor>(map));
37}
38
39// map() on iterators
40template <typename Iterator, typename MapFunctor>
41QFuture<void> map(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
42{
43 return startMap(pool, begin, end, std::forward<MapFunctor>(map));
44}
45
46template <typename Iterator, typename MapFunctor>
47QFuture<void> map(Iterator begin, Iterator end, MapFunctor &&map)
48{
49 return startMap(QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map));
50}
51
52// mappedReduced() for sequences.
53template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
54QFuture<ResultType> mappedReduced(QThreadPool *pool,
55 Sequence &&sequence,
56 MapFunctor &&map,
57 ReduceFunctor &&reduce,
58 ReduceOptions options = ReduceOptions(UnorderedReduce
60{
61 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
62 (pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
63 std::forward<ReduceFunctor>(reduce), options);
64}
65
66template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
67QFuture<ResultType> mappedReduced(Sequence &&sequence,
68 MapFunctor &&map,
69 ReduceFunctor &&reduce,
70 ReduceOptions options = ReduceOptions(UnorderedReduce
72{
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);
76}
77
78#ifdef Q_QDOC
79template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
80 typename InitialValueType>
81#else
82template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
83 typename InitialValueType,
85 int> = 0>
86#endif
100#ifdef Q_QDOC
101template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
102 typename InitialValueType>
103#else
104template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
105 typename InitialValueType,
107 int> = 0>
108#endif
121
122template <typename Sequence, typename MapFunctor, typename ReduceFunctor,
136
137template <typename Sequence, typename MapFunctor, typename ReduceFunctor,
150
151#ifdef Q_QDOC
152template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename ResultType,
153 typename InitialValueType>
154#else
155template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename InitialValueType,
159 int> = 0>
160#endif
174
175#ifdef Q_QDOC
176template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename ResultType,
177 typename InitialValueType>
178#else
179template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename InitialValueType,
183 int> = 0>
184#endif
197
198// mappedReduced() for iterators
199template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
201 Iterator begin,
202 Iterator end,
203 MapFunctor &&map,
204 ReduceFunctor &&reduce,
205 ReduceOptions options = ReduceOptions(UnorderedReduce
207{
208 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
209 (pool, begin, end, std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce),
210 options);
211}
212
213template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
215 Iterator end,
216 MapFunctor &&map,
217 ReduceFunctor &&reduce,
218 ReduceOptions options = ReduceOptions(UnorderedReduce
220{
221 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
222 (QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map),
223 std::forward<ReduceFunctor>(reduce), options);
224}
225
226#ifdef Q_QDOC
227template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
228 typename InitialValueType>
229#else
230template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
231 typename InitialValueType,
233 int> = 0>
234#endif
248
249#ifdef Q_QDOC
250template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
251 typename InitialValueType>
252#else
253template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
254 typename InitialValueType,
256 int> = 0>
257#endif
271
272template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
277 MapFunctor &&map,
281{
284 options);
285}
286
287template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
291 MapFunctor &&map,
295{
299}
300
301#ifdef Q_QDOC
302template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
303 typename InitialValueType>
304#else
305template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
307 typename InitialValueType,
309 int> = 0>
310#endif
314 MapFunctor &&map,
319{
323}
324
325#ifdef Q_QDOC
326template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
327 typename InitialValueType>
328#else
329template<typename Iterator, typename MapFunctor, typename ReduceFunctor,
332 typename InitialValueType,
334 int> = 0>
335#endif
349
350// mapped() for sequences
351template <typename Sequence, typename MapFunctor>
360
361template <typename Sequence, typename MapFunctor>
370
371// mapped() for iterator ranges.
372template <typename Iterator, typename MapFunctor>
382
383template <typename Iterator, typename MapFunctor>
392
393// blockingMap() for sequences
394template <typename Sequence, typename MapFunctor>
395void blockingMap(QThreadPool *pool, Sequence &&sequence, MapFunctor map)
396{
397 QFuture<void> future =
398 startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
399 future.waitForFinished();
400}
401
402template <typename Sequence, typename MapFunctor>
403void blockingMap(Sequence &&sequence, MapFunctor &&map)
404{
405 QFuture<void> future = startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
406 std::forward<MapFunctor>(map));
407 future.waitForFinished();
408}
409
410// blockingMap() for iterator ranges
411template <typename Iterator, typename MapFunctor>
412void blockingMap(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
413{
414 QFuture<void> future = startMap(pool, begin, end, map);
415 future.waitForFinished();
416}
417
418template <typename Iterator, typename MapFunctor>
419void blockingMap(Iterator begin, Iterator end, MapFunctor &&map)
420{
421 QFuture<void> future = startMap(QThreadPool::globalInstance(), begin, end,
422 std::forward<MapFunctor>(map));
423 future.waitForFinished();
424}
425
426// blockingMappedReduced() for sequences
427template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
428ResultType blockingMappedReduced(QThreadPool *pool,
429 Sequence &&sequence,
430 MapFunctor &&map,
431 ReduceFunctor &&reduce,
432 ReduceOptions options = ReduceOptions(UnorderedReduce
434{
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();
440}
441
442template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
443ResultType blockingMappedReduced(Sequence &&sequence,
444 MapFunctor &&map,
445 ReduceFunctor &&reduce,
446 ReduceOptions options = ReduceOptions(UnorderedReduce
448{
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();
454}
455
456#ifdef Q_QDOC
457template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
458 typename InitialValueType>
459#else
460template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
461 typename InitialValueType,
463 int> = 0>
464#endif
479
480#ifdef Q_QDOC
481template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
482 typename InitialValueType>
483#else
484template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
485 typename InitialValueType,
487 int> = 0>
488#endif
502
503template <typename MapFunctor, typename ReduceFunctor, typename Sequence,
519
520template <typename MapFunctor, typename ReduceFunctor, typename Sequence,
535
536#ifdef Q_QDOC
537template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename ResultType,
538 typename InitialValueType>
539#else
540template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename InitialValueType,
544 int> = 0>
545#endif
560
561#ifdef Q_QDOC
562template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename ResultType,
563 typename InitialValueType>
564#else
565template<typename MapFunctor, typename ReduceFunctor, typename Sequence, typename InitialValueType,
569 int> = 0>
570#endif
584
585// blockingMappedReduced() for iterator ranges
586template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
587ResultType blockingMappedReduced(QThreadPool *pool,
588 Iterator begin,
589 Iterator end,
590 MapFunctor &&map,
591 ReduceFunctor &&reduce,
592 ReduceOptions options = ReduceOptions(UnorderedReduce
594{
595 QFuture<ResultType> future =
596 mappedReduced<ResultType>(pool, begin, end, std::forward<MapFunctor>(map),
597 std::forward<ReduceFunctor>(reduce), options);
598 return future.takeResult();
599}
600
601template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
602ResultType blockingMappedReduced(Iterator begin,
603 Iterator end,
604 MapFunctor &&map,
605 ReduceFunctor &&reduce,
606 ReduceOptions options = ReduceOptions(UnorderedReduce
608{
609 QFuture<ResultType> future =
610 mappedReduced<ResultType>(begin, end, std::forward<MapFunctor>(map),
611 std::forward<ReduceFunctor>(reduce), options);
612 return future.takeResult();
613}
614
615#ifdef Q_QDOC
616template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
617 typename InitialValueType>
618#else
619template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
620 typename InitialValueType,
622 int> = 0>
623#endif
639
640#ifdef Q_QDOC
641template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
642 typename InitialValueType>
643#else
644template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
645 typename InitialValueType,
647 int> = 0>
648#endif
663
664template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
669 MapFunctor &&map,
673{
677 return future.takeResult();
678}
679
680template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
684 MapFunctor &&map,
688{
692 return future.takeResult();
693}
694
695#ifdef Q_QDOC
696template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
697 typename InitialValueType>
698#else
699template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
701 typename InitialValueType,
703 int> = 0>
704#endif
708 MapFunctor &&map,
713{
717 return future.takeResult();
718}
719
720#ifdef Q_QDOC
721template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
722 typename InitialValueType>
723#else
724template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
727 typename InitialValueType,
729 int> = 0>
730#endif
744
745// mapped() for sequences with a different putput sequence type.
746template <typename OutputSequence, typename InputSequence, typename MapFunctor>
747OutputSequence blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
748{
749 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
750 std::forward<MapFunctor>(map),
751 QtPrivate::PushBackWrapper(), OrderedReduce);
752}
753
754template <typename OutputSequence, typename InputSequence, typename MapFunctor>
755OutputSequence blockingMapped(InputSequence &&sequence, MapFunctor &&map)
756{
757 return blockingMappedReduced<OutputSequence>(
758 QThreadPool::globalInstance(), std::forward<InputSequence>(sequence),
759 std::forward<MapFunctor>(map), QtPrivate::PushBackWrapper(), OrderedReduce);
760}
761
762template <typename MapFunctor, typename InputSequence>
763auto blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
764{
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);
770}
771
772template <typename MapFunctor, typename InputSequence>
773auto blockingMapped(InputSequence &&sequence, MapFunctor &&map)
774{
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);
781}
782
783// mapped() for iterator ranges
784template <typename Sequence, typename Iterator, typename MapFunctor>
785Sequence blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
786{
787 return blockingMappedReduced<Sequence>(pool, begin, end, std::forward<MapFunctor>(map),
788 QtPrivate::PushBackWrapper(), OrderedReduce);
789}
790
791template <typename Sequence, typename Iterator, typename MapFunctor>
792Sequence blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
793{
794 return blockingMappedReduced<Sequence>(QThreadPool::globalInstance(), begin, end,
795 std::forward<MapFunctor>(map),
796 QtPrivate::PushBackWrapper(), OrderedReduce);
797}
798
799template <typename Iterator, typename MapFunctor>
800auto blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
801{
802 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
803 return blockingMappedReduced<OutputSequence>(pool, begin, end, std::forward<MapFunctor>(map),
804 QtPrivate::PushBackWrapper(), OrderedReduce);
805}
806
807template <typename Iterator, typename MapFunctor>
808auto blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
809{
810 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
811 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(), begin, end,
812 std::forward<MapFunctor>(map),
813 QtPrivate::PushBackWrapper(), OrderedReduce);
814}
815
816} // namespace QtConcurrent
817
818
819QT_END_NAMESPACE
820
821#endif // QT_NO_CONCURRENT
822
823#endif
\inmodule QtConcurrent
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.
QMetaType type
[2]