5#include "private/qringbuffer_p.h"
6#include "private/qbytearray_p.h"
14static_assert(std::is_nothrow_default_constructible_v<QRingChunk>);
15static_assert(std::is_nothrow_move_constructible_v<QRingChunk>);
16static_assert(std::is_nothrow_move_assignable_v<QRingChunk>);
31 chunk =
QByteArray(std::as_const(*this).data(), chunkSize);
33 tailOffset = chunkSize;
39 if (headOffset != 0 || tailOffset != chunk.size()) {
44 chunk.remove(0, headOffset);
47 return std::move(chunk);
65 return chunk.data() +
pos;
86 if (bufferSize == bytes) {
113 if (bufferSize == 0) {
129 return buffers.last().data() + tail;
142 if (bufferSize == 0) {
152 if (basicBlockSize == 0 || chunk.
isShared() || bytes > chunk.
head()) {
157 buffers.first().advance(-bytes);
177 if (bufferSize == bytes) {
219 if (nextBlockIndex > 0) {
220 const char *
ptr = chunk.data();
226 const char *findPtr =
reinterpret_cast<const char *
>(memchr(
ptr,
c,
227 nextBlockIndex -
index));
234 index = nextBlockIndex;
243 while (readSoFar < bytesToRead) {
244 const qint64 bytesToReadFromThisBlock =
qMin(bytesToRead - readSoFar,
248 readSoFar += bytesToReadFromThisBlock;
249 free(bytesToReadFromThisBlock);
264 bufferSize -=
buffers.constFirst().size();
265 return buffers.takeFirst().toByteArray();
282 qint64 blockLength = chunk.size();
283 if (
pos < blockLength) {
285 memcpy(
data + readSoFar, chunk.data() +
pos, blockLength);
286 readSoFar += blockLength;
310 *writePointer = *
data;
322 if (bufferSize != 0 ||
buffers.isEmpty())
326 bufferSize += qba.
size();
336 const auto qbaSize = qba.size();
337 if (bufferSize != 0 ||
buffers.isEmpty())
338 buffers.emplace_back(std::move(qba));
340 buffers.last().assign(std::move(qba));
341 bufferSize += qbaSize;
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
QByteArray sliced(qsizetype pos) const
void resize(qsizetype size)
Sets the size of the byte array to size bytes.
Q_CORE_EXPORT void free(qint64 bytes)
Q_CORE_EXPORT QByteArray read()
Q_CORE_EXPORT qint64 peek(char *data, qint64 maxLength, qint64 pos=0) const
Q_CORE_EXPORT qint64 readLine(char *data, qint64 maxLength)
const char * readPointer() const
Q_CORE_EXPORT const char * readPointerAtPosition(qint64 pos, qint64 &length) const
Q_CORE_EXPORT void chop(qint64 bytes)
Q_CORE_EXPORT char * reserve(qint64 bytes)
Q_CORE_EXPORT void append(const char *data, qint64 size)
Q_CORE_EXPORT char * reserveFront(qint64 bytes)
qint64 indexOf(char c) const
Q_CORE_EXPORT void clear()
qint64 nextDataBlockSize() const
void advance(qsizetype offset)
void allocate(qsizetype alloc)
void grow(qsizetype offset)
qsizetype available() const
qsizetype capacity() const
Q_CORE_EXPORT void detach()
QByteArray toByteArray() &&
Combined button and popup list for selecting options.
constexpr Initialization Uninitialized
QT_BEGIN_NAMESPACE constexpr qsizetype MaxByteArraySize
static ControlElement< T > * ptr(QWidget *widget)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
GLuint const GLuint * buffers
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data