diff options
| author | Stefan Boberg <[email protected]> | 2021-05-24 13:19:21 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-24 13:19:21 +0200 |
| commit | 5cf5fd50b34dec7be0362b35046ffd44a3d58983 (patch) | |
| tree | b24065a931acfbb1158e30520c6fd267b3736289 /zencore/sharedbuffer.cpp | |
| parent | Added some functionality to support CompositeBuffer implementation (diff) | |
| download | zen-5cf5fd50b34dec7be0362b35046ffd44a3d58983.tar.xz zen-5cf5fd50b34dec7be0362b35046ffd44a3d58983.zip | |
Added functionality to SharedBuffer/UniqueBuffer to support CompositeBuffer implementation
Most importantly, UniqueBuffer may now be "null", whereas previously it would never be.
Diffstat (limited to 'zencore/sharedbuffer.cpp')
| -rw-r--r-- | zencore/sharedbuffer.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/zencore/sharedbuffer.cpp b/zencore/sharedbuffer.cpp index bbbaa0b24..13924c520 100644 --- a/zencore/sharedbuffer.cpp +++ b/zencore/sharedbuffer.cpp @@ -35,17 +35,25 @@ UniqueBuffer::UniqueBuffer(IoBufferCore* Owner) : m_Buffer(Owner) { } +SharedBuffer +UniqueBuffer::MoveToShared() +{ + return SharedBuffer(std::move(m_Buffer)); +} + ////////////////////////////////////////////////////////////////////////// SharedBuffer::SharedBuffer(UniqueBuffer&& InBuffer) : m_Buffer(std::move(InBuffer.m_Buffer)) { } -void +SharedBuffer& SharedBuffer::MakeOwned() { if (IsOwned() || !m_Buffer) - return; + { + return *this; + } const uint64_t Size = m_Buffer->DataBytes(); void* Buffer = Memory::Alloc(Size, 16); @@ -55,6 +63,8 @@ SharedBuffer::MakeOwned() memcpy(Buffer, m_Buffer->DataPointer(), Size); m_Buffer = NewOwner; + + return *this; } SharedBuffer @@ -65,6 +75,12 @@ SharedBuffer::MakeView(MemoryView View, SharedBuffer OuterBuffer) ZEN_ASSERT(OuterBuffer.GetView().Contains(View)); } + if (View == OuterBuffer.GetView()) + { + // Reference to the full buffer contents, so just return the "outer" + return OuterBuffer; + } + IoBufferCore* NewCore = new IoBufferCore(OuterBuffer.m_Buffer, View.GetData(), View.GetSize()); NewCore->SetIsImmutable(true); return SharedBuffer(NewCore); |