From 2fe35bf9a0f4d3cd5434026e1a01933444031212 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 16 Aug 2012 02:18:19 +0200 Subject: [PATCH] Refactor the automatic metatype templates into preprocessor lists. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will allow re-use in moc. Change-Id: I99c5f8f0756fccf0fb2bb845c29255c14d4d703e Reviewed-by: Jędrzej Nowacki --- src/corelib/kernel/qmetatype.h | 64 +++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index a40bd77e5a..ce7bddd66c 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -717,15 +717,6 @@ QT_FOR_EACH_STATIC_WIDGETS_CLASS(QT_FORWARD_DECLARE_STATIC_TYPES_ITER) #undef QT_FORWARD_DECLARE_STATIC_TYPES_ITER -template class QList; -template class QLinkedList; -template class QVector; -template class QQueue; -template class QStack; -template class QSet; -template class QMap; -template class QHash; -template struct QPair; typedef QList QVariantList; typedef QMap QVariantMap; typedef QHash QVariantHash; @@ -792,18 +783,6 @@ struct QMetaTypeId< DOUBLE_ARG_TEMPLATE > \ } \ }; -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QList) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QVector) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QQueue) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QStack) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QSet) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QLinkedList) - -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QHash) -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QMap) -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QPair) - - #define Q_DECLARE_SMART_POINTER_METATYPE(SMART_POINTER) \ template ::Value> \ struct QMetaTypeId_ ## SMART_POINTER ## _QObjectStar \ @@ -835,9 +814,46 @@ struct QMetaTypeId< SMART_POINTER > : public QMetaTypeId_ ## SMART_POINTER ## { \ }; -Q_DECLARE_SMART_POINTER_METATYPE(QSharedPointer) -Q_DECLARE_SMART_POINTER_METATYPE(QWeakPointer) -Q_DECLARE_SMART_POINTER_METATYPE(QPointer) +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(F) \ + F(QList) \ + F(QVector) \ + F(QQueue) \ + F(QStack) \ + F(QSet) \ + F(QLinkedList) + +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_2ARG(F) \ + F(QHash, class) \ + F(QMap, class) \ + F(QPair, struct) + +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(F) \ + F(QSharedPointer) \ + F(QWeakPointer) \ + F(QPointer) + +#define Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER(TEMPLATENAME) \ + template class TEMPLATENAME; \ + Q_DECLARE_METATYPE_TEMPLATE_1ARG(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER + +#define Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER(TEMPLATENAME, CPPTYPE) \ + template CPPTYPE TEMPLATENAME; \ + Q_DECLARE_METATYPE_TEMPLATE_2ARG(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_2ARG(Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER + +#define Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER(TEMPLATENAME) \ + Q_DECLARE_SMART_POINTER_METATYPE(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER inline QMetaType::QMetaType(const ExtensionFlag extensionFlags, const QMetaTypeInterface *info, Creator creator,