diff --git a/src/libs/utils/qstringbuilder.h b/src/libs/utils/qstringbuilder.h index 487f20fc2bf4dc2280792ee00fa635d7799d0018..88d82b3260dccb7c4cef9e54079219a31d69083c 100644 --- a/src/libs/utils/qstringbuilder.h +++ b/src/libs/utils/qstringbuilder.h @@ -46,6 +46,13 @@ #include <string.h> +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Core) + + // Using this relies on changing the QString::QString(QChar *, int) // constructor to allocated an unitialized string of the given size. //#define USE_CHANGED_QSTRING 1 @@ -89,7 +96,7 @@ template <typename A> class QStringBuilder : public A { public: - QStringBuilder(A a_) : A(a_) {} + QStringBuilder(const A &a_) : A(a_) {} operator QString() const { @@ -164,7 +171,7 @@ template <typename A, typename B> class QStringBuilderPair { public: - QStringBuilderPair(A a_, B b_) : a(a_), b(b_) {} + QStringBuilderPair(const A &a_, const B &b_) : a(a_), b(b_) {} inline int size() const { @@ -178,8 +185,8 @@ public: } private: - A a; - B b; + const A a; + const B b; }; @@ -216,5 +223,8 @@ operator%(const QString &a, const QString &b) QStringBuilder<QString> > (a, b); } +QT_END_NAMESPACE + +QT_END_HEADER #endif // QSTRINGBUILDER_H diff --git a/tests/benchmarks/qstringbuilder/main.cpp b/tests/benchmarks/qstringbuilder/main.cpp index 167d55a596cea904647a86ebc712b20194a20b4a..d5aea2d96c3fad283a3c578efc418c67d762e974 100644 --- a/tests/benchmarks/qstringbuilder/main.cpp +++ b/tests/benchmarks/qstringbuilder/main.cpp @@ -21,6 +21,7 @@ public: tst_qstringbuilder() : l1literal("some string literal"), l1string("some string literal"), + ba("some string literal"), string(l1string), stringref(&string, 2, 10), achar('c') @@ -197,9 +198,29 @@ private slots: COMPARE(r, QString(achar % string % achar)); } + void separator_8() { SEP("string.arg"); } + + void b_string_arg() { + const QString pattern = l1string + "%1" + l1string; + QBENCHMARK { r = l1literal % string % l1literal; } + COMPARE(r, l1string + string + l1string); + } + + void s_string_arg() { + const QString pattern = l1string + "%1" + l1string; + QBENCHMARK { r = pattern.arg(string); } + COMPARE(r, l1string + string + l1string); + } + + void s_bytearray_arg() { + QByteArray result; + QBENCHMARK { result = ba + ba + ba; } + } + private: const QLatin1Literal l1literal; const QLatin1String l1string; + const QByteArray ba; const QString string; const QStringRef stringref; const QLatin1Char achar;