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// Qt-Security score:significant reason:default
4
5#ifndef QTCONCURRENT_MAP_H
6#define QTCONCURRENT_MAP_H
7
8#if 0
9#pragma qt_class(QtConcurrentMap)
10#endif
11
12#include <QtConcurrent/qtconcurrent_global.h>
13
14#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
15
16#include <QtConcurrent/qtconcurrentmapkernel.h>
17#include <QtConcurrent/qtconcurrentreducekernel.h>
18#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
19
20QT_BEGIN_NAMESPACE
21
22
23
24namespace QtConcurrent {
25
26// map() on sequences
27template <typename Sequence, typename MapFunctor>
28QFuture<void> map(QThreadPool *pool, Sequence &&sequence, MapFunctor &&map)
29{
30 return startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
31}
32
33template <typename Sequence, typename MapFunctor>
34QFuture<void> map(Sequence &&sequence, MapFunctor &&map)
35{
36 return startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
37 std::forward<MapFunctor>(map));
38}
39
40// map() on iterators
41template <typename Iterator, typename MapFunctor>
42QFuture<void> map(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
43{
44 return startMap(pool, begin, end, std::forward<MapFunctor>(map));
45}
46
47template <typename Iterator, typename MapFunctor>
48QFuture<void> map(Iterator begin, Iterator end, MapFunctor &&map)
49{
50 return startMap(QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map));
51}
52
53// mappedReduced() for sequences.
54template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
55QFuture<ResultType> mappedReduced(QThreadPool *pool,
56 Sequence &&sequence,
57 MapFunctor &&map,
58 ReduceFunctor &&reduce,
59 ReduceOptions options = ReduceOptions(UnorderedReduce
61{
62 return startMappedReduced<QtPrivate::MapResultType<Sequence, MapFunctor>, ResultType>
63 (pool, std::forward<Sequence>(sequence), std::forward<MapFunctor>(map),
64 std::forward<ReduceFunctor>(reduce), options);
65}
66
67template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
68QFuture<ResultType> mappedReduced(Sequence &&sequence,
69 MapFunctor &&map,
70 ReduceFunctor &&reduce,
71 ReduceOptions options = ReduceOptions(UnorderedReduce
73{
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);
77}
78
79#ifdef Q_QDOC
80template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
81 typename InitialValueType>
82#else
83template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
84 typename InitialValueType,
86 int> = 0>
87#endif
101#ifdef Q_QDOC
102template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
103 typename InitialValueType>
104#else
105template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
106 typename InitialValueType,
108 int> = 0>
109#endif
122
123template <typename Sequence, typename MapFunctor, typename ReduceFunctor,
137
138template <typename Sequence, typename MapFunctor, typename ReduceFunctor,
151
152#ifdef Q_QDOC
153template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename ResultType,
154 typename InitialValueType>
155#else
156template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename InitialValueType,
160 int> = 0>
161#endif
175
176#ifdef Q_QDOC
177template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename ResultType,
178 typename InitialValueType>
179#else
180template <typename Sequence, typename MapFunctor, typename ReduceFunctor, typename InitialValueType,
184 int> = 0>
185#endif
198
199// mappedReduced() for iterators
200template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
202 Iterator begin,
203 Iterator end,
204 MapFunctor &&map,
205 ReduceFunctor &&reduce,
206 ReduceOptions options = ReduceOptions(UnorderedReduce
208{
209 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
210 (pool, begin, end, std::forward<MapFunctor>(map), std::forward<ReduceFunctor>(reduce),
211 options);
212}
213
214template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
216 Iterator end,
217 MapFunctor &&map,
218 ReduceFunctor &&reduce,
219 ReduceOptions options = ReduceOptions(UnorderedReduce
221{
222 return startMappedReduced<QtPrivate::MapResultType<Iterator, MapFunctor>, ResultType>
223 (QThreadPool::globalInstance(), begin, end, std::forward<MapFunctor>(map),
224 std::forward<ReduceFunctor>(reduce), options);
225}
226
227#ifdef Q_QDOC
228template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
229 typename InitialValueType>
230#else
231template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
232 typename InitialValueType,
234 int> = 0>
235#endif
249
250#ifdef Q_QDOC
251template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
252 typename InitialValueType>
253#else
254template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
255 typename InitialValueType,
257 int> = 0>
258#endif
272
273template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
278 MapFunctor &&map,
282{
285 options);
286}
287
288template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
292 MapFunctor &&map,
296{
300}
301
302#ifdef Q_QDOC
303template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
304 typename InitialValueType>
305#else
306template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
308 typename InitialValueType,
310 int> = 0>
311#endif
315 MapFunctor &&map,
320{
324}
325
326#ifdef Q_QDOC
327template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
328 typename InitialValueType>
329#else
330template<typename Iterator, typename MapFunctor, typename ReduceFunctor,
333 typename InitialValueType,
335 int> = 0>
336#endif
350
351// mapped() for sequences
352template <typename Sequence, typename MapFunctor>
361
362template <typename Sequence, typename MapFunctor>
371
372// mapped() for iterator ranges.
373template <typename Iterator, typename MapFunctor>
383
384template <typename Iterator, typename MapFunctor>
393
394// blockingMap() for sequences
395template <typename Sequence, typename MapFunctor>
396void blockingMap(QThreadPool *pool, Sequence &&sequence, MapFunctor map)
397{
398 QFuture<void> future =
399 startMap(pool, sequence.begin(), sequence.end(), std::forward<MapFunctor>(map));
400 future.waitForFinished();
401}
402
403template <typename Sequence, typename MapFunctor>
404void blockingMap(Sequence &&sequence, MapFunctor &&map)
405{
406 QFuture<void> future = startMap(QThreadPool::globalInstance(), sequence.begin(), sequence.end(),
407 std::forward<MapFunctor>(map));
408 future.waitForFinished();
409}
410
411// blockingMap() for iterator ranges
412template <typename Iterator, typename MapFunctor>
413void blockingMap(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
414{
415 QFuture<void> future = startMap(pool, begin, end, map);
416 future.waitForFinished();
417}
418
419template <typename Iterator, typename MapFunctor>
420void blockingMap(Iterator begin, Iterator end, MapFunctor &&map)
421{
422 QFuture<void> future = startMap(QThreadPool::globalInstance(), begin, end,
423 std::forward<MapFunctor>(map));
424 future.waitForFinished();
425}
426
427// blockingMappedReduced() for sequences
428template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
429ResultType blockingMappedReduced(QThreadPool *pool,
430 Sequence &&sequence,
431 MapFunctor &&map,
432 ReduceFunctor &&reduce,
433 ReduceOptions options = ReduceOptions(UnorderedReduce
435{
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();
441}
442
443template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
444ResultType blockingMappedReduced(Sequence &&sequence,
445 MapFunctor &&map,
446 ReduceFunctor &&reduce,
447 ReduceOptions options = ReduceOptions(UnorderedReduce
449{
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();
455}
456
457#ifdef Q_QDOC
458template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
459 typename InitialValueType>
460#else
461template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
462 typename InitialValueType,
464 int> = 0>
465#endif
480
481#ifdef Q_QDOC
482template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
483 typename InitialValueType>
484#else
485template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor,
486 typename InitialValueType,
488 int> = 0>
489#endif
503
504template <typename MapFunctor, typename ReduceFunctor, typename Sequence,
520
521template <typename MapFunctor, typename ReduceFunctor, typename Sequence,
536
537#ifdef Q_QDOC
538template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename ResultType,
539 typename InitialValueType>
540#else
541template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename InitialValueType,
545 int> = 0>
546#endif
561
562#ifdef Q_QDOC
563template <typename MapFunctor, typename ReduceFunctor, typename Sequence, typename ResultType,
564 typename InitialValueType>
565#else
566template<typename MapFunctor, typename ReduceFunctor, typename Sequence, typename InitialValueType,
570 int> = 0>
571#endif
585
586// blockingMappedReduced() for iterator ranges
587template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
588ResultType blockingMappedReduced(QThreadPool *pool,
589 Iterator begin,
590 Iterator end,
591 MapFunctor &&map,
592 ReduceFunctor &&reduce,
593 ReduceOptions options = ReduceOptions(UnorderedReduce
595{
596 QFuture<ResultType> future =
597 mappedReduced<ResultType>(pool, begin, end, std::forward<MapFunctor>(map),
598 std::forward<ReduceFunctor>(reduce), options);
599 return future.takeResult();
600}
601
602template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
603ResultType blockingMappedReduced(Iterator begin,
604 Iterator end,
605 MapFunctor &&map,
606 ReduceFunctor &&reduce,
607 ReduceOptions options = ReduceOptions(UnorderedReduce
609{
610 QFuture<ResultType> future =
611 mappedReduced<ResultType>(begin, end, std::forward<MapFunctor>(map),
612 std::forward<ReduceFunctor>(reduce), options);
613 return future.takeResult();
614}
615
616#ifdef Q_QDOC
617template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
618 typename InitialValueType>
619#else
620template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
621 typename InitialValueType,
623 int> = 0>
624#endif
640
641#ifdef Q_QDOC
642template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
643 typename InitialValueType>
644#else
645template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor,
646 typename InitialValueType,
648 int> = 0>
649#endif
664
665template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
670 MapFunctor &&map,
674{
678 return future.takeResult();
679}
680
681template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
685 MapFunctor &&map,
689{
693 return future.takeResult();
694}
695
696#ifdef Q_QDOC
697template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
698 typename InitialValueType>
699#else
700template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
702 typename InitialValueType,
704 int> = 0>
705#endif
709 MapFunctor &&map,
714{
718 return future.takeResult();
719}
720
721#ifdef Q_QDOC
722template <typename Iterator, typename MapFunctor, typename ReduceFunctor, typename ResultType,
723 typename InitialValueType>
724#else
725template <typename Iterator, typename MapFunctor, typename ReduceFunctor,
728 typename InitialValueType,
730 int> = 0>
731#endif
745
746// mapped() for sequences with a different putput sequence type.
747template <typename OutputSequence, typename InputSequence, typename MapFunctor>
748OutputSequence blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
749{
750 return blockingMappedReduced<OutputSequence>(pool, std::forward<InputSequence>(sequence),
751 std::forward<MapFunctor>(map),
752 QtPrivate::PushBackWrapper(), OrderedReduce);
753}
754
755template <typename OutputSequence, typename InputSequence, typename MapFunctor>
756OutputSequence blockingMapped(InputSequence &&sequence, MapFunctor &&map)
757{
758 return blockingMappedReduced<OutputSequence>(
759 QThreadPool::globalInstance(), std::forward<InputSequence>(sequence),
760 std::forward<MapFunctor>(map), QtPrivate::PushBackWrapper(), OrderedReduce);
761}
762
763template <typename MapFunctor, typename InputSequence>
764auto blockingMapped(QThreadPool *pool, InputSequence &&sequence, MapFunctor &&map)
765{
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);
771}
772
773template <typename MapFunctor, typename InputSequence>
774auto blockingMapped(InputSequence &&sequence, MapFunctor &&map)
775{
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);
782}
783
784// mapped() for iterator ranges
785template <typename Sequence, typename Iterator, typename MapFunctor>
786Sequence blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
787{
788 return blockingMappedReduced<Sequence>(pool, begin, end, std::forward<MapFunctor>(map),
789 QtPrivate::PushBackWrapper(), OrderedReduce);
790}
791
792template <typename Sequence, typename Iterator, typename MapFunctor>
793Sequence blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
794{
795 return blockingMappedReduced<Sequence>(QThreadPool::globalInstance(), begin, end,
796 std::forward<MapFunctor>(map),
797 QtPrivate::PushBackWrapper(), OrderedReduce);
798}
799
800template <typename Iterator, typename MapFunctor>
801auto blockingMapped(QThreadPool *pool, Iterator begin, Iterator end, MapFunctor &&map)
802{
803 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
804 return blockingMappedReduced<OutputSequence>(pool, begin, end, std::forward<MapFunctor>(map),
805 QtPrivate::PushBackWrapper(), OrderedReduce);
806}
807
808template <typename Iterator, typename MapFunctor>
809auto blockingMapped(Iterator begin, Iterator end, MapFunctor &&map)
810{
811 using OutputSequence = QtPrivate::MapResultType<Iterator, MapFunctor>;
812 return blockingMappedReduced<OutputSequence>(QThreadPool::globalInstance(), begin, end,
813 std::forward<MapFunctor>(map),
814 QtPrivate::PushBackWrapper(), OrderedReduce);
815}
816
817} // namespace QtConcurrent
818
819
820QT_END_NAMESPACE
821
822#endif // QT_NO_CONCURRENT
823
824#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.
QString type