From a31ce64b9c5d0c33f06ecf5633722f3a7bf723f5 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Mon, 25 May 2009 17:00:31 +0200
Subject: [PATCH] qstringbuilder: also accept QStringRef

---
 src/libs/utils/qstringbuilder.h          |  9 +++++++++
 tests/benchmarks/qstringbuilder/main.cpp | 14 ++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/src/libs/utils/qstringbuilder.h b/src/libs/utils/qstringbuilder.h
index 30a5a53e3a2..487f20fc2bf 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 c4a832c7049..167d55a596c 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;
-- 
GitLab