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
parent
20980df293
commit
83c2c50554
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue