QByteArray: make (ap|pre)pend(const QByteArray &) consider reserved
Append was previously optimized for lhs being empty but it should've also taken into account if space had been reserved. Apply the same optimization to prepend while we're at it. Change-Id: I5e5d33a3189b9ad88d45e858a2ac412cbc294f79 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
2c4874be40
commit
205629bb62
|
|
@ -1784,6 +1784,12 @@ QByteArray QByteArray::nulTerminated() const
|
|||
|
||||
Prepends \a ba to this byte array.
|
||||
*/
|
||||
QByteArray &QByteArray::prepend(const QByteArray &ba)
|
||||
{
|
||||
if (size() == 0 && ba.size() > d.constAllocatedCapacity() && ba.d.isMutable())
|
||||
return (*this = ba);
|
||||
return prepend(QByteArrayView(ba));
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QByteArray &QByteArray::prepend(const char *str)
|
||||
|
|
@ -1842,7 +1848,7 @@ QByteArray QByteArray::nulTerminated() const
|
|||
|
||||
QByteArray &QByteArray::append(const QByteArray &ba)
|
||||
{
|
||||
if (size() == 0 && ba.d.isMutable())
|
||||
if (size() == 0 && ba.size() > d.constAllocatedCapacity() && ba.d.isMutable())
|
||||
return (*this = ba);
|
||||
return append(QByteArrayView(ba));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -283,8 +283,7 @@ public:
|
|||
{ return insert(0, QByteArrayView(s, qsizetype(qstrlen(s)))); }
|
||||
QByteArray &prepend(const char *s, qsizetype len)
|
||||
{ return insert(0, QByteArrayView(s, len)); }
|
||||
QByteArray &prepend(const QByteArray &a)
|
||||
{ return insert(0, a); }
|
||||
QByteArray &prepend(const QByteArray &a);
|
||||
QByteArray &prepend(QByteArrayView a)
|
||||
{ return insert(0, a); }
|
||||
|
||||
|
|
|
|||
|
|
@ -838,6 +838,12 @@ void tst_QByteArray::prepend()
|
|||
QCOMPARE(ba.prepend(-1, 'x'), QByteArray("321foo"));
|
||||
QCOMPARE(ba.prepend(3, 'x'), QByteArray("xxx321foo"));
|
||||
QCOMPARE(ba.prepend("\0 ", 2), QByteArray::fromRawData("\0 xxx321foo", 11));
|
||||
|
||||
QByteArray tenChars;
|
||||
tenChars.reserve(10);
|
||||
QByteArray twoChars("ab");
|
||||
tenChars.prepend(twoChars);
|
||||
QCOMPARE(tenChars.capacity(), 10);
|
||||
}
|
||||
|
||||
void tst_QByteArray::prependExtended_data()
|
||||
|
|
@ -882,6 +888,12 @@ void tst_QByteArray::append()
|
|||
QCOMPARE(ba.append("\0"), QByteArray("foo123xxx"));
|
||||
QCOMPARE(ba.append("\0", 1), QByteArray::fromRawData("foo123xxx\0", 10));
|
||||
QCOMPARE(ba.size(), 10);
|
||||
|
||||
QByteArray tenChars;
|
||||
tenChars.reserve(10);
|
||||
QByteArray twoChars("ab");
|
||||
tenChars.append(twoChars);
|
||||
QCOMPARE(tenChars.capacity(), 10);
|
||||
}
|
||||
|
||||
void tst_QByteArray::appendExtended_data()
|
||||
|
|
|
|||
Loading…
Reference in New Issue