diff options
Diffstat (limited to 'zencore/sharedbuffer.cpp')
| -rw-r--r-- | zencore/sharedbuffer.cpp | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/zencore/sharedbuffer.cpp b/zencore/sharedbuffer.cpp index bc991053d..db6deff38 100644 --- a/zencore/sharedbuffer.cpp +++ b/zencore/sharedbuffer.cpp @@ -10,68 +10,65 @@ namespace zen { -BufferOwner::~BufferOwner() -{ - if (m_IsOwned) - { - Memory::Free(m_Data); - } -} - ////////////////////////////////////////////////////////////////////////// UniqueBuffer UniqueBuffer::Alloc(uint64_t Size) { - void* Buffer = Memory::Alloc(Size, 16); - BufferOwner* Owner = new BufferOwner(Buffer, Size, /* owned */ true); + void* Buffer = Memory::Alloc(Size, 16); + IoBufferCore* Owner = new IoBufferCore(Buffer, Size); + Owner->SetIsOwnedByThis(true); + Owner->SetIsImmutable(false); return UniqueBuffer(Owner); } UniqueBuffer -UniqueBuffer::MakeView(void* DataPtr, uint64_t Size) +UniqueBuffer::MakeMutableView(void* DataPtr, uint64_t Size) { - return UniqueBuffer(new BufferOwner(DataPtr, Size, /* owned */ false)); + IoBufferCore* Owner = new IoBufferCore(DataPtr, Size); + Owner->SetIsImmutable(false); + return UniqueBuffer(Owner); } -UniqueBuffer::UniqueBuffer(BufferOwner* Owner) : m_buffer(Owner) +UniqueBuffer::UniqueBuffer(IoBufferCore* Owner) : m_Buffer(Owner) { } ////////////////////////////////////////////////////////////////////////// -SharedBuffer::SharedBuffer(UniqueBuffer&& InBuffer) : m_buffer(std::move(InBuffer.m_buffer)) +SharedBuffer::SharedBuffer(UniqueBuffer&& InBuffer) : m_Buffer(std::move(InBuffer.m_Buffer)) { } void SharedBuffer::MakeOwned() { - if (IsOwned() || !m_buffer) + if (IsOwned() || !m_Buffer) return; - const uint64_t Size = m_buffer->m_Size; + const uint64_t Size = m_Buffer->DataBytes(); void* Buffer = Memory::Alloc(Size, 16); - auto NewOwner = new BufferOwner(Buffer, Size, /* owned */ true); + auto NewOwner = new IoBufferCore(Buffer, Size); + NewOwner->SetIsOwnedByThis(true); - memcpy(Buffer, m_buffer->m_Data, Size); + memcpy(Buffer, m_Buffer->DataPointer(), Size); - m_buffer = NewOwner; + m_Buffer = NewOwner; } SharedBuffer -SharedBuffer::MakeView(MemoryView View, SharedBuffer Buffer) +SharedBuffer::MakeView(MemoryView View, SharedBuffer OuterBuffer) { // Todo: verify that view is within the shared buffer - return SharedBuffer(new BufferOwner(const_cast<void*>(View.GetData()), View.GetSize(), /* owned */ false, Buffer.m_buffer)); + return SharedBuffer(new IoBufferCore(OuterBuffer.m_Buffer, const_cast<void*>(View.GetData()), View.GetSize())); } SharedBuffer SharedBuffer::MakeView(const void* Data, uint64_t Size) { - return SharedBuffer(new BufferOwner(const_cast<void*>(Data), Size, /* owned */ false)); + return SharedBuffer(new IoBufferCore(const_cast<void*>(Data), Size)); } SharedBuffer @@ -79,8 +76,9 @@ SharedBuffer::Clone() { const uint64_t Size = GetSize(); void* Buffer = Memory::Alloc(Size, 16); - auto NewOwner = new BufferOwner(Buffer, Size, /* owned */ true); - memcpy(Buffer, m_buffer->m_Data, Size); + auto NewOwner = new IoBufferCore(Buffer, Size); + NewOwner->SetIsOwnedByThis(true); + memcpy(Buffer, m_Buffer->DataPointer(), Size); return SharedBuffer(NewOwner); } @@ -90,7 +88,8 @@ SharedBuffer::Clone(MemoryView View) { const uint64_t Size = View.GetSize(); void* Buffer = Memory::Alloc(Size, 16); - auto NewOwner = new BufferOwner(Buffer, Size, /* owned */ true); + auto NewOwner = new IoBufferCore(Buffer, Size); + NewOwner->SetIsOwnedByThis(true); memcpy(Buffer, View.GetData(), Size); return SharedBuffer(NewOwner); |