From 84ef7704a85c3fee8080ac5c4f1a0922e79e0222 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 29 Feb 2012 12:25:01 +0100 Subject: Add a base class with specialization to QStringBuilder. This will allow separation of API that should work with QString results, and API that should work with QByteArray results. Change-Id: I5be398188abd421bb5056cea2658ea85fc03aa4f Reviewed-by: Olivier Goffart --- src/corelib/tools/qstringbuilder.h | 50 +++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h index 0eb8aa8903..9efec28c86 100644 --- a/src/corelib/tools/qstringbuilder.h +++ b/src/corelib/tools/qstringbuilder.h @@ -42,6 +42,12 @@ #ifndef QSTRINGBUILDER_H #define QSTRINGBUILDER_H +#if 0 +// syncqt can not handle the templates in this file, and it doesn't need to +// process them anyway because they are internal. +#pragma qt_sync_stop_processing +#endif + #include #include @@ -64,8 +70,37 @@ protected: template struct QConcatenable {}; +namespace QtStringBuilder { + template struct ConvertToTypeHelper + { typedef A ConvertTo; }; + template struct ConvertToTypeHelper + { typedef QString ConvertTo; }; +} + +template +struct QStringBuilderCommon +{ + T toUpper() const { return resolved().toUpper(); } + T toLower() const { return resolved().toLower(); } + +protected: + const T resolved() const { return *static_cast(this); } +}; + +template +struct QStringBuilderBase : public QStringBuilderCommon +{ +}; + +template +struct QStringBuilderBase : public QStringBuilderCommon +{ + QByteArray toLatin1() const { return this->resolved().toLatin1(); } + QByteArray toLocal8Bit() const { return this->resolved().toLocal8Bit(); } +}; + template -class QStringBuilder +class QStringBuilder : public QStringBuilderBase, typename QtStringBuilder::ConvertToTypeHelper::ConvertTo, typename QConcatenable::ConvertTo>::ConvertTo> { public: QStringBuilder(const A &a_, const B &b_) : a(a_), b(b_) {} @@ -94,7 +129,6 @@ private: public: operator ConvertTo() const { return convertTo(); } - QByteArray toLatin1() const { return convertTo().toLatin1(); } int size() const { return Concatenable::size(*this); } const A &a; @@ -102,21 +136,20 @@ public: }; template <> -class QStringBuilder +class QStringBuilder : public QStringBuilderBase, QString> { public: QStringBuilder(const QString &a_, const QString &b_) : a(a_), b(b_) {} operator QString() const { QString r(a); r += b; return r; } - QByteArray toLatin1() const { return QString(*this).toLatin1(); } const QString &a; const QString &b; }; template <> -class QStringBuilder +class QStringBuilder : public QStringBuilderBase, QByteArray> { public: QStringBuilder(const QByteArray &a_, const QByteArray &b_) : a(a_), b(b_) {} @@ -343,13 +376,6 @@ template struct QConcatenable > : private QAb } }; -namespace QtStringBuilder { - template struct ConvertToTypeHelper - { typedef A ConvertTo; }; - template struct ConvertToTypeHelper - { typedef QString ConvertTo; }; -} - template struct QConcatenable< QStringBuilder > { -- cgit v1.2.3