Make QRingBuffer::append() not leave empty arrays in buffer list

Change-Id: I4c5af33488a70996299289ec2b953b7bf3b2c428
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
bb10
Alex Trotsenko 2014-07-21 16:35:43 +03:00
parent 3905c6f00d
commit edfac1a9ed
2 changed files with 22 additions and 3 deletions

View File

@ -369,9 +369,13 @@ public:
// append a new buffer to the end
inline void append(const QByteArray &qba) {
buffers[tailBuffer].resize(tail);
buffers << qba;
++tailBuffer;
if (tail == 0) {
buffers.last() = qba;
} else {
buffers.last().resize(tail);
buffers << qba;
++tailBuffer;
}
tail = qba.length();
bufferSize += qba.length();
}

View File

@ -54,6 +54,7 @@ private slots:
void sizeWhenEmpty();
void sizeWhenReservedAndChopped();
void sizeWhenReserved();
void appendAndRead();
};
void tst_QRingBuffer::sizeWhenReserved()
@ -179,6 +180,20 @@ void tst_QRingBuffer::readPointerAtPositionWriteRead()
QVERIFY(outData.buffer().startsWith(inData.buffer()));
}
void tst_QRingBuffer::appendAndRead()
{
QRingBuffer ringBuffer;
QByteArray ba1("Hello world!");
QByteArray ba2("Test string.");
QByteArray ba3("0123456789");
ringBuffer.append(ba1);
ringBuffer.append(ba2);
ringBuffer.append(ba3);
QVERIFY(ringBuffer.read() == ba1);
QVERIFY(ringBuffer.read() == ba2);
QVERIFY(ringBuffer.read() == ba3);
}
QTEST_APPLESS_MAIN(tst_QRingBuffer)
#include "tst_qringbuffer.moc"