summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.cpp
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-04-05 14:32:35 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-20 03:39:10 +0200
commit194674044693d6b101c3dc2f4784718540d343a4 (patch)
tree59a242487dcda80dc501b5c9149be506ad0261e7 /src/corelib/kernel/qmetatype.cpp
parent7e9f7080b764524d2a7c7a410a4cebed22f3b16d (diff)
Provide versions of qRegisterMetaType() that do not normalize typename.
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 <jedrzej.nowacki@nokia.com>
Diffstat (limited to 'src/corelib/kernel/qmetatype.cpp')
-rw-r--r--src/corelib/kernel/qmetatype.cpp49
1 files changed, 41 insertions, 8 deletions
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<QCustomTypeInfo> *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<QCustomTypeInfo> *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<QCustomTypeInfo> *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<QCustomTypeInfo> *ct = customTypes();
+ if (!ct || normalizedTypeName.isEmpty())
+ return -1;
+
int idx = qMetaTypeStaticType(normalizedTypeName.constData(),
normalizedTypeName.size());