libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
fileiodevice.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <cstdio>
14#include <promeki/namespace.h>
15#include <promeki/iodevice.h>
16#include <promeki/string.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
54class FileIODevice : public IODevice {
55 PROMEKI_OBJECT(FileIODevice, IODevice)
56 public:
58 enum Flag {
59 NoFlags = 0x00,
60 OwnsFile = 0x01
61 };
62
72 static FileIODevice *stdinDevice();
73
83 static FileIODevice *stdoutDevice();
84
94 static FileIODevice *stderrDevice();
95
108 FileIODevice(FILE *file, OpenMode mode, int flags = NoFlags, ObjectBase *parent = nullptr);
109
119 explicit FileIODevice(const String &filename, ObjectBase *parent = nullptr);
120
129 explicit FileIODevice(ObjectBase *parent = nullptr);
130
132 ~FileIODevice() override;
133
141 void setFilename(const String &filename);
142
147 const String &filename() const { return _filename; }
148
153 FILE *file() const { return _file; }
154
159 bool ownsFile() const { return _ownsFile; }
160
170 FILE *takeFile();
171
182 Error open(OpenMode mode) override;
183
184 Error close() override;
185 void flush() override;
186 bool isOpen() const override;
187 int64_t read(void *data, int64_t maxSize) override;
188 int64_t write(const void *data, int64_t maxSize) override;
189 bool isSequential() const override;
190 Error seek(int64_t pos) override;
191 int64_t pos() const override;
192 bool atEnd() const override;
193
194 private:
195 FILE *_file = nullptr;
196 String _filename;
197 bool _ownsFile = false;
198};
199
200PROMEKI_NAMESPACE_END
201
202#endif // PROMEKI_ENABLE_CORE