QBuffer: optimize setData(ptr, n)

The old code always created a new QByteArray, always allocating
memory.

The new call assigns the data to the existing QByteArray, enabling
potential re-use of the internal QByteArray's buffer. Since QByteArray
is missing the STL-style assign() function, abuse replace() for this
task.

Change-Id: I357f11bad0a976d4d0fb2faeb93f8b2262fa5a65
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
This commit is contained in:
Marc Mutz 2022-08-17 13:34:40 +02:00
parent 817e47fbcd
commit 52c5f28695
2 changed files with 11 additions and 4 deletions

View File

@ -267,8 +267,6 @@ void QBuffer::setData(const QByteArray &data)
}
/*!
\fn void QBuffer::setData(const char *data, qsizetype size)
\overload
Sets the contents of the internal buffer to be the first \a size
@ -277,6 +275,16 @@ void QBuffer::setData(const QByteArray &data)
\note In Qt versions prior to 6.5, this function took the length as
an \c{int} parameter, potentially truncating sizes.
*/
void QBuffer::setData(const char *data, qsizetype size)
{
Q_D(QBuffer);
if (isOpen()) {
qWarning("QBuffer::setData: Buffer is open");
return;
}
d->buf->replace(qsizetype(0), d->buf->size(), // ### QByteArray lacks assign(ptr, n)
data, size);
}
/*!
\reimp

View File

@ -36,8 +36,7 @@ public:
#if QT_CORE_REMOVED_SINCE(6, 5) && QT_POINTER_SIZE != 4
void setData(const char *data, int len) { setData(data, qsizetype(len)); }
#endif
void setData(const char *data, qsizetype len)
{ setData(QByteArray(data, len)); }
void setData(const char *data, qsizetype len);
const QByteArray &data() const;
bool open(OpenMode openMode) override;