4#ifndef QFUTUREINTERFACE_H
5#define QFUTUREINTERFACE_H
7#include <QtCore/qmutex.h>
8#include <QtCore/qresultstore.h>
9#ifndef QT_NO_EXCEPTIONS
22template <
typename T>
class QFuture;
29template<
typename Function,
typename ResultType,
typename ParentResultType>
34template<
class Function,
class ResultType>
37#ifndef QT_NO_EXCEPTIONS
38template<
class Function,
class ResultType>
42class QBasicFutureWatcher;
64 :
d(std::exchange(
other.d,
nullptr)) {}
71 void reportFinished();
72 void reportCanceled();
73#ifndef QT_NO_EXCEPTIONS
75#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
76 void reportException(std::exception_ptr
e);
78 void reportException(
const std::exception_ptr &
e);
81 void reportResultsReady(
int beginIndex,
int endIndex);
86 void setFilterMode(
bool enable);
87 void setProgressRange(
int minimum,
int maximum);
88 int progressMinimum()
const;
89 int progressMaximum()
const;
90 bool isProgressUpdateNeeded()
const;
91 void setProgressValue(
int progressValue);
92 int progressValue()
const;
93 void setProgressValueAndText(
int progressValue,
const QString &progressText);
96 void setExpectedResultCount(
int resultCount);
97 int expectedResultCount();
98 int resultCount()
const;
102 bool isStarted()
const;
103 bool isCanceled()
const;
104 bool isFinished()
const;
105#if QT_DEPRECATED_SINCE(6, 0)
107 bool isPaused() const;
110 void setPaused(
bool paused) { setSuspended(paused); }
113 void togglePaused() { toggleSuspended(); }
115 bool isSuspending()
const;
116 bool isSuspended()
const;
117 bool isThrottled()
const;
118 bool isResultReadyAt(
int index)
const;
119 bool isValid()
const;
120 int loadState()
const;
125 void setSuspended(
bool suspend);
126 void toggleSuspended();
127 void reportSuspended()
const;
128 void setThrottled(
bool enable);
131 bool waitForNextResult();
132 void waitForResult(
int resultIndex);
133 void waitForResume();
134 void suspendIfRequested();
137 bool hasException()
const;
151 bool isChainCanceled()
const;
155 bool refT() const noexcept;
156 bool derefT() const noexcept;
158 void rethrowPossibleException();
170 template<
typename Function,
typename ResultType,
typename ParentResultType>
173 template<
class Function,
class ResultType>
176#ifndef QT_NO_EXCEPTIONS
177 template<
class Function,
class ResultType>
190 void cleanContinuation();
191 void runContinuation()
const;
193 void setLaunchAsync(
bool value);
194 bool launchAsync()
const;
196 bool isRunningOrPending()
const;
243 template <
typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>,
bool> =
true>
264 std::vector<T> takeResults();
267#ifndef QT_NO_EXCEPTIONS
291 if (this->queryState(Canceled) || this->queryState(Finished))
297 const int resultCountBefore = store.
count();
299 if (insertIndex == -1)
302 this->reportResultsReady(resultCountBefore, store.
count());
304 this->reportResultsReady(insertIndex, insertIndex + 1);
310template<
typename...Args, std::enable_if_t<std::is_constructible_v<T, Args...>,
bool>>
314 if (queryState(Canceled) || queryState(Finished))
320 const int oldResultCount = store.
count();
323 if (insertIndex != -1 && (!store.
filterMode() || oldResultCount < store.
count()))
324 reportResultsReady(insertIndex, store.
count());
325 return insertIndex != -1;
331 return reportAndEmplaceResult(
index, std::move(
result));
337 return reportAndMoveResult(std::move(
result),
index);
350 if (this->queryState(Canceled) || this->queryState(Finished))
354 auto &store = resultStoreBase();
356 const int resultCountBefore = store.count();
357 const int insertIndex = store.addResults(beginIndex, &_results,
count);
358 if (insertIndex == -1)
360 if (store.filterMode()) {
361 this->reportResultsReady(resultCountBefore, store.count());
363 this->reportResultsReady(insertIndex, insertIndex + _results.
size());
371 bool resultReported =
false;
373 resultReported = reportResult(
result);
375 return resultReported;
384 return resultStoreBase().resultAt(
index).template
value<T>();
399 if (this->isCanceled()) {
400 rethrowPossibleException();
410 while (
it != resultStoreBase().
end()) {
411 res.append(
it.value<T>());
433 resultStoreBase().template clear<T>();
449 res.reserve(resultCount());
454 for (
auto endIt = resultStoreBase().
end();
it != endIt; ++
it)
455 res.push_back(std::move_if_noexcept(
it.value<T>()));
458 resultStoreBase().template clear<T>();
QtPrivate::ResultStoreBase & resultStoreBase()
void waitForResult(int resultIndex)
bool operator==(const QFutureInterfaceBase &other) const
bool operator!=(const QFutureInterfaceBase &other) const
bool derefT() const noexcept
void swap(QFutureInterfaceBase &other) noexcept
bool refT() const noexcept
void reportException(const QException &e)
void runContinuation() const
QFutureInterfaceBase(QFutureInterfaceBase &&other) noexcept
bool hasException() const
QFutureInterface(const QFutureInterfaceBase &dd)
bool reportFinished(const void *)
bool reportResults(const QList< void > &, int)
bool reportResult(const void *, int)
static QFutureInterface< void > canceledResult()
QFutureInterface(QFutureInterface &&other)=default
bool reportAndEmplaceResult(int index, Args &&...args)
QFutureInterface(const QFutureInterfaceBase &dd)
bool reportResult(T &&result, int index=-1)
QFutureInterface & operator=(const QFutureInterface &other)
bool reportResults(const QList< T > &results, int beginIndex=-1, int count=-1)
const T * resultPointer(int index) const
QFutureInterface(State initialState=NoState)
bool reportResult(const T &result, int index=-1)
static QFutureInterface canceledResult()
void reportException(const std::exception_ptr &e)
QFutureInterface(const QFutureInterface &other)
bool reportFinished(const T *result)
bool reportResult(const T *result, int index=-1)
bool reportAndMoveResult(T &&result, int index=-1)
QFutureInterface(QFutureInterfaceBase &&dd) noexcept
const T & resultReference(int index) const
qsizetype size() const noexcept
\macro QT_RESTRICTED_CAST_FROM_ASCII
int emplaceResult(int index, Args &&...args)
int addResult(int index, const void *result)
QSet< QString >::iterator it
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
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
static QDBusError::ErrorType get(const char *name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLenum GLsizei count
GLsizei const void * pointer
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define QT_REQUIRE_CONFIG(feature)
#define QT_DEPRECATED_VERSION_X_6_0(text)
QFuture< void > future
[5]