11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
21PROMEKI_NAMESPACE_BEGIN
39class IODevice :
public ObjectBase {
40 PROMEKI_OBJECT(IODevice, ObjectBase)
43 using UPtr = UniquePtr<IODevice>;
55 using Shared = SharedPtr<IODevice, false>;
62 ReadWrite = ReadOnly | WriteOnly,
63 Append = 0x04 | WriteOnly
70 IODevice(ObjectBase *parent =
nullptr) : ObjectBase(parent) {}
80 virtual Error open(OpenMode mode) = 0;
86 virtual Error close() = 0;
92 virtual bool isOpen()
const = 0;
100 virtual int64_t read(
void *data, int64_t maxSize) = 0;
108 virtual int64_t write(
const void *data, int64_t maxSize) = 0;
117 virtual void flush();
125 virtual int64_t bytesAvailable()
const;
132 virtual bool waitForReadyRead(
unsigned int timeoutMs = 0);
139 virtual bool waitForBytesWritten(
unsigned int timeoutMs = 0);
148 virtual bool isSequential()
const;
155 virtual Error seek(int64_t pos);
163 virtual int64_t pos()
const;
171 virtual Result<int64_t> size()
const;
179 virtual bool atEnd()
const;
185 OpenMode openMode()
const {
return _openMode; }
191 bool isReadable()
const {
return _openMode & ReadOnly; }
197 bool isWritable()
const {
return _openMode & WriteOnly; }
203 Error error()
const {
return _error; }
214 PROMEKI_SIGNAL(readyRead);
217 PROMEKI_SIGNAL(bytesWritten, int64_t);
220 PROMEKI_SIGNAL(errorOccurred, Error);
223 PROMEKI_SIGNAL(aboutToClose);
232 void setOpenMode(OpenMode mode) {
241 void setError(
const Error &err) {
243 if (err.isError()) errorOccurredSignal.emit(err);
248 OpenMode _openMode = NotOpen;