diff options
| author | Stefan Boberg <[email protected]> | 2021-09-19 23:30:03 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-19 23:30:03 +0200 |
| commit | 6240dbc8aac714998e38b92850c3bff3d579f2ab (patch) | |
| tree | 91adc07279f06f8a4c87a5f2aca4d8f9ae24041e | |
| parent | Implemended basic scrubbing / detection of disk corruption. Still needs more ... (diff) | |
| download | zen-6240dbc8aac714998e38b92850c3bff3d579f2ab.tar.xz zen-6240dbc8aac714998e38b92850c3bff3d579f2ab.zip | |
Implemented BasicFile::StreamByteRange
| -rw-r--r-- | zenstore/basicfile.cpp | 10 | ||||
| -rw-r--r-- | zenstore/include/zenstore/basicfile.h | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/zenstore/basicfile.cpp b/zenstore/basicfile.cpp index 126f2a8b3..0b92a8979 100644 --- a/zenstore/basicfile.cpp +++ b/zenstore/basicfile.cpp @@ -98,12 +98,18 @@ BasicFile::ReadAll() void BasicFile::StreamFile(std::function<void(const void* Data, uint64_t Size)>&& ChunkFun) { + StreamByteRange(0, FileSize(), std::move(ChunkFun)); +} + +void +BasicFile::StreamByteRange(uint64_t FileOffset, uint64_t Size, std::function<void(const void* Data, uint64_t Size)>&& ChunkFun) +{ const uint64_t ChunkSize = 128 * 1024; IoBuffer ReadBuffer{ChunkSize}; void* BufferPtr = ReadBuffer.MutableData(); - uint64_t RemainBytes = FileSize(); - uint64_t CurrentOffset = 0; + uint64_t RemainBytes = Size; + uint64_t CurrentOffset = FileOffset; while (RemainBytes) { diff --git a/zenstore/include/zenstore/basicfile.h b/zenstore/include/zenstore/basicfile.h index a5874cfe4..d4d65b366 100644 --- a/zenstore/include/zenstore/basicfile.h +++ b/zenstore/include/zenstore/basicfile.h @@ -31,6 +31,7 @@ public: void Close(); void Read(void* Data, uint64_t Size, uint64_t FileOffset); void StreamFile(std::function<void(const void* Data, uint64_t Size)>&& ChunkFun); + void StreamByteRange(uint64_t FileOffset, uint64_t Size, std::function<void(const void* Data, uint64_t Size)>&& ChunkFun); void Write(const void* Data, uint64_t Size, uint64_t FileOffset); void Flush(); uint64_t FileSize(); |