Files
Aerofoil/GpCommon/GpIOStream.h

43 lines
1.1 KiB
C
Raw Permalink Normal View History

2020-09-12 13:32:53 -04:00
#pragma once
2021-03-18 17:08:11 -04:00
#include <stddef.h>
2020-09-12 13:32:53 -04:00
#include "GpFilePos.h"
2021-04-19 01:02:10 -04:00
#include "CoreDefs.h"
2020-09-12 13:32:53 -04:00
class GpIOStream
{
public:
virtual size_t Read(void *bytesOut, size_t size) = 0;
virtual size_t Write(const void *bytes, size_t size) = 0;
virtual bool IsSeekable() const = 0;
virtual bool IsReadOnly() const = 0;
virtual bool IsWriteOnly() const = 0;
virtual bool SeekStart(GpUFilePos_t loc) = 0;
virtual bool SeekCurrent(GpFilePos_t loc) = 0;
virtual bool SeekEnd(GpUFilePos_t loc) = 0;
virtual GpUFilePos_t Size() const = 0;
virtual GpUFilePos_t Tell() const = 0;
2021-04-19 01:02:10 -04:00
virtual void GP_ASYNCIFY_PARANOID_NAMED(Close)() = 0;
2020-09-12 13:32:53 -04:00
virtual void Flush() = 0;
2021-03-07 04:24:13 -05:00
bool ReadExact(void *bytesOut, size_t size);
bool WriteExact(const void *bytesOut, size_t size);
2021-04-19 01:02:10 -04:00
#if GP_ASYNCIFY_PARANOID
void Close();
#endif
2020-09-12 13:32:53 -04:00
};
2021-03-07 04:24:13 -05:00
inline bool GpIOStream::ReadExact(void *bytesOut, size_t size)
{
const size_t nRead = this->Read(bytesOut, size);
return nRead == size;
}
inline bool GpIOStream::WriteExact(const void *bytes, size_t size)
{
const size_t nWritten = this->Write(bytes, size);
return nWritten == size;
}