From 194674044693d6b101c3dc2f4784718540d343a4 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 5 Apr 2012 14:32:35 +1000 Subject: Provide versions of qRegisterMetaType() that do not normalize typename. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QML is quite capable of providing typenames in the correct format. qRegisterNormalizedMetaType() does not normalize the typename, so avoids the huge overhead. Change-Id: I96c9a42fe0b5d36ac05a9247f6507dbf9583fa67 Reviewed-by: Jędrzej Nowacki --- src/corelib/kernel/qmetatype.h | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/corelib/kernel/qmetatype.h') diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 66e1dd2240..9377ddd87e 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -46,7 +46,9 @@ #include #include #include - +#ifndef QT_NO_QOBJECT +#include +#endif #include #ifdef Bool @@ -270,7 +272,15 @@ public: int size, QMetaType::TypeFlags flags, const QMetaObject *metaObject); + static int registerNormalizedType(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName, Deleter deleter, + Creator creator, + Destructor destructor, + Constructor constructor, + int size, + QMetaType::TypeFlags flags, + const QMetaObject *metaObject); static int registerTypedef(const char *typeName, int aliasId); + static int registerNormalizedTypedef(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName, int aliasId); static int type(const char *typeName); static const char *typeName(int type); static int sizeOf(int type); @@ -505,7 +515,7 @@ namespace QtPrivate { } template -int qRegisterMetaType(const char *typeName +int qRegisterNormalizedMetaType(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName #ifndef qdoc , T * dummy = 0 #endif @@ -513,10 +523,10 @@ int qRegisterMetaType(const char *typeName { const int typedefOf = dummy ? -1 : QtPrivate::QMetaTypeIdHelper::qt_metatype_id(); if (typedefOf != -1) - return QMetaType::registerTypedef(typeName, typedefOf); + return QMetaType::registerNormalizedTypedef(normalizedTypeName, typedefOf); QMetaType::TypeFlags flags(QtPrivate::QMetaTypeTypeFlags::Flags); - return QMetaType::registerType(typeName, qMetaTypeDeleteHelper, + return QMetaType::registerNormalizedType(normalizedTypeName, qMetaTypeDeleteHelper, qMetaTypeCreateHelper, qMetaTypeDestructHelper, qMetaTypeConstructHelper, @@ -525,6 +535,21 @@ int qRegisterMetaType(const char *typeName QtPrivate::MetaObjectForType::value()); } +template +int qRegisterMetaType(const char *typeName +#ifndef qdoc + , T * dummy = 0 +#endif +) +{ +#ifdef QT_NO_QOBJECT + QT_PREPEND_NAMESPACE(QByteArray) normalizedTypeName = typeName; +#else + QT_PREPEND_NAMESPACE(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); +#endif + return qRegisterNormalizedMetaType(normalizedTypeName, dummy); +} + #ifndef QT_NO_DATASTREAM template void qRegisterMetaTypeStreamOperators(const char *typeName -- cgit v1.2.3