summaryrefslogtreecommitdiffstats
path: root/source/core/stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/stream.h')
-rw-r--r--source/core/stream.h28
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: