diff options
author | yoda <yoda@yandex-team.ru> | 2022-02-10 16:50:00 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:00 +0300 |
commit | 86ac2045bfe9733d3396425a6ecade74c11ac489 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/on_disk/chunks | |
parent | ddd64736134d6d92b80a934c8cf8228944ee4236 (diff) | |
download | ydb-86ac2045bfe9733d3396425a6ecade74c11ac489.tar.gz |
Restoring authorship annotation for <yoda@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/on_disk/chunks')
-rw-r--r-- | library/cpp/on_disk/chunks/chunked_helpers.cpp | 96 | ||||
-rw-r--r-- | library/cpp/on_disk/chunks/chunked_helpers.h | 34 |
2 files changed, 65 insertions, 65 deletions
diff --git a/library/cpp/on_disk/chunks/chunked_helpers.cpp b/library/cpp/on_disk/chunks/chunked_helpers.cpp index b3aa5c8234..b7adba2753 100644 --- a/library/cpp/on_disk/chunks/chunked_helpers.cpp +++ b/library/cpp/on_disk/chunks/chunked_helpers.cpp @@ -9,59 +9,59 @@ TBlob GetBlock(const TBlob& blob, size_t index) { size_t begin = (const char*)reader.GetBlock(index) - (const char*)blob.Data(); return blob.SubBlob(begin, begin + reader.GetBlockLen(index)); } - -/*************************** TNamedChunkedDataReader ***************************/ - + +/*************************** TNamedChunkedDataReader ***************************/ + static const char* NamedChunkedDataMagic = "NamedChunkedData"; - + TNamedChunkedDataReader::TNamedChunkedDataReader(const TBlob& blob) : TChunkedDataReader(blob) -{ - if (TChunkedDataReader::GetBlocksCount() < 1) - throw yexception() << "Too few blocks"; - - size_t block = TChunkedDataReader::GetBlocksCount() - 1; - size_t magicLen = strlen(NamedChunkedDataMagic); - if (GetBlockLen(block) < magicLen || memcmp(GetBlock(block), NamedChunkedDataMagic, magicLen) != 0) - throw yexception() << "Not a valid named chunked data file"; - +{ + if (TChunkedDataReader::GetBlocksCount() < 1) + throw yexception() << "Too few blocks"; + + size_t block = TChunkedDataReader::GetBlocksCount() - 1; + size_t magicLen = strlen(NamedChunkedDataMagic); + if (GetBlockLen(block) < magicLen || memcmp(GetBlock(block), NamedChunkedDataMagic, magicLen) != 0) + throw yexception() << "Not a valid named chunked data file"; + TMemoryInput input(static_cast<const char*>(GetBlock(block)) + magicLen, GetBlockLen(block) - magicLen); - Load(&input, Names); - - size_t index = 0; + Load(&input, Names); + + size_t index = 0; for (TVector<TString>::const_iterator it = Names.begin(); it != Names.end(); ++it, ++index) { - if (!it->empty()) - NameToIndex[*it] = index; - } -} - -/*************************** TNamedChunkedDataWriter ***************************/ - + if (!it->empty()) + NameToIndex[*it] = index; + } +} + +/*************************** TNamedChunkedDataWriter ***************************/ + TNamedChunkedDataWriter::TNamedChunkedDataWriter(IOutputStream& slave) - : TChunkedDataWriter(slave) -{ -} - + : TChunkedDataWriter(slave) +{ +} + TNamedChunkedDataWriter::~TNamedChunkedDataWriter() { -} - -void TNamedChunkedDataWriter::NewBlock() { - NewBlock(""); -} - +} + +void TNamedChunkedDataWriter::NewBlock() { + NewBlock(""); +} + void TNamedChunkedDataWriter::NewBlock(const TString& name) { - if (!name.empty()) { - if (NameToIndex.count(name) != 0) - throw yexception() << "Block name is not unique"; - NameToIndex[name] = Names.size(); - } - Names.push_back(name); - TChunkedDataWriter::NewBlock(); -} - -void TNamedChunkedDataWriter::WriteFooter() { - NewBlock(""); - Write(NamedChunkedDataMagic); - Save(this, Names); - TChunkedDataWriter::WriteFooter(); -} + if (!name.empty()) { + if (NameToIndex.count(name) != 0) + throw yexception() << "Block name is not unique"; + NameToIndex[name] = Names.size(); + } + Names.push_back(name); + TChunkedDataWriter::NewBlock(); +} + +void TNamedChunkedDataWriter::WriteFooter() { + NewBlock(""); + Write(NamedChunkedDataMagic); + Save(this, Names); + TChunkedDataWriter::WriteFooter(); +} diff --git a/library/cpp/on_disk/chunks/chunked_helpers.h b/library/cpp/on_disk/chunks/chunked_helpers.h index a20bed1f62..5fa96afdca 100644 --- a/library/cpp/on_disk/chunks/chunked_helpers.h +++ b/library/cpp/on_disk/chunks/chunked_helpers.h @@ -453,34 +453,34 @@ void WriteBlock(TChunkedDataWriter& writer, T& t) { t.Save(writer); } -// Extends TChunkedDataWriter, allowing user to name blocks with arbitrary strings. -class TNamedChunkedDataWriter: public TChunkedDataWriter { +// Extends TChunkedDataWriter, allowing user to name blocks with arbitrary strings. +class TNamedChunkedDataWriter: public TChunkedDataWriter { public: TNamedChunkedDataWriter(IOutputStream& slave); ~TNamedChunkedDataWriter() override; - + // Start a new unnamed block, overrides TChunkedDataReader::NewBlock(). void NewBlock(); - + // Start a new block with given name (possibly empty, in which case block is unnamed). // Throws an exception if name is a duplicate. void NewBlock(const TString& name); - + void WriteFooter(); - + private: TVector<TString> Names; THashMap<TString, size_t> NameToIndex; -}; - +}; + class TNamedChunkedDataReader: public TChunkedDataReader { public: TNamedChunkedDataReader(const TBlob& blob); - + inline bool HasBlock(const char* name) const { return NameToIndex.find(name) != NameToIndex.end(); } - + inline size_t GetIndexByName(const char* name) const { THashMap<TString, size_t>::const_iterator it = NameToIndex.find(name); if (it == NameToIndex.end()) @@ -488,31 +488,31 @@ public: else return it->second; } - + // Returns number of blocks written to the file by user of TNamedChunkedDataReader. inline size_t GetBlocksCount() const { // Last block is for internal usage return TChunkedDataReader::GetBlocksCount() - 1; } - + inline const char* GetBlockName(size_t index) const { Y_ASSERT(index < GetBlocksCount()); return Names[index].data(); } - + inline const void* GetBlockByName(const char* name) const { return GetBlock(GetIndexByName(name)); } - + inline size_t GetBlockLenByName(const char* name) const { return GetBlockLen(GetIndexByName(name)); } - + inline TBlob GetBlobByName(const char* name) const { size_t id = GetIndexByName(name); return TBlob::NoCopy(GetBlock(id), GetBlockLen(id)); } - + inline bool GetBlobByName(const char* name, TBlob& blob) const { THashMap<TString, size_t>::const_iterator it = NameToIndex.find(name); if (it == NameToIndex.end()) @@ -524,7 +524,7 @@ public: private: TVector<TString> Names; THashMap<TString, size_t> NameToIndex; -}; +}; template <class T> struct TSaveLoadVectorNonPodElement { |