From a6925de9bca8579637fa8a4152ab2b77ef5ca90e Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Mon, 13 Oct 2025 13:32:36 +0200 Subject: refactor builds cmd (#566) Move builds download code from builds_cmd.cpp to remotestorelib --- src/zenutil/include/zenutil/bufferedopenfile.h | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/zenutil/include/zenutil/bufferedopenfile.h (limited to 'src/zenutil/include') diff --git a/src/zenutil/include/zenutil/bufferedopenfile.h b/src/zenutil/include/zenutil/bufferedopenfile.h new file mode 100644 index 000000000..3af7c9991 --- /dev/null +++ b/src/zenutil/include/zenutil/bufferedopenfile.h @@ -0,0 +1,43 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include + +namespace zen { + +class CompositeBuffer; + +class BufferedOpenFile +{ +public: + BufferedOpenFile(const std::filesystem::path Path, + std::atomic& OpenReadCount, + std::atomic& CurrentOpenFileCount, + std::atomic& ReadCount, + std::atomic& ReadByteCount); + ~BufferedOpenFile(); + BufferedOpenFile() = delete; + BufferedOpenFile(const BufferedOpenFile&) = delete; + BufferedOpenFile(BufferedOpenFile&&) = delete; + BufferedOpenFile& operator=(BufferedOpenFile&&) = delete; + BufferedOpenFile& operator=(const BufferedOpenFile&) = delete; + + const uint64_t BlockSize = 256u * 1024u; + CompositeBuffer GetRange(uint64_t Offset, uint64_t Size); + +public: + void* Handle() { return m_Source.Handle(); } + +private: + BasicFile m_Source; + const uint64_t m_SourceSize; + std::atomic& m_OpenReadCount; + std::atomic& m_CurrentOpenFileCount; + std::atomic& m_ReadCount; + std::atomic& m_ReadByteCount; + uint64_t m_CacheBlockIndex = (uint64_t)-1; + IoBuffer m_Cache; +}; + +} // namespace zen -- cgit v1.2.3