aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/basicfile.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-10-13 09:38:02 +0200
committerGitHub <[email protected]>2023-10-13 09:38:02 +0200
commit1d992a472c54ef9a63364996031e3c6d2f8affe5 (patch)
treebb20344ed4c5b4295c12914bf0124e11be5ff3a7 /src/zenutil/basicfile.cpp
parentMerge pull request #465 from EpicGames/zs/default-port-change (diff)
downloadzen-1d992a472c54ef9a63364996031e3c6d2f8affe5.tar.xz
zen-1d992a472c54ef9a63364996031e3c6d2f8affe5.zip
faster oplog iteration (#471)
* use a CbObjectView instead of CbObject to avoid creating IOBufferCore instances * use BasicFileBuffer directly where possible * changelog
Diffstat (limited to 'src/zenutil/basicfile.cpp')
-rw-r--r--src/zenutil/basicfile.cpp16
1 files changed, 16 insertions, 0 deletions
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);
+}
+
/*
___________ __
\__ ___/___ _______/ |_ ______