From 633dee5f8688c104a04f0ec719b756dbbad7142f Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Tue, 23 May 2023 10:13:47 +0200 Subject: streaming decompression support (#142) Added CompressedBufferReader support from UE. This provides some streaming decompression support which can be employed to reduce memory and other resource usage. --- src/zencore/compositebuffer.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/zencore/compositebuffer.cpp') diff --git a/src/zencore/compositebuffer.cpp b/src/zencore/compositebuffer.cpp index 735020451..c49bf775c 100644 --- a/src/zencore/compositebuffer.cpp +++ b/src/zencore/compositebuffer.cpp @@ -58,7 +58,7 @@ CompositeBuffer::MakeOwned() && } SharedBuffer -CompositeBuffer::Flatten() const& +CompositeBuffer::ToShared() const& { switch (m_Segments.size()) { @@ -81,7 +81,7 @@ CompositeBuffer::Flatten() const& } SharedBuffer -CompositeBuffer::Flatten() && +CompositeBuffer::ToShared() && { return m_Segments.size() == 1 ? std::move(m_Segments[0]) : std::as_const(*this).Flatten(); } @@ -100,10 +100,13 @@ CompositeBuffer::Mid(uint64_t Offset, uint64_t Size) const } MemoryView -CompositeBuffer::ViewOrCopyRange(uint64_t Offset, uint64_t Size, UniqueBuffer& CopyBuffer) const +CompositeBuffer::ViewOrCopyRange(uint64_t Offset, + uint64_t Size, + UniqueBuffer& CopyBuffer, + std::function Allocator) const { MemoryView View; - IterateRange(Offset, Size, [Size, &View, &CopyBuffer, WriteView = MutableMemoryView()](MemoryView Segment) mutable { + IterateRange(Offset, Size, [Size, &View, &CopyBuffer, &Allocator, WriteView = MutableMemoryView()](MemoryView Segment) mutable { if (Size == Segment.GetSize()) { View = Segment; @@ -114,7 +117,7 @@ CompositeBuffer::ViewOrCopyRange(uint64_t Offset, uint64_t Size, UniqueBuffer& C { if (CopyBuffer.GetSize() < Size) { - CopyBuffer = UniqueBuffer::Alloc(Size); + CopyBuffer = Allocator(Size); } View = WriteView = CopyBuffer.GetMutableView().Left(Size); } -- cgit v1.2.3