From 3f3c5e2aa8fde69f6d215cb0916d7657869f1bcd Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Thu, 28 Jun 2018 21:10:23 +0300 Subject: [PATCH] [indexer] rank table small changes --- .../test_mwm_builder.cpp | 2 +- generator/generator_tool/generator_tool.cpp | 2 +- indexer/indexer_tests/rank_table_test.cpp | 10 +++--- indexer/rank_table.cpp | 31 ++++++++++--------- indexer/rank_table.hpp | 15 ++++++--- 5 files changed, 33 insertions(+), 27 deletions(-) diff --git a/generator/generator_tests_support/test_mwm_builder.cpp b/generator/generator_tests_support/test_mwm_builder.cpp index 851d0e5da1..d82ccfb73f 100644 --- a/generator/generator_tests_support/test_mwm_builder.cpp +++ b/generator/generator_tests_support/test_mwm_builder.cpp @@ -140,7 +140,7 @@ void TestMwmBuilder::Finish() CHECK(indexer::BuildCentersTableFromDataFile(path, true /* forceRebuild */), ("Can't build centers table.")); - CHECK(search::RankTableBuilder::CreateIfNotExists(path), ()); + CHECK(search::SearchRanksTableBuilder::CreateIfNotExists(path), ()); if (!m_languages.empty()) CHECK(WriteRegionDataForTests(path, m_languages), ()); diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index 0ac866a34c..7ed16f8bd0 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -384,7 +384,7 @@ int main(int argc, char ** argv) LOG(LCRITICAL, ("Error generating search index.")); LOG(LINFO, ("Generating rank table for", datFile)); - if (!search::RankTableBuilder::CreateIfNotExists(datFile)) + if (!search::SearchRanksTableBuilder::CreateIfNotExists(datFile)) LOG(LCRITICAL, ("Error generating rank table.")); LOG(LINFO, ("Generating centers table for", datFile)); diff --git a/indexer/indexer_tests/rank_table_test.cpp b/indexer/indexer_tests/rank_table_test.cpp index 68d8db1570..90a9731621 100644 --- a/indexer/indexer_tests/rank_table_test.cpp +++ b/indexer/indexer_tests/rank_table_test.cpp @@ -66,7 +66,7 @@ UNIT_TEST(RankTableBuilder_Smoke) { FilesContainerW wcont(kTestCont); - search::RankTableBuilder::Create(ranks, wcont); + search::RankTableBuilder::Create(ranks, wcont, RANKS_FILE_TAG); } TestTable(ranks, kTestCont); @@ -89,12 +89,12 @@ UNIT_TEST(RankTableBuilder_EndToEnd) vector ranks; { FilesContainerR rcont(mapPath); - search::RankTableBuilder::CalcSearchRanks(rcont, ranks); + search::SearchRanksTableBuilder::CalcSearchRanks(rcont, ranks); } { FilesContainerW wcont(mapPath, FileWriter::OP_WRITE_EXISTING); - search::RankTableBuilder::Create(ranks, wcont); + search::RankTableBuilder::Create(ranks, wcont, RANKS_FILE_TAG); } FrozenDataSource dataSource; @@ -112,7 +112,7 @@ UNIT_TEST(RankTableBuilder_WrongEndianness) vector ranks = {0, 1, 2, 3, 4}; { FilesContainerW wcont(kTestFile); - search::RankTableBuilder::Create(ranks, wcont); + search::RankTableBuilder::Create(ranks, wcont, RANKS_FILE_TAG); } // Load rank table in host endianness. @@ -152,7 +152,7 @@ UNIT_TEST(RankTableBuilder_WrongEndianness) } // Try to re-create rank table in test file. - TEST(search::RankTableBuilder::CreateIfNotExists(kTestFile), ()); + TEST(search::SearchRanksTableBuilder::CreateIfNotExists(kTestFile), ()); // Try to load and map rank table - both methods should work now. TestTable(ranks, kTestFile); diff --git a/indexer/rank_table.cpp b/indexer/rank_table.cpp index 52b0d24cf6..62a11b8dbc 100644 --- a/indexer/rank_table.cpp +++ b/indexer/rank_table.cpp @@ -170,11 +170,11 @@ private: // Following two functions create a rank section and serialize |table| // to it. If there was an old section with ranks, these functions // overwrite it. -void SerializeRankTable(RankTable & table, FilesContainerW & wcont) +void SerializeRankTable(RankTable & table, FilesContainerW & wcont, std::string const & sectionName) { - if (wcont.IsExist(RANKS_FILE_TAG)) - wcont.DeleteSection(RANKS_FILE_TAG); - ASSERT(!wcont.IsExist(RANKS_FILE_TAG), ()); + if (wcont.IsExist(sectionName)) + wcont.DeleteSection(sectionName); + ASSERT(!wcont.IsExist(sectionName), ()); vector buffer; { @@ -182,14 +182,14 @@ void SerializeRankTable(RankTable & table, FilesContainerW & wcont) table.Serialize(writer, true /* preserveHostEndianness */); } - wcont.Write(buffer, RANKS_FILE_TAG); + wcont.Write(buffer, sectionName); wcont.Finish(); } -void SerializeRankTable(RankTable & table, string const & mapPath) +void SerializeRankTable(RankTable & table, string const & mapPath, std::string const & sectionName) { FilesContainerW wcont(mapPath, FileWriter::OP_WRITE_EXISTING); - SerializeRankTable(table, wcont); + SerializeRankTable(table, wcont, sectionName); } // Deserializes rank table from a rank section. Returns null when it's @@ -287,7 +287,7 @@ unique_ptr CreateRankTableIfNotExists(FilesContainerR & rcont) if (!table) { vector ranks; - RankTableBuilder::CalcSearchRanks(rcont, ranks); + SearchRanksTableBuilder::CalcSearchRanks(rcont, ranks); table = make_unique(ranks); } @@ -308,7 +308,7 @@ unique_ptr RankTable::Load(FilesMappingContainer const & mcont) } // static -void RankTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector & ranks) +void SearchRanksTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector & ranks) { feature::DataHeader header(rcont); FeaturesVector featuresVector(rcont, header, nullptr /* features offsets table */); @@ -320,7 +320,7 @@ void RankTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector } // static -bool RankTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & localFile) noexcept +bool SearchRanksTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & localFile) noexcept { try { @@ -339,7 +339,7 @@ bool RankTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & loca } if (table) - SerializeRankTable(*table, mapPath); + SerializeRankTable(*table, mapPath, RANKS_FILE_TAG); return true; } @@ -351,7 +351,7 @@ bool RankTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & loca } // static -bool RankTableBuilder::CreateIfNotExists(string const & mapPath) noexcept +bool SearchRanksTableBuilder::CreateIfNotExists(string const & mapPath) noexcept { try { @@ -362,7 +362,7 @@ bool RankTableBuilder::CreateIfNotExists(string const & mapPath) noexcept } if (table) - SerializeRankTable(*table, mapPath); + SerializeRankTable(*table, mapPath, RANKS_FILE_TAG); return true; } @@ -374,9 +374,10 @@ bool RankTableBuilder::CreateIfNotExists(string const & mapPath) noexcept } // static -void RankTableBuilder::Create(vector const & ranks, FilesContainerW & wcont) +void RankTableBuilder::Create(vector const & ranks, FilesContainerW & wcont, + std::string const & sectionName) { RankTableV0 table(ranks); - SerializeRankTable(table, wcont); + SerializeRankTable(table, wcont, sectionName); } } // namespace search diff --git a/indexer/rank_table.hpp b/indexer/rank_table.hpp index 89786412c6..43197e0753 100644 --- a/indexer/rank_table.hpp +++ b/indexer/rank_table.hpp @@ -87,6 +87,16 @@ public: // A builder class for rank tables. class RankTableBuilder { +public: + // Force creation of a rank table from array of ranks. Existing rank + // table is removed (if any). Note that |wcont| must be instantiated + // as FileWriter::OP_WRITE_EXISTING. + static void Create(std::vector const & ranks, FilesContainerW & wcont, + std::string const & sectionName); +}; + +class SearchRanksTableBuilder +{ public: // Calculates search ranks for all features in an mwm. static void CalcSearchRanks(FilesContainerR & rcont, std::vector & ranks); @@ -102,10 +112,5 @@ public: // or already exists and has correct format. static bool CreateIfNotExists(platform::LocalCountryFile const & localFile) noexcept; static bool CreateIfNotExists(std::string const & mapPath) noexcept; - - // Force creation of a rank table from array of ranks. Existing rank - // table is removed (if any). Note that |wcont| must be instantiated - // as FileWriter::OP_WRITE_EXISTING. - static void Create(std::vector const & ranks, FilesContainerW & wcont); }; } // namespace search