11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
16PROMEKI_NAMESPACE_BEGIN
37class BufferedIODevice :
public IODevice {
38 PROMEKI_OBJECT(BufferedIODevice, IODevice)
44 BufferedIODevice(ObjectBase *parent =
nullptr);
47 virtual ~BufferedIODevice();
61 int64_t read(
void *data, int64_t maxSize)
override;
70 int64_t bytesAvailable()
const override;
83 Error setReadBuffer(Buffer &&buf);
89 const Buffer &readBuffer()
const {
return _readBuf; }
95 size_t readBufferSize()
const {
return _readBuf.availSize(); }
106 Buffer readLine(
size_t maxLength = 0);
119 Buffer readBytes(
size_t maxBytes);
128 bool canReadLine()
const;
138 int64_t peek(
void *buf,
size_t maxBytes)
const;
147 Buffer peek(
size_t maxBytes)
const;
159 void setUnbuffered(
bool enable);
165 bool isUnbuffered()
const {
return _unbuffered; }
177 virtual int64_t readFromDevice(
void *data, int64_t maxSize) = 0;
187 virtual int64_t deviceBytesAvailable()
const;
199 size_t bufferedBytesUnconsumed()
const {
return _readBufFill - _readBufPos; }
207 void ensureReadBuffer();
215 void resetReadBuffer();
219 static constexpr size_t DefaultReadBufSize = 8192;
221 bool _unbuffered =
false;
223 size_t _readBufPos = 0;
224 size_t _readBufFill = 0;
225 bool _bufferAllocated =
false;
231 int64_t fillBuffer();
236 void compactBuffer();