From 5c9e39311757325c82bd5d18789a5caa5297af83 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Thu, 5 May 2016 11:37:01 +0300 Subject: QString: add some missing overloaded operator+ to keep compatibility with and without using QT_USE_QSTRINGBUILDER. Change-Id: If8218fe0693cdb7ad1250beb272e0e7c356bbf4a Reviewed-by: Edward Welbourne --- src/corelib/tools/qstring.h | 17 +++++++++++++++++ .../qstringbuilder/qstringbuilder1/stringbuilder.cpp | 14 ++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index 16a48515e8..0c0f3355a9 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -1725,6 +1725,23 @@ inline bool QStringRef::contains(const QStringRef &s, Qt::CaseSensitivity cs) co inline QString &QString::insert(int i, const QStringRef &s) { return insert(i, s.constData(), s.length()); } +#if !defined(QT_USE_FAST_OPERATOR_PLUS) && !defined(QT_USE_QSTRINGBUILDER) +inline QString operator+(const QString &s1, const QStringRef &s2) +{ QString t; t.reserve(s1.size() + s2.size()); t += s1; t += s2; return t; } +inline QString operator+(const QStringRef &s1, const QString &s2) +{ QString t; t.reserve(s1.size() + s2.size()); t += s1; t += s2; return t; } +inline QString operator+(const QStringRef &s1, QLatin1String s2) +{ QString t; t.reserve(s1.size() + s2.size()); t += s1; t += s2; return t; } +inline QString operator+(QLatin1String s1, const QStringRef &s2) +{ QString t; t.reserve(s1.size() + s2.size()); t += s1; t += s2; return t; } +inline QString operator+(const QStringRef &s1, const QStringRef &s2) +{ QString t; t.reserve(s1.size() + s2.size()); t += s1; t += s2; return t; } +inline QString operator+(const QStringRef &s1, QChar s2) +{ QString t; t.reserve(s1.size() + 1); t += s1; t += s2; return t; } +inline QString operator+(QChar s1, const QStringRef &s2) +{ QString t; t.reserve(1 + s2.size()); t += s1; t += s2; return t; } +#endif // !(QT_USE_FAST_OPERATOR_PLUS || QT_USE_QSTRINGBUILDER) + namespace Qt { #if QT_DEPRECATED_SINCE(5, 0) QT_DEPRECATED inline QString escape(const QString &plain) { diff --git a/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp b/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp index 7a361c0693..f6a1432f5c 100644 --- a/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp @@ -73,8 +73,22 @@ void runScenario() QCOMPARE(r, r2); r = stringref Q stringref; QCOMPARE(r, QString(stringref.toString() + stringref.toString())); + r = stringref P stringref; + QCOMPARE(r, QString(stringref.toString() + stringref.toString())); r = string P l1string; QCOMPARE(r, r2); + r = l1string P stringref; + QCOMPARE(r, QString(l1string + stringref.toString())); + r = stringref P l1string; + QCOMPARE(r, QString(stringref.toString() + l1string)); + r = stringref P string; + QCOMPARE(r, QString(stringref.toString() + string)); + r = string P stringref; + QCOMPARE(r, QString(string + stringref.toString())); + r = stringref P achar; + QCOMPARE(r, QString(stringref.toString() + achar)); + r = achar P stringref; + QCOMPARE(r, QString(achar + stringref.toString())); r = string Q QStringLiteral(LITERAL); QCOMPARE(r, r2); r = QStringLiteral(LITERAL) Q string; -- cgit v1.2.3