diff --git a/src/libs/utils/qstringbuilder.h b/src/libs/utils/qstringbuilder.h index 30a5a53e3a2cca85020b60cd383051eff172cca6..487f20fc2bf4dc2280792ee00fa635d7799d0018 100644 --- a/src/libs/utils/qstringbuilder.h +++ b/src/libs/utils/qstringbuilder.h @@ -137,6 +137,7 @@ inline int qStringBuilderSize(const QLatin1Char) { return 1; } inline int qStringBuilderSize(const QLatin1String a) { return qstrlen(a.latin1()); } + template <typename A> inline void qStringBuilderAppend(const A a, QChar *&out) { a.appendTo(out); } @@ -150,6 +151,14 @@ inline void qStringBuilderAppend(QLatin1String a, QChar *&out) *out++ = QLatin1Char(*s++); } +inline void qStringBuilderAppend(QStringRef a, QChar *&out) +{ + const int n = a.size(); + memcpy(out, (char*)a.constData(), sizeof(QChar) * n); + out += n; +} + + template <typename A, typename B> class QStringBuilderPair diff --git a/tests/benchmarks/qstringbuilder/main.cpp b/tests/benchmarks/qstringbuilder/main.cpp index c4a832c7049ac37c28c597fcabb04a4b2b6d2df0..167d55a596cea904647a86ebc712b20194a20b4a 100644 --- a/tests/benchmarks/qstringbuilder/main.cpp +++ b/tests/benchmarks/qstringbuilder/main.cpp @@ -22,6 +22,7 @@ public: : l1literal("some string literal"), l1string("some string literal"), string(l1string), + stringref(&string, 2, 10), achar('c') {} @@ -90,6 +91,18 @@ private slots: } + void separator_2c() { SEP("2 string refs"); } + + void b_2_stringref() { + QBENCHMARK { r = stringref % stringref; } + COMPARE(r, stringref.toString() + stringref.toString()); + } + void s_2_stringref() { + QBENCHMARK { r = stringref.toString() + stringref.toString(); } + COMPARE(r, QString(stringref % stringref)); + } + + void separator_2b() { SEP("3 strings"); } void b_3_string() { @@ -188,6 +201,7 @@ private: const QLatin1Literal l1literal; const QLatin1String l1string; const QString string; + const QStringRef stringref; const QLatin1Char achar; QString r;