aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqml.h
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-05-18 10:54:09 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-23 06:54:25 +0200
commit9e239d0f653e8f37d0befb27aa3165d4723279a0 (patch)
tree7450301d665f7036da06b66f00f5397596b36eb2 /src/qml/qml/qqml.h
parentefa9de71119853f89b4b175e7d537fbcc31a4848 (diff)
Optimize QML type registration.
Change-Id: I981f5e2e6d7f6089e9f326d41a65e54668b73120 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/qml/qml/qqml.h')
-rw-r--r--src/qml/qml/qqml.h90
1 files changed, 40 insertions, 50 deletions
diff --git a/src/qml/qml/qqml.h b/src/qml/qml/qqml.h
index b7f5cb714d..9c01ee4bd6 100644
--- a/src/qml/qml/qqml.h
+++ b/src/qml/qml/qqml.h
@@ -89,19 +89,30 @@ QT_BEGIN_NAMESPACE
class QQmlPropertyValueInterceptor;
+#define QML_GETTYPENAMES \
+ const char *className = T::staticMetaObject.className(); \
+ int nameLen = strlen(className); \
+ QVarLengthArray<char,48> pointerName(nameLen+2); \
+ memcpy(pointerName.data(), className, nameLen); \
+ pointerName[nameLen] = '*'; \
+ pointerName[nameLen+1] = '\0'; \
+ int listLen = strlen("QQmlListProperty<"); \
+ QVarLengthArray<char,64> listName(listLen + nameLen + 2); \
+ memcpy(listName.data(), "QQmlListProperty<", listLen); \
+ memcpy(listName.data()+listLen, className, nameLen); \
+ listName[listLen+nameLen] = '>'; \
+ listName[listLen+nameLen+1] = '\0';
+
template<typename T>
int qmlRegisterType()
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
0, 0,
QString(),
@@ -128,16 +139,13 @@ int Q_QML_EXPORT qmlRegisterTypeNotAvailable(const char *uri, int versionMajor,
template<typename T>
int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
0, 0,
reason,
@@ -162,16 +170,13 @@ int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMin
template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
sizeof(T), QQmlPrivate::createInto<T>,
QString(),
@@ -196,16 +201,13 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c
template<typename T, int metaObjectRevision>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
1,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
sizeof(T), QQmlPrivate::createInto<T>,
QString(),
@@ -230,16 +232,13 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c
template<typename T, int metaObjectRevision>
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
1,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
sizeof(T), QQmlPrivate::createInto<T>,
QString(),
@@ -265,16 +264,13 @@ int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
template<typename T, typename E>
int qmlRegisterExtendedType()
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
0, 0,
QString(),
@@ -300,10 +296,7 @@ template<typename T, typename E>
int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor,
const char *qmlName)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlAttachedPropertiesFunc attached = QQmlPrivate::attachedPropertiesFunc<E>();
const QMetaObject * attachedMetaObject = QQmlPrivate::attachedPropertiesMetaObject<E>();
@@ -315,8 +308,8 @@ int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor,
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
sizeof(T), QQmlPrivate::createInto<T>,
QString(),
@@ -349,8 +342,8 @@ int qmlRegisterInterface(const char *typeName)
QQmlPrivate::RegisterInterface qmlInterface = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
qobject_interface_iid<T *>()
};
@@ -362,16 +355,13 @@ template<typename T>
int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor,
const char *qmlName, QQmlCustomParser *parser)
{
- QByteArray name(T::staticMetaObject.className());
-
- QByteArray pointerName(name + '*');
- QByteArray listName("QQmlListProperty<" + name + '>');
+ QML_GETTYPENAMES
QQmlPrivate::RegisterType type = {
0,
- qRegisterMetaType<T *>(pointerName.constData()),
- qRegisterMetaType<QQmlListProperty<T> >(listName.constData()),
+ qRegisterNormalizedMetaType<T *>(pointerName.constData()),
+ qRegisterNormalizedMetaType<QQmlListProperty<T> >(listName.constData()),
sizeof(T), QQmlPrivate::createInto<T>,
QString(),