QString::append: add (const QChar*, int len) overload
authorMarc Mutz <marc.mutz@kdab.com>
Fri, 18 May 2012 16:58:29 +0000 (18:58 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 30 Aug 2012 00:28:30 +0000 (02:28 +0200)
Both insert and replace have this overload, so one reason to add it
to append(), too, is consistency. But I can also make good use of
this overload in the the new QStringList::join(QChar) overload, so
it's actually useful in its own right.

Change-Id: Iccd48f9cb84831399e4db7e3e78eba25c0ced30d
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/tools/qstring.cpp
src/corelib/tools/qstring.h
tests/auto/corelib/tools/qstring/tst_qstring.cpp

index f4240e9..5ec0b63 100644 (file)
@@ -1507,6 +1507,24 @@ QString &QString::append(const QString &str)
 
 /*!
   \overload append()
+  \since 5.0
+
+  Appends \a len characters from the QChar array \a str to this string.
+*/
+QString &QString::append(const QChar *str, int len)
+{
+    if (str && len > 0) {
+        if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+            reallocData(uint(d->size + len) + 1u, true);
+        memcpy(d->data() + d->size, str, len * sizeof(QChar));
+        d->size += len;
+        d->data()[d->size] = '\0';
+    }
+    return *this;
+}
+
+/*!
+  \overload append()
 
   Appends the Latin-1 string \a str to this string.
 */
index 2edfc04..dfc974f 100644 (file)
@@ -391,6 +391,7 @@ public:
     inline QString &insert(int i, const QString &s) { return insert(i, s.constData(), s.length()); }
     QString &insert(int i, QLatin1String s);
     QString &append(QChar c);
+    QString &append(const QChar *uc, int len);
     QString &append(const QString &s);
     QString &append(const QStringRef &s);
     QString &append(QLatin1String s);
index 7476fa0..3891a71 100644 (file)
@@ -2012,9 +2012,29 @@ void tst_QString::insert()
 
 void tst_QString::append()
 {
-    QString a;
-    a = "<>ABCABCABCABC";
-    QCOMPARE(a.append(">"),(QString)"<>ABCABCABCABC>");
+    {
+        QString a;
+        a = "<>ABCABCABCABC";
+        QCOMPARE(a.append(">"),QString("<>ABCABCABCABC>"));
+    }
+
+    {
+        QString a;
+        static const QChar unicode[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
+        a.append(unicode, sizeof unicode / sizeof *unicode);
+        QCOMPARE(a, QLatin1String("Hello, World!"));
+        static const QChar nl('\n');
+        a.append(&nl, 1);
+        QCOMPARE(a, QLatin1String("Hello, World!\n"));
+        a.append(unicode, sizeof unicode / sizeof *unicode);
+        QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+        a.append(unicode, 0); // no-op
+        QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+        a.append(unicode, -1); // no-op
+        QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+        a.append(0, 1); // no-op
+        QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+    }
 }
 
 void tst_QString::append_bytearray_data()