diff options
author | Lev Dragunov <l.dragunov@corp.mail.ru> | 2015-02-25 14:35:35 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:37:41 +0300 |
commit | b204554b70072af65b4db3920ed83d31c12be4c7 (patch) | |
tree | bc3a530d4fd41cf9b234866cf3f35579e814790e /indexer/features_offsets_table.cpp | |
parent | 7dc3d2e13a3c715cebf0a67ade839738708eab27 (diff) |
FeaturesOffsets table onload building
Diffstat (limited to 'indexer/features_offsets_table.cpp')
-rw-r--r-- | indexer/features_offsets_table.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/indexer/features_offsets_table.cpp b/indexer/features_offsets_table.cpp index 5f12bae20f..fa524ab6e9 100644 --- a/indexer/features_offsets_table.cpp +++ b/indexer/features_offsets_table.cpp @@ -1,5 +1,7 @@ #include "features_offsets_table.hpp" +#include "../indexer/data_header.hpp" +#include "../indexer/features_vector.hpp" #include "../coding/file_writer.hpp" #include "../base/assert.hpp" #include "../base/scope_guard.hpp" @@ -50,6 +52,31 @@ namespace feature return unique_ptr<FeaturesOffsetsTable>(new FeaturesOffsetsTable(std::move(handle))); } + // static + unique_ptr<FeaturesOffsetsTable> FeaturesOffsetsTable::CreateIfNotExistsAndLoad( + FilesMappingContainer const & container) + { + if (container.IsExist(FEATURES_OFFSETS_TABLE_FILE_TAG)) + return Load(container); + + if (!container.IsExist(HEADER_FILE_TAG)) + return unique_ptr<FeaturesOffsetsTable>(); + + FilesContainerR cont(container.GetName()); + DataHeader header; + header.Load(cont.GetReader(HEADER_FILE_TAG)); + + Builder builder; + FeaturesVector(cont, header).ForEachOffset([&builder] (FeatureType const &, uint32_t offset) + { + builder.PushOffset(offset); + }); + unique_ptr<FeaturesOffsetsTable> table(Build(builder)); + FilesContainerW writeCont(container.GetName(), FileWriter::OP_WRITE_EXISTING); + table->Save(writeCont); + return table; + } + void FeaturesOffsetsTable::Save(FilesContainerW & container) { string const fileName = container.GetFileName() + "." FEATURES_OFFSETS_TABLE_FILE_TAG; |