aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-13 12:01:18 +0200
committerStefan Boberg <[email protected]>2021-05-13 12:01:18 +0200
commit0b8280d4fcbf3a65997c3cc86cf14f5f7c44b7fe (patch)
tree5ce29b79d0636e8e127c68c9fb9928b67759d1ac /zencore/iobuffer.cpp
parentclang-format (diff)
downloadzen-0b8280d4fcbf3a65997c3cc86cf14f5f7c44b7fe.tar.xz
zen-0b8280d4fcbf3a65997c3cc86cf14f5f7c44b7fe.zip
Made SharedBuffer/UniqueBuffer share guts with IoBuffer
This enables way more efficient marshaling of compact binary objects and attachments
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp
index a42dd83f4..ec5d599b4 100644
--- a/zencore/iobuffer.cpp
+++ b/zencore/iobuffer.cpp
@@ -52,7 +52,7 @@ IoBufferCore::IoBufferCore(size_t InSize)
m_DataPtr = AllocateBuffer(InSize, sizeof(void*));
m_DataBytes = InSize;
- SetIsOwned(true);
+ SetIsOwnedByThis(true);
}
IoBufferCore::IoBufferCore(size_t InSize, size_t Alignment)
@@ -60,12 +60,12 @@ IoBufferCore::IoBufferCore(size_t InSize, size_t Alignment)
m_DataPtr = AllocateBuffer(InSize, Alignment);
m_DataBytes = InSize;
- SetIsOwned(true);
+ SetIsOwnedByThis(true);
}
IoBufferCore::~IoBufferCore()
{
- if (IsOwned() && m_DataPtr)
+ if (IsOwnedByThis() && m_DataPtr)
{
FreeBuffer();
m_DataPtr = nullptr;
@@ -104,12 +104,20 @@ IoBufferCore::MakeOwned(bool Immutable)
memcpy(OwnedDataPtr, m_DataPtr, m_DataBytes);
m_DataPtr = OwnedDataPtr;
- SetIsOwned(true);
+ SetIsOwnedByThis(true);
}
SetIsImmutable(Immutable);
}
+void*
+IoBufferCore::MutableDataPointer() const
+{
+ EnsureDataValid();
+ ZEN_ASSERT(!IsImmutable());
+ return const_cast<void*>(m_DataPtr);
+}
+
//////////////////////////////////////////////////////////////////////////
IoBufferExtendedCore::IoBufferExtendedCore(void* FileHandle, uint64_t Offset, uint64_t Size, bool TransferHandleOwnership)
@@ -117,7 +125,7 @@ IoBufferExtendedCore::IoBufferExtendedCore(void* FileHandle, uint64_t Offset, ui
, m_FileHandle(FileHandle)
, m_FileOffset(Offset)
{
- m_Flags |= kIsOwned | kIsExtended;
+ m_Flags |= kIsOwnedByThis | kIsExtended;
if (TransferHandleOwnership)
{
@@ -130,7 +138,7 @@ IoBufferExtendedCore::IoBufferExtendedCore(const IoBufferExtendedCore* Outer, ui
, m_FileHandle(Outer->m_FileHandle)
, m_FileOffset(Outer->m_FileOffset + Offset)
{
- m_Flags |= kIsOwned | kIsExtended;
+ m_Flags |= kIsOwnedByThis | kIsExtended;
}
IoBufferExtendedCore::~IoBufferExtendedCore()