Add memory buffer stream

This commit is contained in:
elasota
2020-11-30 18:42:35 -05:00
parent 70e0948847
commit f0b1d6fff9
2 changed files with 54 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
#include "MemReaderStream.h" #include "MemReaderStream.h"
#include "MemoryManager.h"
#include <string.h> #include <string.h>
@@ -11,6 +12,10 @@ namespace PortabilityLayer
{ {
} }
MemReaderStream::~MemReaderStream()
{
}
size_t MemReaderStream::Read(void *bytesOut, size_t size) size_t MemReaderStream::Read(void *bytesOut, size_t size)
{ {
size_t available = m_size - m_loc; size_t available = m_size - m_loc;
@@ -111,4 +116,32 @@ namespace PortabilityLayer
void MemReaderStream::Flush() 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)
{
}
} }

View File

@@ -7,10 +7,11 @@
namespace PortabilityLayer namespace PortabilityLayer
{ {
class MemReaderStream final : public GpIOStream class MemReaderStream : public GpIOStream
{ {
public: 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 Read(void *bytesOut, size_t size) override;
size_t Write(const void *bytes, size_t size) override; size_t Write(const void *bytes, size_t size) override;
@@ -33,6 +34,22 @@ namespace PortabilityLayer
size_t m_size; size_t m_size;
size_t m_loc; 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;
};
} }
#endif #endif