diff options
| author | Dan Engelbrecht <[email protected]> | 2025-10-13 13:32:36 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-10-13 13:32:36 +0200 |
| commit | a6925de9bca8579637fa8a4152ab2b77ef5ca90e (patch) | |
| tree | e2742dcc584e78de7f8921bd655c22929b37da80 /src/zenutil/include | |
| parent | move service common code into base class (#567) (diff) | |
| download | zen-a6925de9bca8579637fa8a4152ab2b77ef5ca90e.tar.xz zen-a6925de9bca8579637fa8a4152ab2b77ef5ca90e.zip | |
refactor builds cmd (#566)
Move builds download code from builds_cmd.cpp to remotestorelib
Diffstat (limited to 'src/zenutil/include')
| -rw-r--r-- | src/zenutil/include/zenutil/bufferedopenfile.h | 43 |
1 files changed, 43 insertions, 0 deletions
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 <zencore/basicfile.h> + +namespace zen { + +class CompositeBuffer; + +class BufferedOpenFile +{ +public: + BufferedOpenFile(const std::filesystem::path Path, + std::atomic<uint64_t>& OpenReadCount, + std::atomic<uint64_t>& CurrentOpenFileCount, + std::atomic<uint64_t>& ReadCount, + std::atomic<uint64_t>& 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<uint64_t>& m_OpenReadCount; + std::atomic<uint64_t>& m_CurrentOpenFileCount; + std::atomic<uint64_t>& m_ReadCount; + std::atomic<uint64_t>& m_ReadByteCount; + uint64_t m_CacheBlockIndex = (uint64_t)-1; + IoBuffer m_Cache; +}; + +} // namespace zen |