From 1d992a472c54ef9a63364996031e3c6d2f8affe5 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Fri, 13 Oct 2023 09:38:02 +0200 Subject: faster oplog iteration (#471) * use a CbObjectView instead of CbObject to avoid creating IOBufferCore instances * use BasicFileBuffer directly where possible * changelog --- src/zenutil/basicfile.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/zenutil/basicfile.cpp') diff --git a/src/zenutil/basicfile.cpp b/src/zenutil/basicfile.cpp index 99aa6bf39..259d622c4 100644 --- a/src/zenutil/basicfile.cpp +++ b/src/zenutil/basicfile.cpp @@ -614,6 +614,22 @@ BasicFileBuffer::Read(void* Data, uint64_t Size, uint64_t FileOffset) ZEN_ASSERT(Begin + Count == End); } +MemoryView +BasicFileBuffer::MakeView(uint64_t Size, uint64_t FileOffset) +{ + if (FileOffset < m_BufferStart || (FileOffset + Size) > m_BufferEnd) + { + if (m_Buffer == nullptr || (Size > m_BufferSize) || (FileOffset + Size > m_Size)) + { + return {}; + } + m_BufferStart = FileOffset; + m_BufferEnd = Min(m_BufferStart + m_BufferSize, m_Size); + m_Base.Read(m_Buffer, m_BufferEnd - m_BufferStart, m_BufferStart); + } + return MemoryView(m_Buffer + (FileOffset - m_BufferStart), Size); +} + /* ___________ __ \__ ___/___ _______/ |_ ______ -- cgit v1.2.3