diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 6 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject.h | 13 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 304bfc522f..3b401bb163 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -1163,7 +1163,7 @@ QMetaClassInfo QMetaObject::classInfo(int index) const QMetaClassInfo result; if (i >= 0 && i < priv(d.data)->classInfoCount) { result.mobj = this; - result.handle = priv(d.data)->classInfoData + 2*i; + result.data = { d.data + priv(d.data)->classInfoData + i * QMetaClassInfo::Data::Size }; } return result; } @@ -3554,7 +3554,7 @@ const char *QMetaClassInfo::name() const { if (!mobj) return nullptr; - return rawStringData(mobj, mobj->d.data[handle]); + return rawStringData(mobj, data.name()); } /*! @@ -3566,7 +3566,7 @@ const char* QMetaClassInfo::value() const { if (!mobj) return nullptr; - return rawStringData(mobj, mobj->d.data[handle + 1]); + return rawStringData(mobj, data.value()); } /*! diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index 0dcc74e120..ed65f8733f 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -351,13 +351,22 @@ private: class Q_CORE_EXPORT QMetaClassInfo { public: - Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(nullptr), handle(0) {} + Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(nullptr), data({ nullptr }) {} const char *name() const; const char *value() const; inline const QMetaObject *enclosingMetaObject() const { return mobj; } private: + struct Data { + enum { Size = 2 }; + + uint name() const { return d[0]; } + uint value() const { return d[1]; } + + const uint *d; + }; + const QMetaObject *mobj; - uint handle; + Data data; friend struct QMetaObject; }; Q_DECLARE_TYPEINFO(QMetaClassInfo, Q_MOVABLE_TYPE); |