4#ifndef QFUTUREINTERFACE_P_H
5#define QFUTUREINTERFACE_P_H
18#include <QtCore/private/qglobal_p.h>
19#include <QtCore/qelapsedtimer.h>
20#include <QtCore/qcoreevent.h>
21#include <QtCore/qlist.h>
22#include <QtCore/qwaitcondition.h>
23#include <QtCore/qrunnable.h>
24#include <QtCore/qthreadpool.h>
25#include <QtCore/qfutureinterface.h>
26#include <QtCore/qexception.h>
28QT_REQUIRE_CONFIG(future);
38 Q_DECL_EVENT_COMMON(QFutureCallOutEvent)
53 : QEvent(QEvent::FutureCallOut), callOutType(CallOutType(0)), index1(-1), index2(-1)
55 explicit QFutureCallOutEvent(CallOutType callOutType,
int index1 = -1)
56 : QEvent(QEvent::FutureCallOut), callOutType(callOutType), index1(index1), index2(-1)
58 QFutureCallOutEvent(CallOutType callOutType,
int index1,
int index2)
59 : QEvent(QEvent::FutureCallOut), callOutType(callOutType), index1(index1), index2(index2)
62 QFutureCallOutEvent(CallOutType callOutType,
int index1,
const QString &text)
63 : QEvent(QEvent::FutureCallOut),
64 callOutType(callOutType),
70 CallOutType callOutType;
79 virtual ~QFutureCallOutInterface();
80 virtual void postCallOutEvent(
const QFutureCallOutEvent &) = 0;
81 virtual void callOutInterfaceDisconnected() = 0;
101 inline bool ref() {
return m_refCount.ref(); }
102 inline bool deref() {
return m_refCount.deref(); }
103 inline int load()
const {
return m_refCount.loadRelaxed(); }
105 inline bool refT() {
return m_refCountT.ref(); }
106 inline bool derefT() {
return m_refCountT.deref(); }
107 inline int loadT()
const {
return m_refCountT.loadRelaxed(); }
110 QAtomicInt m_refCount;
111 QAtomicInt m_refCountT;
127#ifndef QT_NO_EXCEPTIONS
130 m_results.~ResultStoreBase();
131 new (&m_exceptionStore) QtPrivate::ExceptionStore();
132 m_exceptionStore.setException(e);
173 {
return m_pool ? m_pool : QThreadPool::globalInstance(); }
183 void sendCallOut(
const QFutureCallOutEvent &callOut);
184 void sendCallOuts(
const QFutureCallOutEvent &callOut1,
const QFutureCallOutEvent &callOut2);
188 void setState(QFutureInterfaceBase::State state);
RefCount(int r=0, int rt=0)
std::atomic< ContinuationState > continuationState
bool internal_updateProgress(int progress, const QString &progressText=QString())
QElapsedTimer progressTime
int m_expectedResultCount
QBasicMutex continuationMutex
void sendCallOuts(const QFutureCallOutEvent &callOut1, const QFutureCallOutEvent &callOut2)
void sendCallOut(const QFutureCallOutEvent &callOut)
QFutureInterfaceBase::ContinuationType continuationType
bool internal_waitForNextResult()
void setState(QFutureInterfaceBase::State state)
QList< QFutureCallOutInterface * > outputConnections
void disconnectOutputInterface(QFutureCallOutInterface *iface)
bool internal_updateProgressValue(int progress)
bool internal_isResultReadyAt(int index) const
QFutureInterfaceBasePrivate * nonConcludedParent
QThreadPool * pool() const
void connectOutputInterface(QFutureCallOutInterface *iface)
std::function< void(const QFutureInterfaceBase &)> continuation
void internal_setThrottled(bool enable)
int internal_resultCount() const
QWaitCondition pausedWaitCondition
~QFutureInterfaceBasePrivate()
QWaitCondition waitCondition
QFutureInterfaceBasePrivate * continuationData
QScopedPointer< ProgressData > m_progress
bool continuationExecuted
QFutureInterfaceBasePrivate(QFutureInterfaceBase::State initialState)
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)
const_iterator & operator--()
const_iterator & operator+=(int j)
const_iterator operator+(int j) const
friend bool comparesEqual(const const_iterator &lhs, const const_iterator &rhs) noexcept
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)
friend struct QtPrivate::WhenAnyContext
friend class QtPrivate::CanceledHandler
QList< T > results() const
friend class QtPrivate::CompactContinuation
QFuture< ResultType< Function > > then(QThreadPool *pool, Function &&function)
T resultAt(int index) const
const_iterator end() const
const_iterator begin() const
const_iterator ConstIterator
QFuture< typename QFuture< T >::template ResultType< Function > > then(Function &&function)
QFuture< T > onCanceled(Function &&handler)
QFuture< typename QFuture< T >::template ResultType< Function > > then(QtFuture::Launch policy, Function &&function)
QFuture< typename QFuture< T >::template ResultType< Function > > then(QThreadPool *pool, Function &&function)
QFuture< T > onCanceled(QObject *context, Function &&handler)
const_iterator constEnd() const
friend class const_iterator
friend class QtPrivate::FailureHandler
bool isResultReadyAt(int resultIndex) const
const_iterator constBegin() const
QFuture< ResultType< Function > > then(QtFuture::Launch policy, Function &&function)
QFuture< void > makeReadyVoidFuture()
static int switch_from_to(QAtomicInt &a, int from, int to)
static int switch_off(QAtomicInt &a, int which)
static int switch_on(QAtomicInt &a, int which)
QFuture< void > future
[5]
QtPrivate::ExceptionStore m_exceptionStore
void setException(const std::exception_ptr &e)
QtPrivate::ResultStoreBase m_results