4#ifndef QQMLPROPERTYDATA_P_H
5#define QQMLPROPERTYDATA_P_H
18#include <private/qobject_p.h>
19#include <QtCore/qglobal.h>
20#include <QtCore/qversionnumber.h>
24class QQmlPropertyCacheMethodArguments;
57 enum { BitsLeftInFlags = 16 };
58 unsigned otherBits : BitsLeftInFlags;
70 unsigned isDeepAliasORisVMEFunction : 1;
71 unsigned isWritableORhasArguments : 1;
72 unsigned isResettableORisSignal : 1;
73 unsigned isAliasORisVMESignal : 1;
74 unsigned isFinalORisV4Function : 1;
75 unsigned isSignalHandler : 1;
78 unsigned isOverridableSignal : 1;
80 unsigned isRequiredORisCloned : 1;
81 unsigned isConstructorORisBindable : 1;
82 unsigned isOverridden : 1;
83 unsigned hasMetaObject : 1;
87 unsigned overrideIndexIsProperty : 1;
100 isWritableORhasArguments = b;
105 isResettableORisSignal = b;
110 isAliasORisVMESignal = b;
115 isDeepAliasORisVMEFunction = b;
120 isFinalORisV4Function = b;
129 isConstructorORisBindable = b;
134 isRequiredORisCloned = b;
139 isDeepAliasORisVMEFunction = b;
144 isWritableORhasArguments = b;
148 isResettableORisSignal = b;
152 isAliasORisVMESignal = b;
157 isFinalORisV4Function = b;
168 Q_ASSERT(isResettableORisSignal);
169 isOverridableSignal = b;
174 isRequiredORisCloned = b;
179 isConstructorORisBindable = b;
197 unsigned otherBits = m_flags.otherBits;
199 m_flags.otherBits = otherBits;
228 return !isAlias() && staticMetaCallFunction() !=
nullptr;
241 bool hasRevision()
const {
return revision() != QTypeRevision::zero(); }
252 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
253 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
254 m_notifyIndex = qint16(idx);
263 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
264 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
265 m_overrideIndex = qint16(idx);
271 Q_ASSERT(idx >= std::numeric_limits<qint16>::min());
272 Q_ASSERT(idx <= std::numeric_limits<qint16>::max());
273 m_coreIndex = qint16(idx);
279 return m_encodedAliasTargetIndex;
284 m_encodedAliasTargetIndex = target;
288 void setRevision(QTypeRevision revision) { m_revision = revision; }
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
330 Q_ASSERT(!hasArguments() || !m_arguments);
332 m_metaObject = metaObject;
339 return m_metaObject->method(m_coreIndex);
345 Q_ASSERT(off >= std::numeric_limits<qint16>::min());
346 Q_ASSERT(off <= std::numeric_limits<qint16>::max());
347 m_metaObjectOffset = qint16(off);
353 return m_staticMetaCallFunction;
359 if (relativePropertyIndex < (1 <<
Flags::BitsLeftInFlags) - 1) {
360 m_flags.otherBits = relativePropertyIndex;
361 m_staticMetaCallFunction = f;
367 void load(
const QMetaProperty &);
368 void load(
const QMetaMethod &);
370 QString name(QObject *object)
const {
return object ? name(object->metaObject()) : QString(); }
373 if (!metaObject || m_coreIndex == -1)
376 return QString::fromUtf8(isFunction()
377 ? metaObject->method(m_coreIndex).name().constData()
378 : metaObject->property(m_coreIndex).name());
385 void *args[] = { property,
nullptr };
386 readPropertyWithArgs(target, args);
391 template<QMetaObject::Call call>
394 if (QDynamicMetaObjectData *dynamicMetaObject = QObjectPrivate::get(object)->metaObject)
395 dynamicMetaObject->metaCall(object, call, idx, argv);
397 object->qt_metacall(call, idx, argv);
402 if (hasStaticMetaCallFunction())
403 staticMetaCallFunction()(target, QMetaObject::ReadProperty, relativePropertyIndex(), args);
405 doMetacall<QMetaObject::ReadProperty>(target, coreIndex(), args);
411 void *argv[] = { value,
nullptr, &status, &flags };
412 if (flags.testFlag(BypassInterceptor) && hasStaticMetaCallFunction())
413 staticMetaCallFunction()(target, QMetaObject::WriteProperty, relativePropertyIndex(), argv);
415 doMetacall<QMetaObject::WriteProperty>(target, coreIndex(), argv);
421 if (flags.testFlag(BypassInterceptor) && hasStaticMetaCallFunction())
422 staticMetaCallFunction()(target, QMetaObject::ResetProperty, relativePropertyIndex(),
nullptr);
424 doMetacall<QMetaObject::ResetProperty>(target, coreIndex(),
nullptr);
430 QUntypedBindable result;
431 void *argv[] = { &result };
432 if (hasStaticMetaCallFunction())
433 staticMetaCallFunction()(target, QMetaObject::BindableProperty, relativePropertyIndex(), argv);
435 doMetacall<QMetaObject::BindableProperty>(target, coreIndex(), argv);
457 friend class QQmlPropertyCache;
460 qint16 m_coreIndex = -1;
464 qint16 m_notifyIndex = -1;
465 qint16 m_overrideIndex = -1;
467 qint16 m_metaObjectOffset = -1;
472 QMetaType m_propType = {};
489#if QT_POINTER_SIZE == 4
490 Q_STATIC_ASSERT(
sizeof(QQmlPropertyData) == 24);
495static_assert(std::is_trivially_copyable<QQmlPropertyData>::value);
499 return flags() == other.flags() &&
500 propType() == other.propType() &&
501 coreIndex() == other.coreIndex() &&
502 notifyIndex() == other.notifyIndex() &&
503 revision() == other.revision();
509 , isDeepAliasORisVMEFunction(
false)
510 , isWritableORhasArguments(
false)
511 , isResettableORisSignal(
false)
512 , isAliasORisVMESignal(
false)
513 , isFinalORisV4Function(
false)
514 , isSignalHandler(
false)
515 , isOverridableSignal(
false)
516 , isRequiredORisCloned(
false)
517 , isConstructorORisBindable(
false)
518 , isOverridden(
false)
519 , hasMetaObject(
false)
521 , overrideIndexIsProperty(
false)
527 return isConst == other.isConst &&
528 isDeepAliasORisVMEFunction == other.isDeepAliasORisVMEFunction &&
529 isWritableORhasArguments == other.isWritableORhasArguments &&
530 isResettableORisSignal == other.isResettableORisSignal &&
531 isAliasORisVMESignal == other.isAliasORisVMESignal &&
532 isFinalORisV4Function == other.isFinalORisV4Function &&
533 isOverridden == other.isOverridden &&
534 isSignalHandler == other.isSignalHandler &&
535 isRequiredORisCloned == other.isRequiredORisCloned &&
536 hasMetaObject == other.hasMetaObject &&
537 type == other.type &&
538 isConstructorORisBindable == other.isConstructorORisBindable &&
539 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
void setNotifyIndex(int idx)
StaticMetaCallFunction m_staticMetaCallFunction
StaticMetaCallFunction staticMetaCallFunction() const
bool operator==(const QQmlPropertyData &) const
void setMetaObjectOffset(int off)
void setMetaObject(const QMetaObject *metaObject)
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)
void setPropType(QMetaType pt)
bool hasMetaObject() const
const QMetaObject * m_metaObject
void setOverrideIndex(int idx)
QUntypedBindable propertyBindable(QObject *target) const
QQmlPropertyCacheMethodArguments * arguments() const
void markAsOverrideOf(QQmlPropertyData *predecessor)
QQmlPropertyCacheMethodArguments * m_arguments
static Flags defaultSlotFlags()
void setWritable(bool onoff)
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
int m_encodedAliasTargetIndex
Q_STATIC_ASSERT(sizeof(SharedImageHeader) % 4==0)
void setIsConstant(bool b)
void setIsDeepAlias(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 setType(Type newType)
void setIsVMESignal(bool b)