11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
19PROMEKI_NAMESPACE_BEGIN
69class AsyncBufferQueue :
public IODevice {
70 PROMEKI_OBJECT(AsyncBufferQueue, IODevice)
73 explicit AsyncBufferQueue(ObjectBase *parent =
nullptr);
76 ~AsyncBufferQueue()
override;
84 Error open(OpenMode mode)
override;
94 Error close()
override;
97 bool isOpen()
const override;
100 int64_t read(
void *data, int64_t maxSize)
override;
112 int64_t write(
const void *data, int64_t maxSize)
override;
115 int64_t bytesAvailable()
const override;
118 bool isSequential()
const override;
127 Error seek(int64_t pos)
override;
130 int64_t pos()
const override;
140 Result<int64_t> size()
const override;
150 bool atEnd()
const override;
170 Error enqueue(
const Buffer &segment);
185 bool isWritingClosed()
const;
188 size_t segmentCount()
const;
196 mutable Mutex _mutex;
197 List<Segment> _segments;
198 int64_t _queuedBytes = 0;
199 int64_t _readPos = 0;
200 bool _writingClosed =
false;