diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2010-02-16 14:37:44 (GMT) |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2010-02-16 18:10:39 (GMT) |
commit | 5af4e7d0e44be7d35c38c439fa9fc42f54ccd09b (patch) | |
tree | ffcf5e23c679ac4a753445403a4aa596ac188b35 | |
parent | 82027baa2c7705ae49300ce3ca0ac9eb4add2e96 (diff) | |
download | Qt-5af4e7d0e44be7d35c38c439fa9fc42f54ccd09b.zip Qt-5af4e7d0e44be7d35c38c439fa9fc42f54ccd09b.tar.gz Qt-5af4e7d0e44be7d35c38c439fa9fc42f54ccd09b.tar.bz2 |
avoid double reallocation in string-growing replace() case
detach() followed by resize() is suboptimal, as it first creates an
identically sized copy, and then a differently sized one.
Reviewed-by: joao
Reviewed-by: denis
-rw-r--r-- | src/corelib/tools/qstring.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index f85d794..cce313b 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -1800,13 +1800,14 @@ void QString::replace_helper(uint *indices, int nIndices, int blen, const QChar } QT_TRY { - detach(); if (blen == alen) { // replace in place + detach(); for (int i = 0; i < nIndices; ++i) memcpy(d->data + indices[i], afterBuffer, alen * sizeof(QChar)); } else if (alen < blen) { // replace from front + detach(); uint to = indices[0]; if (alen) memcpy(d->data+to, after, alen*sizeof(QChar)); |