diff options
author | Martin Jones <martin.jones@nokia.com> | 2011-07-22 17:23:16 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-30 13:18:28 +0200 |
commit | ae0c88ba3ea9d5a64854b4d93c925dbeb65752db (patch) | |
tree | 06fe43ef9fdd7868e6cf6a57ac143f7fd936ee9d /src/declarative/qml/qdeclarativemetatype.cpp | |
parent | b048a40d7aab29b44d9c548292ab4b307d8d40c0 (diff) |
Faster check for revisioned properties.
Change-Id: I8122c15d0467019bcd333ca111d2b248c5ca2d91
Reviewed-on: http://codereview.qt.nokia.com/3774
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/declarative/qml/qdeclarativemetatype.cpp')
-rw-r--r-- | src/declarative/qml/qdeclarativemetatype.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 97b0391c0b..a084bd37df 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -52,6 +52,8 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qbitarray.h> #include <QtCore/qreadwritelock.h> +#include <QtCore/private/qmetaobject_p.h> + #include <qmetatype.h> #include <qobjectdefs.h> #include <qdatetime.h> @@ -398,6 +400,24 @@ static void clone(QMetaObjectBuilder &builder, const QMetaObject *mo, } } +static bool isPropertyRevisioned(const QMetaObject *mo, int index) +{ + int i = index; + i -= mo->propertyOffset(); + if (i < 0 && mo->d.superdata) + return isPropertyRevisioned(mo->d.superdata, index); + + const QMetaObjectPrivate *mop = reinterpret_cast<const QMetaObjectPrivate*>(mo->d.data); + if (i >= 0 && i < mop->propertyCount) { + int handle = mop->propertyData + 3*i; + int flags = mo->d.data[handle + 2]; + + return (flags & Revisioned); + } + + return false; +} + void QDeclarativeTypePrivate::init() const { if (m_isSetup) return; @@ -451,7 +471,7 @@ void QDeclarativeTypePrivate::init() const mo = m_metaObjects.first().metaObject; for (int ii = 0; !m_containsRevisionedAttributes && ii < mo->propertyCount(); ++ii) { - if (mo->property(ii).revision() != 0) + if (isPropertyRevisioned(mo, ii)) m_containsRevisionedAttributes = true; } |