diff options
Diffstat (limited to 'zencore/sharedbuffer.cpp')
| -rw-r--r-- | zencore/sharedbuffer.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/zencore/sharedbuffer.cpp b/zencore/sharedbuffer.cpp index 9c788d29f..a14da1bf7 100644 --- a/zencore/sharedbuffer.cpp +++ b/zencore/sharedbuffer.cpp @@ -53,24 +53,30 @@ SharedBuffer::SharedBuffer(UniqueBuffer&& InBuffer) : m_Buffer(std::move(InBuffe { } -SharedBuffer& -SharedBuffer::MakeOwned() +SharedBuffer +SharedBuffer::MakeOwned() const& { if (IsOwned() || !m_Buffer) { return *this; } + else + { + return Clone(GetView()); + } +} - const uint64_t Size = m_Buffer->DataBytes(); - void* Buffer = Memory::Alloc(Size, 16); - IoBufferCore* NewOwner = new IoBufferCore(Buffer, Size); - NewOwner->SetIsOwnedByThis(true); - - memcpy(Buffer, m_Buffer->DataPointer(), Size); - - m_Buffer = NewOwner; - - return *this; +SharedBuffer +SharedBuffer::MakeOwned() && +{ + if (IsOwned()) + { + return std::move(*this); + } + else + { + return Clone(GetView()); + } } SharedBuffer |