diff options
author | denplusplus <denplusplus@yandex-team.ru> | 2022-02-10 16:47:34 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:34 +0300 |
commit | 57c20d143e8a438cd76b9fdc3ca2e8ee3ac1f32a (patch) | |
tree | cc63639f8e502db19a82c20e2861c6d1edbf9fea /library/cpp/on_disk/chunks/reader.cpp | |
parent | 464ba3814a83db4f2d5327393b0b6eaf0c86bfd7 (diff) | |
download | ydb-57c20d143e8a438cd76b9fdc3ca2e8ee3ac1f32a.tar.gz |
Restoring authorship annotation for <denplusplus@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/on_disk/chunks/reader.cpp')
-rw-r--r-- | library/cpp/on_disk/chunks/reader.cpp | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/library/cpp/on_disk/chunks/reader.cpp b/library/cpp/on_disk/chunks/reader.cpp index 6e28cbf367..af4fef0ecf 100644 --- a/library/cpp/on_disk/chunks/reader.cpp +++ b/library/cpp/on_disk/chunks/reader.cpp @@ -1,52 +1,52 @@ #include <util/generic/cast.h> -#include <util/memory/blob.h> +#include <util/memory/blob.h> #include <util/system/unaligned_mem.h> - -#include "reader.h" - -template <typename T> + +#include "reader.h" + +template <typename T> static inline void ReadAux(const char* data, T* aux, T count, TVector<const char*>* result) { - result->resize(count); - for (size_t i = 0; i < count; ++i) { + result->resize(count); + for (size_t i = 0; i < count; ++i) { (*result)[i] = data + ReadUnaligned<T>(aux + i); - } -} - + } +} + TChunkedDataReader::TChunkedDataReader(const TBlob& blob) { - const char* cdata = blob.AsCharPtr(); - const size_t size = blob.Size(); + const char* cdata = blob.AsCharPtr(); + const size_t size = blob.Size(); Y_ENSURE(size >= sizeof(ui32), "Empty file with chunks. "); ui32 last = ReadUnaligned<ui32>((ui32*)(cdata + size) - 1); - - if (last != 0) { // old version file - ui32* aux = (ui32*)(cdata + size); - ui32 count = last; - Size = size - (count + 1) * sizeof(ui32); - - aux -= (count + 1); - ReadAux<ui32>(cdata, aux, count, &Offsets); - return; - } - + + if (last != 0) { // old version file + ui32* aux = (ui32*)(cdata + size); + ui32 count = last; + Size = size - (count + 1) * sizeof(ui32); + + aux -= (count + 1); + ReadAux<ui32>(cdata, aux, count, &Offsets); + return; + } + Y_ENSURE(size >= 3 * sizeof(ui64), "Blob size must be >= 3 * sizeof(ui64). "); - ui64* aux = (ui64*)(cdata + size); + ui64* aux = (ui64*)(cdata + size); Version = ReadUnaligned<ui64>(aux - 2); Y_ENSURE(Version > 0, "Invalid chunked array version. "); - + ui64 count = ReadUnaligned<ui64>(aux - 3); - - aux -= (count + 3); - ReadAux<ui64>(cdata, aux, count, &Offsets); - - aux -= count; - Lengths.resize(count); - for (size_t i = 0; i < count; ++i) { + + aux -= (count + 3); + ReadAux<ui64>(cdata, aux, count, &Offsets); + + aux -= count; + Lengths.resize(count); + for (size_t i = 0; i < count; ++i) { Lengths[i] = IntegerCast<size_t>(ReadUnaligned<ui64>(aux + i)); - } -} - + } +} + TBlob TChunkedDataReader::GetBlob(size_t index) const { return TBlob::NoCopy(GetBlock(index), GetBlockLen(index)); } |