diff options
| author | Dan Engelbrecht <[email protected]> | 2023-10-13 09:38:02 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-13 09:38:02 +0200 |
| commit | 1d992a472c54ef9a63364996031e3c6d2f8affe5 (patch) | |
| tree | bb20344ed4c5b4295c12914bf0124e11be5ff3a7 /src/zenutil/basicfile.cpp | |
| parent | Merge pull request #465 from EpicGames/zs/default-port-change (diff) | |
| download | zen-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.cpp | 16 |
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); +} + /* ___________ __ \__ ___/___ _______/ |_ ______ |