summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.h
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.h
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.h')
-rw-r--r--src/corelib/kernel/qmetatype.h33
1 files changed, 29 insertions, 4 deletions
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 <QtCore/qatomic.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qisenum.h>
-
+#ifndef QT_NO_QOBJECT
+#include <QtCore/qobjectdefs.h>
+#endif
#include <new>
#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 <typename T>
-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<T>::qt_metatype_id();
if (typedefOf != -1)
- return QMetaType::registerTypedef(typeName, typedefOf);
+ return QMetaType::registerNormalizedTypedef(normalizedTypeName, typedefOf);
QMetaType::TypeFlags flags(QtPrivate::QMetaTypeTypeFlags<T>::Flags);
- return QMetaType::registerType(typeName, qMetaTypeDeleteHelper<T>,
+ return QMetaType::registerNormalizedType(normalizedTypeName, qMetaTypeDeleteHelper<T>,
qMetaTypeCreateHelper<T>,
qMetaTypeDestructHelper<T>,
qMetaTypeConstructHelper<T>,
@@ -525,6 +535,21 @@ int qRegisterMetaType(const char *typeName
QtPrivate::MetaObjectForType<T>::value());
}
+template <typename T>
+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<T>(normalizedTypeName, dummy);
+}
+
#ifndef QT_NO_DATASTREAM
template <typename T>
void qRegisterMetaTypeStreamOperators(const char *typeName