4#ifndef QPROPERTYPRIVATE_H
5#define QPROPERTYPRIVATE_H
18#include <QtCore/qglobal.h>
19#include <QtCore/qtaggedpointer.h>
20#include <QtCore/qmetatype.h>
21#include <QtCore/qcontainerfwd.h>
29template<
typename Class,
typename T, auto Offset, auto Setter, auto Signal, auto Getter>
54 explicit operator T *() {
return d; }
55 explicit operator const T *()
const noexcept {
return d; }
56 T *
data() const noexcept {
return d; }
57 T *
get() const noexcept {
return d; }
59 T *
take() noexcept {
T *
x = d; d =
nullptr;
return x; }
64 if (d && (--d->
ref == 0))
71 : d(
o.d) {
if (d) d->
addRef(); }
88 operator
bool () const noexcept {
return d !=
nullptr; }
89 bool operator!() const noexcept {
return d ==
nullptr; }
95 {
return p1.d ==
p2.d; }
97 {
return p1.d !=
p2.d; }
99 {
return p1.d ==
ptr; }
101 {
return p1.d !=
ptr; }
103 {
return ptr ==
p2.d; }
105 {
return ptr !=
p2.d; }
137class QPropertyBindingData;
154struct BindingEvaluationState;
172 template<
typename Callable,
typename PropertyType=MSVCWorkAround>
175 static_assert (
alignof(
Callable) <=
alignof(std::max_align_t),
"Bindings do not support overaligned functors!");
178 if constexpr (!std::is_invocable_v<Callable>) {
180 static_assert (std::is_invocable_r_v<bool, Callable, QMetaType, QUntypedPropertyData *> );
181 auto untypedEvaluationFunction =
static_cast<Callable *
>(
f);
182 return std::invoke(*untypedEvaluationFunction, metaType, dataPtr);
183 }
else if constexpr (!std::is_same_v<PropertyType, MSVCWorkAround>) {
187 auto evaluationFunction =
static_cast<Callable *
>(
f);
188 PropertyType newValue = std::invoke(*evaluationFunction);
189 if constexpr (QTypeTraits::has_operator_equal_v<PropertyType>) {
197 Q_UNREACHABLE_RETURN(
false);
209template<
typename Callable,
typename PropertyType=MSVCWorkAround>
237 friend struct QT_PREPEND_NAMESPACE(QPropertyBindingDataPointer);
238 friend class QT_PREPEND_NAMESPACE(QQmlPropertyBinding);
239 friend struct QT_PREPEND_NAMESPACE(QPropertyDelayedNotifications);
241 template<
typename Class,
typename T, auto Offset, auto Setter, auto Signal, auto Getter>
242 friend class QT_PREPEND_NAMESPACE(QObjectCompatProperty);
254 static inline constexpr quintptr DelayedNotificationBit = 0x2;
278 removeBinding_helper();
285 registerWithCurrentlyEvaluatingBinding_helper(currentBinding);
287 void registerWithCurrentlyEvaluatingBinding()
const;
305 if (isNotificationDelayed())
306 return proxyData()->d_ptr;
315 void registerWithCurrentlyEvaluatingBinding_helper(BindingEvaluationState *currentBinding)
const;
316 void removeBinding_helper();
318 enum NotificationResult { Delayed, Evaluated };
319 NotificationResult notifyObserver_helper(
325template <
typename T,
typename Tag>
362 explicit operator bool()
const
372 template <
typename F>
375 template<
typename T,
typename C>
\macro Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
void swap(QPropertyBindingPrivatePtr &other) noexcept
QPropertyBindingPrivatePtr & operator=(T *o) noexcept
T * operator->() const noexcept
friend bool operator==(std::nullptr_t, const QPropertyBindingPrivatePtr &p2) noexcept
friend bool operator==(const T *ptr, const QPropertyBindingPrivatePtr &p2) noexcept
friend bool operator==(const QPropertyBindingPrivatePtr &p1, std::nullptr_t) noexcept
friend bool operator!=(const QPropertyBindingPrivatePtr &p1, const T *ptr) noexcept
~QPropertyBindingPrivatePtr()
Q_CORE_EXPORT void destroyAndFreeMemory()
QPropertyBindingPrivatePtr(QPropertyBindingPrivatePtr &&o) noexcept
friend bool operator==(const QPropertyBindingPrivatePtr &p1, const QPropertyBindingPrivatePtr &p2) noexcept
friend bool operator!=(std::nullptr_t, const QPropertyBindingPrivatePtr &p2) noexcept
friend bool operator==(const QPropertyBindingPrivatePtr &p1, const T *ptr) noexcept
bool operator!() const noexcept
QPropertyBindingPrivatePtr(const QPropertyBindingPrivatePtr &o) noexcept
T * data() const noexcept
const T * constData() const noexcept
T * operator->() noexcept
friend bool operator!=(const QPropertyBindingPrivatePtr &p1, const QPropertyBindingPrivatePtr &p2) noexcept
friend bool operator!=(const QPropertyBindingPrivatePtr &p1, std::nullptr_t) noexcept
QPropertyBindingPrivatePtr(T *data) noexcept
friend bool operator!=(const T *ptr, const QPropertyBindingPrivatePtr &p2) noexcept
QPropertyBindingPrivatePtr() noexcept
parameter_type valueBypassingBindings() const
Returns the data stored in this property.
void setValueBypassingBindings(parameter_type v)
Sets the data value stored in this property to v.
static constexpr quintptr pointerMask()
void registerWithCurrentlyEvaluatingBinding(QtPrivate::BindingEvaluationState *currentBinding) const
QPropertyBindingPrivate * binding() const
bool isNotificationDelayed() const
QPropertyBindingData()=default
QPropertyBindingData & operator=(QPropertyBindingData &&other)=delete
QTagPreservingPointerToPointer< T, Tag > & operator=(T **ptr)
QTagPreservingPointerToPointer(T **ptr)
QTagPreservingPointerToPointer< T, Tag > & operator=(QTaggedPointer< T, Tag > *ptr)
constexpr QTagPreservingPointerToPointer()=default
quint64 getOffset(const unsigned char *&s, const ElfData &context)
Combined button and popup list for selecting options.
bool(*)(QMetaType, QUntypedPropertyData *dataPtr, QPropertyBindingFunction) QPropertyBindingWrapper
constexpr BindingFunctionVTable bindingFunctionVTable
std::conditional_t< FunctionPointer< std::decay_t< Func > >::ArgumentCount==-1, ZeroArgFunctor< std::decay_t< Func > >, FunctionPointer< std::decay_t< Func > > > Callable
void(*)(QUntypedPropertyData *) QPropertyObserverCallback
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 ControlElement< T > * ptr(QWidget *widget)
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
constexpr void qt_ptr_swap(T *&lhs, T *&rhs) noexcept
QUntypedPropertyData * propertyData
const QtPrivate::QPropertyBindingData * originalBindingData
bool(*)(QMetaType, QUntypedPropertyData *, void *) CallFn
const MoveCtrFn moveConstruct
static constexpr BindingFunctionVTable createFor()
void(*)(void *, void *) MoveCtrFn
const QtPrivate::BindingFunctionVTable * vtable