aboutsummaryrefslogtreecommitdiff
path: root/zencore/sharedbuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-25 09:54:09 +0200
committerStefan Boberg <[email protected]>2021-05-25 09:54:09 +0200
commit882e93e4786f9e67e0edf6c276b16bb40848bae9 (patch)
treec5d4c45679c676c6aeb804c7601f43340b78ea0b /zencore/sharedbuffer.cpp
parentUpdated structured cache description (diff)
parentCompile out all rocksdb code for a smaller binary (diff)
downloadzen-882e93e4786f9e67e0edf6c276b16bb40848bae9.tar.xz
zen-882e93e4786f9e67e0edf6c276b16bb40848bae9.zip
Merged from origin/main
Diffstat (limited to 'zencore/sharedbuffer.cpp')
-rw-r--r--zencore/sharedbuffer.cpp26
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);