diff options
Diffstat (limited to 'source/core/stream.h')
| -rw-r--r-- | source/core/stream.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/source/core/stream.h b/source/core/stream.h index 4eea6a909..67a3549e9 100644 --- a/source/core/stream.h +++ b/source/core/stream.h @@ -53,7 +53,7 @@ namespace Slang enum class FileAccess { - Read = 1, Write = 2, ReadWrite = 3 + None = 0, Read = 1, Write = 2, ReadWrite = 3 }; enum class FileShare @@ -61,6 +61,32 @@ namespace Slang None, ReadOnly, WriteOnly, ReadWrite }; + class MemoryStream : public Stream + { + public: + virtual Int64 GetPosition() SLANG_OVERRIDE { return m_position; } + virtual void Seek(SeekOrigin origin, Int64 offset) SLANG_OVERRIDE; + virtual Int64 Read(void * buffer, Int64 length) SLANG_OVERRIDE; + virtual Int64 Write(const void * buffer, Int64 length) SLANG_OVERRIDE; + virtual bool IsEnd() SLANG_OVERRIDE { return m_atEnd; } + virtual bool CanRead() SLANG_OVERRIDE { return (int(m_access) & int(FileAccess::Read)) != 0; } + virtual bool CanWrite() SLANG_OVERRIDE { return (int(m_access) & int(FileAccess::Write)) != 0; } + virtual void Close() SLANG_OVERRIDE { m_access = FileAccess::None; } + + MemoryStream(FileAccess access) : + m_access(access), + m_position(0), + m_atEnd(false) + {} + + UInt m_position; + + bool m_atEnd; ///< Happens when a read is done and nothing can be returned because already at end + + FileAccess m_access; + List<uint8_t> m_contents; + }; + class FileStream : public Stream { private: |
