diff options
| author | Stefan Boberg <[email protected]> | 2021-05-25 09:54:09 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-25 09:54:09 +0200 |
| commit | 882e93e4786f9e67e0edf6c276b16bb40848bae9 (patch) | |
| tree | c5d4c45679c676c6aeb804c7601f43340b78ea0b /zencore/sharedbuffer.cpp | |
| parent | Updated structured cache description (diff) | |
| parent | Compile out all rocksdb code for a smaller binary (diff) | |
| download | zen-882e93e4786f9e67e0edf6c276b16bb40848bae9.tar.xz zen-882e93e4786f9e67e0edf6c276b16bb40848bae9.zip | |
Merged from origin/main
Diffstat (limited to 'zencore/sharedbuffer.cpp')
| -rw-r--r-- | zencore/sharedbuffer.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/zencore/sharedbuffer.cpp b/zencore/sharedbuffer.cpp index bbbaa0b24..9c788d29f 100644 --- a/zencore/sharedbuffer.cpp +++ b/zencore/sharedbuffer.cpp @@ -35,17 +35,31 @@ UniqueBuffer::UniqueBuffer(IoBufferCore* Owner) : m_Buffer(Owner) { } +SharedBuffer +UniqueBuffer::MoveToShared() +{ + return SharedBuffer(std::move(m_Buffer)); +} + +void +UniqueBuffer::Reset() +{ + m_Buffer = nullptr; +} + ////////////////////////////////////////////////////////////////////////// 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 +69,8 @@ SharedBuffer::MakeOwned() memcpy(Buffer, m_Buffer->DataPointer(), Size); m_Buffer = NewOwner; + + return *this; } SharedBuffer @@ -65,6 +81,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); |