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.cpp | 49 +++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'src/corelib/kernel/qmetatype.cpp') diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index e7f68fd596..5ff8281090 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -441,16 +441,37 @@ int QMetaType::registerType(const char *typeName, Deleter deleter, int size, TypeFlags flags, const QMetaObject *metaObject) { Q_UNUSED(metaObject); - QVector *ct = customTypes(); - if (!ct || !typeName || !deleter || !creator || !destructor || !constructor) - return -1; - #ifdef QT_NO_QOBJECT NS(QByteArray) normalizedTypeName = typeName; #else NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); #endif + return registerNormalizedType(normalizedTypeName, deleter, creator, destructor, constructor, size, flags, metaObject); +} + + +/*! \internal + \since 5.0 + + Registers a user type for marshalling, with \a normalizedTypeName, a \a + deleter, a \a creator, a \a destructor, a \a constructor, and + a \a size. Returns the type's handle, or -1 if the type could + not be registered. Note that normalizedTypeName is not checked for + conformance with Qt's normalized format, so it must already + conform. + */ +int QMetaType::registerNormalizedType(const NS(QByteArray) &normalizedTypeName, Deleter deleter, + Creator creator, + Destructor destructor, + Constructor constructor, + int size, TypeFlags flags, const QMetaObject *metaObject) +{ + Q_UNUSED(metaObject); + QVector *ct = customTypes(); + if (!ct || normalizedTypeName.isEmpty() || !deleter || !creator || !destructor || !constructor) + return -1; + int idx = qMetaTypeStaticType(normalizedTypeName.constData(), normalizedTypeName.size()); @@ -513,16 +534,28 @@ int QMetaType::registerType(const char *typeName, Deleter deleter, */ int QMetaType::registerTypedef(const char* typeName, int aliasId) { - QVector *ct = customTypes(); - if (!ct || !typeName) - return -1; - #ifdef QT_NO_QOBJECT NS(QByteArray) normalizedTypeName = typeName; #else NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); #endif + return registerNormalizedTypedef(normalizedTypeName, aliasId); +} + +/*! \internal + \since 5.0 + + Registers a user type for marshalling, as an alias of another type (typedef). + Note that normalizedTypeName is not checked for conformance with Qt's normalized format, + so it must already conform. +*/ +int QMetaType::registerNormalizedTypedef(const NS(QByteArray) &normalizedTypeName, int aliasId) +{ + QVector *ct = customTypes(); + if (!ct || normalizedTypeName.isEmpty()) + return -1; + int idx = qMetaTypeStaticType(normalizedTypeName.constData(), normalizedTypeName.size()); -- cgit v1.2.3