QBA::replace: avoid unconditional detach

Let's find needle and then do detach
While touching code, replace raw loop with algorithm
and add early out: compare before and after args

Change-Id: I22403fd3d6920d941b65e79f44b46e49a9777dc5
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Anton Kudryavtsev 2023-09-11 15:56:26 +03:00
parent 20980df293
commit 83c2c50554
1 changed files with 5 additions and 6 deletions

View File

@ -2562,12 +2562,11 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
QByteArray &QByteArray::replace(char before, char after)
{
if (!isEmpty()) {
char *i = data();
char *e = i + size();
for (; i != e; ++i)
if (*i == before)
* i = after;
if (before != after) {
if (const auto pos = indexOf(before); pos >= 0) {
const auto detachedData = data();
std::replace(detachedData + pos, detachedData + size(), before, after);
}
}
return *this;
}