7#include <QtCore/qglobal.h>
9#include <QtCore/qfutureinterface.h>
10#include <QtCore/qmetatype.h>
11#include <QtCore/qstring.h>
13#include <QtCore/qfuture_impl.h>
27 static_assert (std::is_move_constructible_v<T>
28 || std::is_same_v<T, void>,
29 "A move-constructible type or type void is required");
35 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
40 template<
typename U = T,
typename = QtPrivate::EnableForVo
id<U>>
46 template<
typename U,
typename V = T,
typename = QtPrivate::EnableForVo
id<V>>
51 template<
typename U,
typename V = T,
typename = QtPrivate::EnableForVo
id<V>>
67#if QT_DEPRECATED_SINCE(6, 0)
69 void setPaused(
bool paused) { d.setSuspended(paused); }
81 void togglePaused() { d.toggleSuspended(); }
104 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
107 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
110 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
111 bool isResultReadyAt(
int resultIndex)
const {
return d.isResultReadyAt(resultIndex); }
113 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
116 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
121 template<
typename U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
122 std::vector<T> takeResults() {
return d.takeResults(); }
127 template<
class Function>
130 template<
class Function>
133 template<
class Function>
136 template<
class Function>
139 template<
class Function>
142#ifndef QT_NO_EXCEPTIONS
144 typename = std::enable_if_t<!QtPrivate::ArgResolver<Function>::HasExtraArgs>>
148 typename = std::enable_if_t<!QtPrivate::ArgResolver<Function>::HasExtraArgs>>
152 template<
class Function,
typename = std::enable_if_t<std::is_invocable_r_v<T, Function>>>
155 template<
class Function,
typename = std::enable_if_t<std::is_invocable_r_v<T, Function>>>
159 template<
class U = T,
typename = std::enable_if_t<QtPrivate::isQFutureV<U>>>
169 static_assert(!std::is_same_v<T, void>,
170 "It isn't possible to define QFuture<void>::const_iterator");
180 : future(_future),
index(advanceIndex(_index, 0)) { }
183 { future =
o.future;
index =
o.index;
return *
this; }
189 {
index = advanceIndex(
index, 1);
return *
this; }
191 {
index = advanceIndex(
index, -1);
return *
this; }
233 int advanceIndex(
int idx,
int n)
const
236 if (idx == -1 &&
n >= 0)
242 future->d.waitForFinished();
245 const int targetIndex = (idx == -1) ? future->
resultCount() +
n : idx +
n;
246 future->d.waitForResult(targetIndex);
249 return (targetIndex < future->
resultCount()) ? targetIndex : -1;
258 template<
class U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
261 template<
class U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
264 template<
class U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
267 template<
class U = T,
typename = QtPrivate::EnableForNonVo
id<U>>
278 template<
class Function,
class ResultType,
class ParentResultType>
281 template<
class Function,
class ResultType>
284#ifndef QT_NO_EXCEPTIONS
285 template<
class Function,
class ResultType>
289 template<
typename ResultType>
294 using QFuturePrivate =
300 mutable QFuturePrivate
d;
304template<
typename U,
typename>
308 return d.resultReference(0);
312template<
typename U,
typename>
316 return d.resultReference(
index);
326template<
class Function>
333template<
class Function>
344template<
class Function>
355template<
class Function>
365#ifndef QT_NO_EXCEPTIONS
367template<
class Function,
typename>
377template<
class Function,
typename>
389template<
class Function,
typename>
399template<
class Function,
typename>
409template<
class U,
typename>
412 if constexpr (QtPrivate::isQFutureV<typename QtPrivate::Future<T>::type>)
436 if constexpr (std::is_same_v<T, void>)
439 return QMetaType::registerConverter<QFuture<T>,
QFuture<void>>(
450template<
typename OutputSequence,
typename InputIt,
451 typename ValueType =
typename std::iterator_traits<InputIt>::value_type,
452 std::enable_if_t<std::conjunction_v<QtPrivate::IsForwardIterable<InputIt>,
458 return QtPrivate::whenAllImpl<OutputSequence, InputIt, ValueType>(
first, last);
461template<typename InputIt, typename ValueType = typename std::iterator_traits<InputIt>::value_type,
462 std::enable_if_t<std::conjunction_v<QtPrivate::IsForwardIterable<InputIt>,
467 return QtPrivate::whenAllImpl<QList<ValueType>, InputIt, ValueType>(
first, last);
470template<
typename OutputSequence,
typename... Futures,
471 std::enable_if_t<std::conjunction_v<QtPrivate::IsRandomAccessible<OutputSequence>,
480template<
typename... Futures,
486 return QtPrivate::whenAllImpl<QList<std::variant<std::decay_t<Futures>...>>, Futures...>(
487 std::forward<Futures>(futures)...);
490template<typename InputIt, typename ValueType = typename std::iterator_traits<InputIt>::value_type,
491 std::enable_if_t<std::conjunction_v<QtPrivate::IsForwardIterable<InputIt>,
497 return QtPrivate::whenAnyImpl<InputIt, ValueType>(
first, last);
500template<
typename... Futures,
511template<
typename OutputSequence,
typename InputIt>
514template<
typename OutputSequence,
typename... Futures>
517template<
typename T,
typename InputIt>
520template<
typename... Futures>
525#if QT_DEPRECATED_SINCE(6, 10)
529template<
typename T =
void>
531static
QFuture<T> makeReadyFuture()
static QFutureInterfaceBase get(const QFuture< T > &future)
const_iterator & operator-=(int j)
const_iterator operator-(int j) const
std::bidirectional_iterator_tag iterator_category
const_iterator operator++(int)
const_iterator operator--(int)
const_iterator & operator++()
const_iterator(const const_iterator &o)
friend const_iterator operator+(int j, const_iterator k)
bool operator!=(const const_iterator &other) const
const_iterator & operator--()
const_iterator & operator+=(int j)
bool operator==(const const_iterator &o) const
const_iterator operator+(int j) const
const T * operator->() const
const_iterator(QFuture const *const _future, int _index)
const T & operator*() const
const_iterator & operator=(const const_iterator &o)
QFuture< ResultType< Function > > then(Function &&function)
QFuture< T > onFailed(Function &&handler)
typename QtPrivate::ResultTypeHelper< Function, T >::ResultType ResultType
void setSuspended(bool suspend)
int progressMaximum() const
QFuture(const QFuture< U > &other)
QList< T > results() const
QFuture< ResultType< Function > > then(QThreadPool *pool, Function &&function)
T resultAt(int index) const
const_iterator end() const
const_iterator begin() const
const_iterator ConstIterator
int progressValue() const
QString progressText() const
QFuture< T > onFailed(QObject *context, Function &&handler)
QFuture< void > & operator=(const QFuture< U > &other)
bool isSuspending() const
int progressMinimum() const
QFuture< T > onCanceled(Function &&handler)
QFuture< T > onCanceled(QObject *context, Function &&handler)
const_iterator constEnd() const
QFuture(QFutureInterfaceBase *p)
QFuture(QFutureInterface< T > *p)
friend class QFutureInterfaceBase
bool isResultReadyAt(int resultIndex) const
QFuture< ResultType< Function > > then(QObject *context, Function &&function)
const_iterator constBegin() const
QFuture< ResultType< Function > > then(QtFuture::Launch policy, Function &&function)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
QFuture< OutputSequence > whenAll(InputIt first, InputIt last)
Q_CORE_EXPORT QFuture< void > makeReadyVoidFuture()
QFuture< WhenAnyResult< typename QtPrivate::Future< ValueType >::type > > whenAny(InputIt first, InputIt last)
QFuture< OutputSequence > whenAllImpl(InputIt first, InputIt last)
std::bool_constant<(sizeof...(Args) > 0)> NotEmpty
QFuture< QtFuture::WhenAnyResult< typename Future< ValueType >::type > > whenAnyImpl(InputIt first, InputIt last)
std::is_convertible< typename std::iterator_traits< std::decay_t< decltype(std::begin(std::declval< Sequence >()))> >::iterator_category, std::random_access_iterator_tag > IsRandomAccessible
std::bool_constant< isQFutureV< T > > isQFuture
#define QT_WARNING_DISABLE_DEPRECATED
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
#define Q_DECLARE_SEQUENTIAL_ITERATOR(C)
#define QT_REQUIRE_CONFIG(feature)
#define QT_DEPRECATED_VERSION_X(major, minor, text)
#define QT_DEPRECATED_VERSION_X_6_0(text)
QFuture< void > future
[5]
static auto unwrapImpl(T *outer)