5#ifndef QQMLPROPERTYDATA_P_H
6#define QQMLPROPERTYDATA_P_H
19#include <private/qobject_p.h>
20#include <QtCore/qglobal.h>
21#include <QtCore/qtyperevision.h>
25class QQmlPropertyCacheMethodArguments;
58 enum { BitsLeftInFlags = 14 };
59 unsigned otherBits : BitsLeftInFlags;
71 unsigned isDeepAliasORisVMEFunction : 1;
72 unsigned isWritableORhasArguments : 1;
73 unsigned isResettableORisSignal : 1;
74 unsigned isAliasORisVMESignal : 1;
75 unsigned isFinalORisV4Function : 1;
76 unsigned isSignalHandler : 1;
79 unsigned isOverridableSignal : 1;
81 unsigned isRequiredORisCloned : 1;
82 unsigned isConstructorORisBindable : 1;
83 unsigned isVirtual : 1;
87 unsigned doesOverride : 1;
88 unsigned isOverridden : 1;
89 unsigned hasMetaObject : 1;
93 unsigned overrideIndexIsProperty : 1;
106 isWritableORhasArguments = b;
111 isResettableORisSignal = b;
116 isAliasORisVMESignal = b;
121 isDeepAliasORisVMEFunction = b;
126 isFinalORisV4Function = b;
143 isConstructorORisBindable = b;
148 isRequiredORisCloned = b;
153 isDeepAliasORisVMEFunction = b;
158 isWritableORhasArguments = b;
162 isResettableORisSignal = b;
166 isAliasORisVMESignal = b;
171 isFinalORisV4Function = b;
182 Q_ASSERT(isResettableORisSignal);
183 isOverridableSignal = b;
188 isRequiredORisCloned = b;
193 isConstructorORisBindable = b;
211 unsigned otherBits = m_flags.otherBits;
213 m_flags.otherBits = otherBits;
258 bool hasRevision()
const {
return revision() != QTypeRevision::zero(); }
269 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
270 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
271 m_notifyIndex = qint16(idx);
280 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
281 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
282 m_overrideIndex = qint16(idx);
288 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
289 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
290 m_coreIndex = qint16(idx);
296 return m_encodedAliasTargetIndex;
301 m_encodedAliasTargetIndex = target;
307 return m_metaObjectOffsetOrAliasTargetObjectId;
313 Q_ASSERT(id >= std::numeric_limits<qint16>::min());
314 Q_ASSERT(id <= std::numeric_limits<qint16>::max());
315 m_metaObjectOffsetOrAliasTargetObjectId = id;
321 return m_wrappedObjectIndex;
326 m_wrappedObjectIndex = wrappedObjectIndex;
330 void setRevision(QTypeRevision revision) { m_revision = revision; }
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
372 Q_ASSERT(!hasArguments() || !m_arguments);
374 m_metaObject = metaObject;
381 return m_metaObject->method(m_coreIndex);
387 return m_metaObjectOffsetOrAliasTargetObjectId;
393 Q_ASSERT(off >= std::numeric_limits<qint16>::min());
394 Q_ASSERT(off <= std::numeric_limits<qint16>::max());
395 m_metaObjectOffsetOrAliasTargetObjectId = qint16(off);
401 return m_staticMetaCallFunction;
407 if (relativePropertyIndex < (1 <<
Flags::BitsLeftInFlags) - 1) {
408 m_flags.otherBits = relativePropertyIndex;
409 m_staticMetaCallFunction = f;
415 void load(
const QMetaProperty &);
416 void load(
const QMetaMethod &);
418 QString name(QObject *object)
const {
return object ? name(object->metaObject()) : QString(); }
421 if (!metaObject || m_coreIndex == -1)
424 return QString::fromUtf8(isFunction()
425 ? metaObject->method(m_coreIndex).name().constData()
426 : metaObject->property(m_coreIndex).name());
433 void *args[] = { property,
nullptr };
434 readPropertyWithArgs(target, args);
439 template<QMetaObject::Call call>
442 if (QDynamicMetaObjectData *dynamicMetaObject = QObjectPrivate::get(object)->metaObject)
443 dynamicMetaObject->metaCall(object, call, idx, argv);
445 object->qt_metacall(call, idx, argv);
453 doMetacall<QMetaObject::ReadProperty>(target, coreIndex(), args);
459 void *argv[] = { value,
nullptr, &status, &flags };
463 doMetacall<QMetaObject::WriteProperty>(target, coreIndex(), argv);
472 doMetacall<QMetaObject::ResetProperty>(target, coreIndex(),
nullptr);
478 QUntypedBindable result;
479 void *argv[] = { &result };
483 doMetacall<QMetaObject::BindableProperty>(target, coreIndex(), argv);
505 friend class QQmlPropertyCache;
508 qint16 m_coreIndex = -1;
512 qint16 m_notifyIndex = -1;
513 qint16 m_overrideIndex = -1;
515 qint16 m_metaObjectOffsetOrAliasTargetObjectId = -1;
520 QMetaType m_propType = {};
530 const QMetaObject *m_metaObject;
533 int m_encodedAliasTargetIndex;
536 int m_wrappedObjectIndex;
540#if QT_POINTER_SIZE == 4
541 Q_STATIC_ASSERT(
sizeof(QQmlPropertyData) == 24);
546static_assert(std::is_trivially_copyable<QQmlPropertyData>::value);
550 return flags() == other.flags() &&
551 propType() == other.propType() &&
552 coreIndex() == other.coreIndex() &&
553 notifyIndex() == other.notifyIndex() &&
554 revision() == other.revision();
560 isDeepAliasORisVMEFunction(
false),
561 isWritableORhasArguments(
false),
562 isResettableORisSignal(
false),
563 isAliasORisVMESignal(
false),
564 isFinalORisV4Function(
false),
565 isSignalHandler(
false),
566 isOverridableSignal(
false),
567 isRequiredORisCloned(
false),
568 isConstructorORisBindable(
false),
572 hasMetaObject(
false),
574 overrideIndexIsProperty(
false)
580 return isConst == other.isConst
581 && isDeepAliasORisVMEFunction == other.isDeepAliasORisVMEFunction
582 && isWritableORhasArguments == other.isWritableORhasArguments
583 && isResettableORisSignal == other.isResettableORisSignal
584 && isAliasORisVMESignal == other.isAliasORisVMESignal
585 && isFinalORisV4Function == other.isFinalORisV4Function && isVirtual == other.isVirtual
586 && doesOverride == other.doesOverride && isOverridden == other.isOverridden
587 && isSignalHandler == other.isSignalHandler
588 && isRequiredORisCloned == other.isRequiredORisCloned
589 && hasMetaObject == other.hasMetaObject && type == other.type
590 && isConstructorORisBindable == other.isConstructorORisBindable
591 && overrideIndexIsProperty == other.overrideIndexIsProperty;
bool overrideIndexIsProperty() const
void readProperty(QObject *target, void *property) const
bool isResettable() const
bool isConstructor() const
bool isOverridden() const
int metaObjectOffset() const
bool isVarProperty() const
void readPropertyWithArgs(QObject *target, void *args[]) const
bool notifiesViaBindable() const
QMetaMethod metaMethod() const
QTypeRevision typeVersion() const
void setRevision(QTypeRevision revision)
bool writeProperty(QObject *target, void *value, WriteFlags flags) const
QTypeRevision revision() const
void setAliasTarget(int target)
bool isVMEFunction() const
bool doesOverride() const
void setNotifyIndex(int idx)
StaticMetaCallFunction staticMetaCallFunction() const
bool operator==(const QQmlPropertyData &) const
void setMetaObjectOffset(int off)
int aliasTargetObjectId() const
void setMetaObject(const QMetaObject *metaObject)
void setAliasTargetObjectId(int id)
bool hasArguments() const
QMetaType propType() const
bool isV4Function() const
QString name(const QMetaObject *metaObject) const
void doMetacall(QObject *object, int idx, void **argv) const
void setOverrideIndexIsProperty(bool onoff)
void setCoreIndex(int idx)
bool acceptsQBinding() const
void setArguments(QQmlPropertyCacheMethodArguments *args)
QObjectPrivate::StaticMetaCallFunction StaticMetaCallFunction
bool isComponentWrapper() const
void setPropType(QMetaType pt)
bool hasMetaObject() const
void setOverrideIndex(int idx)
QUntypedBindable propertyBindable(QObject *target) const
QQmlPropertyCacheMethodArguments * arguments() const
void markAsOverrideOf(QQmlPropertyData *predecessor)
static Flags defaultSlotFlags()
void setWrappedObjectIndex(int wrappedObjectIndex)
void setWritable(bool onoff)
int wrappedObjectIndex() const
bool hasStaticMetaCallFunction() const
void trySetStaticMetaCallFunction(StaticMetaCallFunction f, unsigned relativePropertyIndex)
static Flags defaultSignalFlags()
@ RemoveBindingOnAliasWrite
static Flags flagsForProperty(const QMetaProperty &)
void load(const QMetaProperty &)
int overrideIndex() const
bool resetProperty(QObject *target, WriteFlags flags) const
bool isSignalHandler() const
QString name(QObject *object) const
bool isOverridableSignal() const
void setTypeVersion(QTypeRevision typeVersion)
const QMetaObject * metaObject() const
quint16 relativePropertyIndex() const
Q_STATIC_ASSERT(sizeof(SharedImageHeader) % 4==0)
void setIsConstant(bool b)
void setIsDeepAlias(bool b)
void setDoesOverride(bool b)
void setHasArguments(bool b)
void copyPropertyTypeFlags(Flags from)
void setIsOverridden(bool b)
void setIsResettable(bool b)
void setIsV4Function(bool b)
void setIsConstructor(bool b)
void setIsWritable(bool b)
void setIsOverridableSignal(bool b)
bool operator==(const Flags &other) const
void setIsRequired(bool b)
void setIsSignalHandler(bool b)
void setHasMetaObject(bool b)
void setIsBindable(bool b)
void setIsVMEFunction(bool b)
void setIsVirtual(bool b)
void setType(Type newType)
void setIsVMESignal(bool b)