4#ifndef QBINDINGSTORAGE_H
5#define QBINDINGSTORAGE_H
7#include <QtCore/qglobal.h>
8#include <QtCore/qnamespace.h>
12template <
typename Class,
typename T,
auto Offset,
auto Setter,
auto Signal,
auto Getter>
13class QObjectCompatProperty;
19class QPropertyBindingData;
42 mutable QBindingStorageData *d =
nullptr;
43 QBindingStatus *bindingStatus =
nullptr;
45 template<
typename Class,
typename T,
auto Offset,
auto Setter,
auto Signal,
auto Getter>
46 friend class QObjectCompatProperty;
47 friend class QObjectPrivate;
48 friend class QtPrivate::QPropertyBindingData;
53 bool isEmpty() {
return !d; }
54 bool isValid()
const noexcept {
return bindingStatus; }
56 const QBindingStatus *status(QtPrivate::QBindingStatusAccessToken)
const;
58 void registerDependency(
const QUntypedPropertyData *data)
const
60 if (!bindingStatus || !bindingStatus->currentlyEvaluatingBinding)
62 registerDependency_helper(data);
64 QtPrivate::QPropertyBindingData *bindingData(
const QUntypedPropertyData *data)
const
68 return bindingData_helper(data);
71#if QT_CORE_REMOVED_SINCE(6
, 2
)
72 void maybeUpdateBindingAndRegister(
const QUntypedPropertyData *data)
const { registerDependency(data); }
75 QtPrivate::QPropertyBindingData *bindingData(QUntypedPropertyData *data,
bool create)
79 return bindingData_helper(data, create);
82 void reinitAfterThreadMove();
84 void registerDependency_helper(
const QUntypedPropertyData *data)
const;
85#if QT_CORE_REMOVED_SINCE(6
, 2
)
87 void maybeUpdateBindingAndRegister_helper(
const QUntypedPropertyData *data)
const;
89 QtPrivate::QPropertyBindingData *bindingData_helper(
const QUntypedPropertyData *data)
const;
90 QtPrivate::QPropertyBindingData *bindingData_helper(QUntypedPropertyData *data,
bool create);
void addEvent(const QPostEvent &ev)
qsizetype insertionOffset
QPostEvent(QObject *r, QEvent *e, int p)
QScopedScopeLevelCounter(QThreadData *threadData)
~QScopedScopeLevelCounter()
QStack< QEventLoop * > eventLoops
QAtomicPointer< QAbstractEventDispatcher > eventDispatcher
QtPrivate::BindingStatusOrList m_statusOrPendingObjects
static QThreadData * current()
void reuseBindingStatusForNewNativeThread()
QThreadData(int initialRefCount=1)
bool requiresCoreApplication
static void clearCurrentThreadData()
QAtomicPointer< void > threadId
static QThreadData * get2(QThread *thread)
QAbstractEventDispatcher * ensureEventDispatcher()
QPostEventList postEventList
bool hasEventDispatcher() const
QAtomicPointer< QThread > thread
QAbstractEventDispatcher * createEventDispatcher()
static void setCurrentThread(QThread *)
static QAbstractEventDispatcher * createEventDispatcher(QThreadData *data)
QThreadPrivate(QThreadData *d=nullptr)
void removeObjectWithPendingBindingStatusChange(QObject *)
QBindingStatus * m_bindingStatus
QBindingStatus * bindingStatus()
QBindingStatus * addObjectWithPendingBindingStatusChange(QObject *)
List * list() const noexcept
static bool isBindingStatus(quintptr data) noexcept
static bool isNull(quintptr data) noexcept
void removeObject(QObject *object)
void setStatusAndClearList(QBindingStatus *status) noexcept
constexpr BindingStatusOrList() noexcept
QBindingStatus * addObjectUnlessAlreadyStatus(QObject *object)
BindingStatusOrList(QBindingStatus *status) noexcept
QBindingStatus * bindingStatus() const noexcept
static bool isList(quintptr data) noexcept
void setBindingStatus(QBindingStatus *status, QBindingStatusAccessToken)
Q_DECLARE_TYPEINFO(QPostEvent, Q_RELOCATABLE_TYPE)
bool operator<(const QPostEvent &first, const QPostEvent &second)
QtPrivate::CompatPropertySafePoint * currentCompatProperty
QPropertyDelayedNotifications * groupUpdateData
QtPrivate::BindingEvaluationState * currentlyEvaluatingBinding