diff --git a/PortabilityLayer/MemReaderStream.cpp b/PortabilityLayer/MemReaderStream.cpp index 7efb234..27bd2fb 100644 --- a/PortabilityLayer/MemReaderStream.cpp +++ b/PortabilityLayer/MemReaderStream.cpp @@ -1,4 +1,5 @@ -#include "MemReaderStream.h" +#include "MemReaderStream.h" +#include "MemoryManager.h" #include @@ -9,6 +10,10 @@ namespace PortabilityLayer , m_size(size) , m_loc(0) { + } + + MemReaderStream::~MemReaderStream() + { } size_t MemReaderStream::Read(void *bytesOut, size_t size) @@ -110,5 +115,33 @@ namespace PortabilityLayer void MemReaderStream::Flush() { - } + } + + + MemBufferReaderStream::~MemBufferReaderStream() + { + if (m_buffer) + MemoryManager::GetInstance()->Release(m_buffer); + } + + MemBufferReaderStream *MemBufferReaderStream::Create(void *buffer, size_t size) + { + void *storage = MemoryManager::GetInstance()->Alloc(sizeof(MemBufferReaderStream)); + if (!storage) + return nullptr; + + return new (storage) MemBufferReaderStream(buffer, size); + } + + void MemBufferReaderStream::Close() + { + this->~MemBufferReaderStream(); + MemoryManager::GetInstance()->Release(this); + } + + MemBufferReaderStream::MemBufferReaderStream(void *buffer, size_t size) + : MemReaderStream(buffer, size) + , m_buffer(buffer) + { + } } diff --git a/PortabilityLayer/MemReaderStream.h b/PortabilityLayer/MemReaderStream.h index 97c106f..6962afa 100644 --- a/PortabilityLayer/MemReaderStream.h +++ b/PortabilityLayer/MemReaderStream.h @@ -7,10 +7,11 @@ namespace PortabilityLayer { - class MemReaderStream final : public GpIOStream + class MemReaderStream : public GpIOStream { public: - MemReaderStream(const void *memStream, size_t size); + MemReaderStream(const void *memStream, size_t size); + virtual ~MemReaderStream(); size_t Read(void *bytesOut, size_t size) override; size_t Write(const void *bytes, size_t size) override; @@ -32,6 +33,22 @@ namespace PortabilityLayer const uint8_t *m_bytes; size_t m_size; size_t m_loc; + }; + + class MemBufferReaderStream final : public MemReaderStream + { + public: + ~MemBufferReaderStream() override; + + static MemBufferReaderStream *Create(void *buffer, size_t size); + + void Close() override; + + private: + MemBufferReaderStream() GP_DELETED; + MemBufferReaderStream(void *buffer, size_t size); + + void *m_buffer; }; }