diff options
| author | Stefan Boberg <[email protected]> | 2021-05-13 12:01:18 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-13 12:01:18 +0200 |
| commit | 0b8280d4fcbf3a65997c3cc86cf14f5f7c44b7fe (patch) | |
| tree | 5ce29b79d0636e8e127c68c9fb9928b67759d1ac /zencore/iobuffer.cpp | |
| parent | clang-format (diff) | |
| download | zen-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.cpp | 20 |
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() |