aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-13 12:14:56 +0200
committerStefan Boberg <[email protected]>2021-05-13 12:14:56 +0200
commit18985cd6d3703f63fb8d307ca771396981883a10 (patch)
tree8ad53a95c86ceb625fbfe959eadb0d4a8c80dcfd
parentMade SharedBuffer/UniqueBuffer share guts with IoBuffer (diff)
downloadzen-18985cd6d3703f63fb8d307ca771396981883a10.tar.xz
zen-18985cd6d3703f63fb8d307ca771396981883a10.zip
CbWriter::Save now returns an immutable payload buffer
-rw-r--r--zencore/compactbinarybuilder.cpp6
-rw-r--r--zencore/include/zencore/sharedbuffer.h13
2 files changed, 14 insertions, 5 deletions
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<IoBufferCore> 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);