summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2021-12-16 10:09:29 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-01-03 11:23:18 +0000
commit3666dad5e0a419bda8c3e952636fe6f3e3d764b1 (patch)
tree6433e376488b89d03020a529a3138c7174a9d18f
parent7e2860d4158438d714f2f86cd65b35f4ab1e2a60 (diff)
QByteArray: avoid detach() in a no-op replace()
When the the replacement has the same size as the replacee, but that size is zero, the whole operation is a no-op, and there's no need to detach(). [ChangeLog][QtCore][QByteArray] A replace(pos, n, after) call no longer detach()es when n == after.size() == 0. Change-Id: I1e8d7c7fb6383f8bfea3212e49fca8a128535564 Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit c953e5c41750ec886880cfb2cedb89f2886e5424) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/corelib/text/qbytearray.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index a03462561f..e339f2fef5 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -2170,9 +2170,10 @@ QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView aft
}
if (len == after.size() && (pos + len <= size())) {
// same size: in-place replacement possible
- detach();
- if (len > 0)
+ if (len > 0) {
+ detach();
memcpy(d.data() + pos, after.data(), len*sizeof(char));
+ }
return *this;
} else {
// ### optimize me