33 #ifndef AGS_SHARED_UTIL_STREAM_H 34 #define AGS_SHARED_UTIL_STREAM_H 36 #include "ags/shared/util/iags_stream.h" 37 #include "ags/shared/util/string.h" 38 #include "ags/lib/allegro/file.h" 39 #include "common/stream.h" 40 #include "common/types.h" 61 const String &GetPath()
const {
return _path; }
64 virtual bool GetError()
const {
return false; }
66 virtual bool Flush() = 0;
71 int8_t ReadInt8()
override {
75 size_t WriteInt8(int8_t val)
override {
76 int32_t ival = WriteByte(val);
77 return ival >= 0 ? ival : 0;
80 bool ReadBool()
override {
81 return ReadInt8() != 0;
84 size_t WriteBool(
bool val)
override {
85 return WriteInt8(val ? 1 : 0);
90 size_t ReadArrayOfInt8(int8_t *buffer,
size_t count)
override {
91 return Read(buffer, count);
93 size_t WriteArrayOfInt8(
const int8_t *buffer,
size_t count)
override {
94 return Write(buffer, count);
98 size_t WriteByteCount(uint8_t b,
size_t count);
107 DisposeAfterUse::Flag _disposeAfterUse;
110 DisposeAfterUse::YES) : _stream(src), _disposeAfterUse(disposeAfterUse) {
113 if (_disposeAfterUse == DisposeAfterUse::YES)
117 bool eos()
const override {
118 return _stream->EOS();
121 uint32
read(
void *dataPtr, uint32 dataSize)
override {
122 return _stream->Read(dataPtr, dataSize);
125 int64
pos()
const override {
126 return _stream->GetPosition();
130 return _stream->GetLength();
133 bool seek(int64 offset,
int whence = SEEK_SET)
override {
134 StreamSeek origin = kSeekBegin;
135 if (whence == SEEK_CUR)
136 origin = kSeekCurrent;
137 if (whence == SEEK_END)
140 return _stream->Seek(offset, origin);
148 DisposeAfterUse::Flag _disposeAfterUse;
151 DisposeAfterUse::YES) : _file(src), _disposeAfterUse(disposeAfterUse) {
154 if (_disposeAfterUse == DisposeAfterUse::YES)
158 bool eos()
const override {
159 return _file->pack_feof();
162 uint32
read(
void *dataPtr, uint32 dataSize)
override {
163 return _file->pack_fread(dataPtr, dataSize);
166 int64
pos()
const override {
167 error(
"Unsupported");
171 error(
"Unsupported");
174 bool seek(int64 offset,
int whence = SEEK_SET)
override {
175 error(
"Unsupported");
182 DisposeAfterUse::Flag _disposeAfterUse;
185 DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::NO) :
186 _stream(stream), _disposeAfterUse(disposeAfterUse) {
192 void Close()
override {
193 if (_disposeAfterUse == DisposeAfterUse::YES)
198 bool IsValid()
const override {
199 return _stream !=
nullptr;
201 bool EOS()
const override {
202 return _stream->
eos();
204 soff_t GetLength()
const override {
205 return _stream->
size();
207 soff_t GetPosition()
const override {
208 return _stream->
pos();
210 bool CanRead()
const override {
213 bool CanWrite()
const override {
216 bool CanSeek()
const override {
220 size_t Read(
void *buffer,
size_t size)
override {
221 return _stream->
read(buffer, size);
223 int32_t ReadByte()
override {
226 size_t Write(
const void *buffer,
size_t size)
override {
229 int32_t WriteByte(uint8_t b)
override {
233 int8_t ReadInt8()
override {
236 int16_t ReadInt16()
override {
239 int32_t ReadInt32()
override {
242 int64_t ReadInt64()
override {
245 bool ReadBool()
override {
248 size_t ReadArray(
void *buffer,
size_t elem_size,
size_t count)
override {
249 return _stream->
read(buffer, elem_size * count) / elem_size;
251 size_t ReadArrayOfInt8(int8_t *buffer,
size_t count)
override {
252 return _stream->
read(buffer, count);
254 size_t ReadArrayOfInt16(int16_t *buffer,
size_t count)
override {
255 for (
size_t i = 0; i < count; ++i)
259 size_t ReadArrayOfInt32(int32_t *buffer,
size_t count)
override {
260 for (
size_t i = 0; i < count; ++i)
264 size_t ReadArrayOfInt64(int64_t *buffer,
size_t count)
override {
265 for (
size_t i = 0; i < count; ++i)
270 size_t WriteInt8(int8_t val)
override {
273 size_t WriteInt16(int16_t val)
override {
276 size_t WriteInt32(int32_t val)
override {
279 size_t WriteInt64(int64_t val)
override {
282 size_t WriteBool(
bool val)
override {
285 size_t WriteArray(
const void *buffer,
size_t elem_size,
size_t count)
override {
288 size_t WriteArrayOfInt8(
const int8_t *buffer,
size_t count)
override {
291 size_t WriteArrayOfInt16(
const int16_t *buffer,
size_t count)
override {
294 size_t WriteArrayOfInt32(
const int32_t *buffer,
size_t count)
override {
297 size_t WriteArrayOfInt64(
const int64_t *buffer,
size_t count)
override {
301 soff_t Seek(soff_t offset, StreamSeek origin = kSeekCurrent)
override {
302 return _stream->
seek(offset, origin);
305 bool GetError()
const override {
306 return _stream->
err();
308 bool Flush()
override {
Definition: achievements_tables.h:27
uint32 read(void *dataPtr, uint32 dataSize) override
Definition: stream.h:121
virtual int64 size() const =0
uint32 read(void *dataPtr, uint32 dataSize) override
Definition: stream.h:162
virtual int64 pos() const =0
virtual bool err() const
Definition: stream.h:61
FORCEINLINE int32 readSint32LE()
Definition: stream.h:555
int64 size() const override
Definition: stream.h:129
Definition: iags_stream.h:53
virtual bool seek(int64 offset, int whence=SEEK_SET)=0
virtual bool eos() const =0
bool eos() const override
Definition: stream.h:158
bool eos() const override
Definition: stream.h:117
byte readByte()
Definition: stream.h:434
bool seek(int64 offset, int whence=SEEK_SET) override
Definition: stream.h:133
int64 size() const override
Definition: stream.h:170
FORCEINLINE int64 readSint64LE()
Definition: stream.h:567
bool seek(int64 offset, int whence=SEEK_SET) override
Definition: stream.h:174
int64 pos() const override
Definition: stream.h:166
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
FORCEINLINE int16 readSint16LE()
Definition: stream.h:543
int64 pos() const override
Definition: stream.h:125
virtual uint32 read(void *dataPtr, uint32 dataSize)=0