Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLev Dragunov <l.dragunov@corp.mail.ru>2015-02-25 14:35:35 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:37:41 +0300
commitb204554b70072af65b4db3920ed83d31c12be4c7 (patch)
treebc3a530d4fd41cf9b234866cf3f35579e814790e /indexer/features_offsets_table.cpp
parent7dc3d2e13a3c715cebf0a67ade839738708eab27 (diff)
FeaturesOffsets table onload building
Diffstat (limited to 'indexer/features_offsets_table.cpp')
-rw-r--r--indexer/features_offsets_table.cpp27
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;