qmake: add ProStringList::join(QChar)
authorMarc Mutz <marc.mutz@kdab.com>
Wed, 19 Sep 2012 15:50:42 +0000 (17:50 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 5 Nov 2012 13:03:22 +0000 (14:03 +0100)
Same reasoning as for 68e04c3ac148bcbe71f2deeb7288563f6cdbcab5 applies.

Adding the overload was easier than to teach a Perl script to distinguish
between QStringList and ProStringList instances...

Change-Id: I6de6ecf21fdad135ac213b5c794927a9bc120a92
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
(cherry picked from qtbase/cbf447069cfeb799ff5e09902be065d77f2e7707)
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
src/linguist/shared/proitems.cpp
src/linguist/shared/proitems.h

index 35c0c2d..34aea1d 100644 (file)
@@ -345,30 +345,41 @@ QTextStream &operator<<(QTextStream &t, const ProString &str)
     return t;
 }
 
-QString ProStringList::join(const QString &sep) const
+static QString ProStringList_join(const ProStringList &this_, const QChar *sep, const size_t sepSize)
 {
     int totalLength = 0;
-    const int sz = size();
+    const int sz = this_.size();
 
     for (int i = 0; i < sz; ++i)
-        totalLength += at(i).size();
+        totalLength += this_.at(i).size();
 
     if (sz)
-        totalLength += sep.size() * (sz - 1);
+        totalLength += sepSize * (sz - 1);
 
     QString res(totalLength, Qt::Uninitialized);
     QChar *ptr = (QChar *)res.constData();
     for (int i = 0; i < sz; ++i) {
         if (i) {
-            memcpy(ptr, sep.constData(), sep.size() * 2);
-            ptr += sep.size();
+            memcpy(ptr, sep, sepSize * sizeof(QChar));
+            ptr += sepSize;
         }
-        memcpy(ptr, at(i).constData(), at(i).size() * 2);
-        ptr += at(i).size();
+        const ProString &str = this_.at(i);
+        memcpy(ptr, str.constData(), str.size() * sizeof(QChar));
+        ptr += str.size();
     }
     return res;
 }
 
+QString ProStringList::join(const QString &sep) const
+{
+    return ProStringList_join(*this, sep.constData(), sep.size());
+}
+
+QString ProStringList::join(QChar sep) const
+{
+    return ProStringList_join(*this, &sep, 1);
+}
+
 void ProStringList::removeAll(const ProString &str)
 {
     for (int i = size(); --i >= 0; )
index bbfc2df..addb808 100644 (file)
@@ -245,6 +245,7 @@ public:
     int length() const { return size(); }
 
     QString join(const QString &sep) const;
+    QString join(QChar sep) const;
 
     void removeAll(const ProString &str);
     void removeAll(const char *str);