From 18985cd6d3703f63fb8d307ca771396981883a10 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Thu, 13 May 2021 12:14:56 +0200 Subject: CbWriter::Save now returns an immutable payload buffer --- zencore/compactbinarybuilder.cpp | 6 ++++-- zencore/include/zencore/sharedbuffer.h | 13 ++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'zencore') diff --git a/zencore/compactbinarybuilder.cpp b/zencore/compactbinarybuilder.cpp index d1422e5a2..74756b51c 100644 --- a/zencore/compactbinarybuilder.cpp +++ b/zencore/compactbinarybuilder.cpp @@ -118,8 +118,10 @@ CbWriter::Save() { const uint64_t Size = GetSaveSize(); UniqueBuffer Buffer = UniqueBuffer::Alloc(Size); - const CbFieldViewIterator Output = Save(MutableMemoryView(Buffer.GetData(), Buffer.GetSize())); - SharedBuffer SharedBuf(std::move(Buffer)); + const CbFieldViewIterator Output = Save(Buffer); + + SharedBuffer SharedBuf(std::move(Buffer)); + SharedBuf.MakeImmutable(); return CbFieldIterator::MakeRangeView(Output, SharedBuf); } diff --git a/zencore/include/zencore/sharedbuffer.h b/zencore/include/zencore/sharedbuffer.h index 093f43231..7f9c61adb 100644 --- a/zencore/include/zencore/sharedbuffer.h +++ b/zencore/include/zencore/sharedbuffer.h @@ -22,8 +22,8 @@ class UniqueBuffer public: UniqueBuffer(const UniqueBuffer&) = delete; UniqueBuffer& operator=(const UniqueBuffer&) = delete; + UniqueBuffer() = delete; - UniqueBuffer() = default; ZENCORE_API explicit UniqueBuffer(IoBufferCore* Owner); void* GetData() { return m_Buffer->MutableDataPointer(); } @@ -42,6 +42,7 @@ public: ZENCORE_API static UniqueBuffer MakeMutableView(void* DataPtr, uint64_t Size); private: + // This may never be null RefPtr m_Buffer; friend class SharedBuffer; @@ -76,6 +77,12 @@ public: return 0; } + inline void MakeImmutable() + { + ZEN_ASSERT(m_Buffer); + m_Buffer->SetIsImmutable(true); + } + ZENCORE_API void MakeOwned(); bool IsOwned() const { return m_Buffer && m_Buffer->IsOwned(); } inline explicit operator bool() const { return m_Buffer; } @@ -109,8 +116,8 @@ public: /** Make a non-owned view of the input */ ZENCORE_API static SharedBuffer MakeView(const void* Data, uint64_t Size); /** Make a non-owned view of the input */ - ZENCORE_API static SharedBuffer MakeView(MemoryView View, SharedBuffer Buffer); - /** Make am owned clone of the buffer */ + ZENCORE_API static SharedBuffer MakeView(MemoryView View, SharedBuffer OuterBuffer); + /** Make an owned clone of the buffer */ ZENCORE_API SharedBuffer Clone(); /** Make an owned clone of the memory in the input view */ ZENCORE_API static SharedBuffer Clone(MemoryView View); -- cgit v1.2.3