From 08790636f2b19a6bab97e3462211bec5b2d23c45 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sun, 11 Mar 2012 00:26:17 +0000 Subject: QRegularExpression: QMetaType and QVariant support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed the Q_DECLARE_METATYPE in favour of first-class support inside QMetaType and QVariant. Change-Id: I904236822bfab967dc0fbd4d4cc2bcb68c741adc Reviewed-by: JÄ™drzej Nowacki Reviewed-by: Stephen Kelly --- src/corelib/kernel/qmetatype.cpp | 31 +++++++++++++++++++++++++++---- src/corelib/kernel/qmetatype.h | 3 ++- src/corelib/kernel/qvariant.cpp | 34 +++++++++++++++++++++++++++++++++- src/corelib/kernel/qvariant.h | 14 +++++++++++--- src/corelib/tools/qregularexpression.h | 2 -- 5 files changed, 73 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 8474635fe7..a61894debd 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -63,6 +63,7 @@ # include "qurl.h" # include "qvariant.h" # include "qabstractitemmodel.h" +# include "qregularexpression.h" #endif #ifndef QT_NO_GEOM_VARIANT @@ -114,6 +115,9 @@ template<> struct TypeDefinition { static const bool IsAvailable = #ifdef QT_NO_REGEXP template<> struct TypeDefinition { static const bool IsAvailable = false; }; #endif +#if defined(QT_BOOTSTRAPPED) || defined(QT_NO_REGEXP) +template<> struct TypeDefinition { static const bool IsAvailable = false; }; +#endif } // namespace /*! @@ -219,6 +223,7 @@ template<> struct TypeDefinition { static const bool IsAvailable = fals \value QPoint QPoint \value QUrl QUrl \value QRegExp QRegExp + \value QRegularExpression QRegularExpression \value QDateTime QDateTime \value QPointF QPointF \value QPalette QPalette @@ -781,10 +786,15 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data) break; #endif #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + case QMetaType::QRegularExpression: + stream << *static_cast(data); + break; +#endif // QT_NO_REGEXP case QMetaType::QEasingCurve: stream << *static_cast(data); break; -#endif +#endif // QT_BOOTSTRAPPED case QMetaType::QFont: case QMetaType::QPixmap: case QMetaType::QBrush: @@ -993,10 +1003,15 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) break; #endif #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + case QMetaType::QRegularExpression: + stream >> *static_cast< NS(QRegularExpression)*>(data); + break; +#endif // QT_NO_REGEXP case QMetaType::QEasingCurve: stream >> *static_cast< NS(QEasingCurve)*>(data); break; -#endif +#endif // QT_BOOTSTRAPPED case QMetaType::QFont: case QMetaType::QPixmap: case QMetaType::QBrush: @@ -1149,9 +1164,13 @@ void *QMetaType::create(int type, const void *copy) return new NS(QRegExp)(*static_cast(copy)); #endif #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + case QMetaType::QRegularExpression: + return new NS(QRegularExpression)(*static_cast(copy)); +#endif // QT_NO_REGEXP case QMetaType::QEasingCurve: return new NS(QEasingCurve)(*static_cast(copy)); -#endif +#endif // QT_BOOTSTRAPPED case QMetaType::QUuid: return new NS(QUuid)(*static_cast(copy)); #ifndef QT_BOOTSTRAPPED @@ -1253,9 +1272,13 @@ void *QMetaType::create(int type, const void *copy) return new NS(QRegExp); #endif #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + case QMetaType::QRegularExpression: + return new NS(QRegularExpression); +#endif // QT_NO_REGEXP case QMetaType::QEasingCurve: return new NS(QEasingCurve); -#endif +#endif // QT_BOOTSTRAPPED case QMetaType::QUuid: return new NS(QUuid); #ifndef QT_BOOTSTRAPPED diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 4eadb34ea1..d913e37332 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -102,6 +102,7 @@ QT_BEGIN_NAMESPACE F(QUuid, 30, QUuid) \ F(QVariant, 41, QVariant) \ F(QModelIndex, 42, QModelIndex) \ + F(QRegularExpression, 44, QRegularExpression) #define QT_FOR_EACH_STATIC_CORE_POINTER(F)\ F(QObjectStar, 39, QObject*) \ @@ -194,7 +195,7 @@ public: QT_FOR_EACH_STATIC_TYPE(QT_DEFINE_METATYPE_ID) FirstCoreType = Bool, - LastCoreType = Void, + LastCoreType = QRegularExpression, FirstGuiType = QFont, LastGuiType = QPolygonF, FirstWidgetsType = QIcon, diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 8058a06117..e08f4ef53c 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -48,6 +48,7 @@ #include "qdatetime.h" #include "qeasingcurve.h" #include "qlist.h" +#include "qregularexpression.h" #include "qstring.h" #include "qstringlist.h" #include "qurl.h" @@ -106,6 +107,7 @@ struct TypeDefinition { #ifdef QT_BOOTSTRAPPED template<> struct TypeDefinition { static const bool IsAvailable = false; }; template<> struct TypeDefinition { static const bool IsAvailable = false; }; +template<> struct TypeDefinition { static const bool IsAvailable = false; }; #endif #ifdef QT_NO_GEOM_VARIANT template<> struct TypeDefinition { static const bool IsAvailable = false; }; @@ -1028,6 +1030,7 @@ Q_CORE_EXPORT void QVariantPrivate::unregisterHandler(const int /* Modules::Name \value Rect a QRect \value RectF a QRectF \value RegExp a QRegExp + \value RegularExpression a QRegularExpression \value Region a QRegion \value Size a QSize \value SizeF a QSizeF @@ -1358,6 +1361,14 @@ QVariant::QVariant(const char *val) Constructs a new variant with the regexp value \a regExp. */ +/*! + \fn QVariant::QVariant(const QRegularExpression &re) + + \since 5.0 + + Constructs a new variant with the regular expression value \a re. +*/ + /*! \since 4.2 \fn QVariant::QVariant(Qt::GlobalColor color) @@ -1446,7 +1457,10 @@ QVariant::QVariant(const QUrl &u) { d.is_null = false; d.type = Url; v_construct QVariant::QVariant(const QLocale &l) { d.is_null = false; d.type = Locale; v_construct(&d, l); } #ifndef QT_NO_REGEXP QVariant::QVariant(const QRegExp ®Exp) { d.is_null = false; d.type = RegExp; v_construct(&d, regExp); } -#endif +#ifndef QT_BOOTSTRAPPED +QVariant::QVariant(const QRegularExpression &re) { d.is_null = false; d.type = QMetaType::QRegularExpression; v_construct(&d, re); } +#endif // QT_BOOTSTRAPPED +#endif // QT_NO_REGEXP QVariant::QVariant(Qt::GlobalColor color) { create(62, &color); } /*! @@ -2126,6 +2140,24 @@ QRegExp QVariant::toRegExp() const } #endif +/*! + \fn QRegularExpression QVariant::toRegularExpression() const + \since 5.0 + + Returns the variant as a QRegularExpression if the variant has type() \l + QRegularExpression; otherwise returns an empty QRegularExpression. + + \sa canConvert(), convert() +*/ +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +QRegularExpression QVariant::toRegularExpression() const +{ + return qVariantToHelper(d, handlerManager); +} +#endif +#endif + /*! \fn QChar QVariant::toChar() const diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 4d4b2d51ab..cc502d93a7 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -76,7 +76,8 @@ class QRect; class QRectF; #ifndef QT_NO_REGEXP class QRegExp; -#endif +class QRegularExpression; +#endif // QT_NO_REGEXP class QTextFormat; class QTextLength; class QUrl; @@ -154,6 +155,7 @@ class Q_CORE_EXPORT QVariant Point = QMetaType::QPoint, PointF = QMetaType::QPointF, RegExp = QMetaType::QRegExp, + RegularExpression = QMetaType::QRegularExpression, Hash = QMetaType::QVariantHash, EasingCurve = QMetaType::QEasingCurve, Uuid = QMetaType::QUuid, @@ -239,7 +241,10 @@ class Q_CORE_EXPORT QVariant QVariant(const QLocale &locale); #ifndef QT_NO_REGEXP QVariant(const QRegExp ®Exp); -#endif +#ifndef QT_BOOTSRAPPED + QVariant(const QRegularExpression &re); +#endif // QT_BOOTSTRAPPED +#endif // QT_NO_REGEXP #ifndef QT_BOOTSTRAPPED QVariant(const QEasingCurve &easing); #endif @@ -302,7 +307,10 @@ class Q_CORE_EXPORT QVariant QLocale toLocale() const; #ifndef QT_NO_REGEXP QRegExp toRegExp() const; -#endif +#ifndef QT_BOOTSTRAPPED + QRegularExpression toRegularExpression() const; +#endif // QT_BOOTSTRAPPED +#endif // QT_NO_REGEXP #ifndef QT_BOOTSTRAPPED QEasingCurve toEasingCurve() const; #endif diff --git a/src/corelib/tools/qregularexpression.h b/src/corelib/tools/qregularexpression.h index 3ca83c9e27..57cb29035b 100644 --- a/src/corelib/tools/qregularexpression.h +++ b/src/corelib/tools/qregularexpression.h @@ -239,8 +239,6 @@ Q_DECLARE_TYPEINFO(QRegularExpressionMatchIterator, Q_MOVABLE_TYPE); QT_END_NAMESPACE -Q_DECLARE_METATYPE(QRegularExpression) - QT_END_HEADER #endif // QT_NO_REGEXP -- cgit v1.2.3