diff --git a/generator/cities_boundaries_builder.cpp b/generator/cities_boundaries_builder.cpp index 3e56312c43..4466ba5c2a 100644 --- a/generator/cities_boundaries_builder.cpp +++ b/generator/cities_boundaries_builder.cpp @@ -24,8 +24,8 @@ #include "base/logging.hpp" #include "base/string_utils.hpp" -#include #include +#include #include #include @@ -39,7 +39,8 @@ namespace generator { namespace { -bool ParseFeatureIdToTestIdMapping(string const & path, map> & mapping) +bool ParseFeatureIdToTestIdMapping(string const & path, + unordered_map> & mapping) { bool success = true; feature::ForEachFromDat(path, [&](FeatureType & feature, uint32_t fid) { @@ -106,7 +107,7 @@ bool BuildCitiesBoundaries(string const & dataPath, BoundariesTable & table, bool BuildCitiesBoundaries(string const & dataPath, string const & osmToFeaturePath, OsmIdToBoundariesTable & table) { - using Mapping = map>; + using Mapping = unordered_map>; return BuildCitiesBoundaries(dataPath, table, [&]() -> unique_ptr { Mapping mapping; @@ -121,7 +122,7 @@ bool BuildCitiesBoundaries(string const & dataPath, string const & osmToFeatureP bool BuildCitiesBoundariesForTesting(string const & dataPath, TestIdToBoundariesTable & table) { - using Mapping = map>; + using Mapping = unordered_map>; return BuildCitiesBoundaries(dataPath, table, [&]() -> unique_ptr { Mapping mapping; diff --git a/generator/descriptions_section_builder.hpp b/generator/descriptions_section_builder.hpp index 15450c9856..b0ffe07fd9 100644 --- a/generator/descriptions_section_builder.hpp +++ b/generator/descriptions_section_builder.hpp @@ -21,8 +21,8 @@ #include #include #include -#include #include +#include #include #include @@ -46,8 +46,8 @@ public: private: std::string m_mwmPath; std::string m_idToWikidataPath; - std::map> m_featureIdToOsmId; - std::map m_osmIdToWikidataId; + std::unordered_map> m_featureIdToOsmId; + std::unordered_map m_osmIdToWikidataId; }; template diff --git a/generator/popular_places_section_builder.cpp b/generator/popular_places_section_builder.cpp index 73dac9ce1b..3623531b02 100644 --- a/generator/popular_places_section_builder.cpp +++ b/generator/popular_places_section_builder.cpp @@ -71,11 +71,9 @@ bool BuildPopularPlacesMwmSection(std::string const & srcFilename, std::string c LOG(LINFO, ("Build Popular Places section")); - std::unordered_map featureIdToOsmId; - ForEachOsmId2FeatureId(osmToFeatureFilename, - [&featureIdToOsmId](base::GeoObjectId const & osmId, uint32_t fId) { - featureIdToOsmId.emplace(fId, osmId); - }); + std::unordered_map> featureIdToOsmId; + if (!ParseFeatureIdToOsmIdMapping(osmToFeatureFilename, featureIdToOsmId)) + return false; PopularPlaces places; LoadPopularPlaces(srcFilename, places); @@ -90,9 +88,9 @@ bool BuildPopularPlacesMwmSection(std::string const & srcFilename, std::string c PopularityIndex rank = 0; auto const it = featureIdToOsmId.find(featureId); // Non-OSM features (coastlines, sponsored objects) are not used. - if (it != featureIdToOsmId.cend()) + if (it != featureIdToOsmId.cend() && it->second.size() != 0) { - auto const placesIt = places.find(it->second); + auto const placesIt = places.find(it->second[0]); if (placesIt != places.cend()) { diff --git a/generator/ugc_section_builder.cpp b/generator/ugc_section_builder.cpp index 78d039dc8d..af0aad89f9 100644 --- a/generator/ugc_section_builder.cpp +++ b/generator/ugc_section_builder.cpp @@ -1,7 +1,7 @@ #include "generator/ugc_section_builder.hpp" -#include "generator/gen_mwm_info.hpp" #include "generator/ugc_translator.hpp" +#include "generator/utils.hpp" #include "ugc/binary/index_ugc.hpp" #include "ugc/binary/serdes.hpp" @@ -14,6 +14,7 @@ #include #include +#include namespace generator { @@ -24,15 +25,10 @@ bool BuildUgcMwmSection(std::string const & srcDbFilename, std::string const & m LOG(LINFO, ("Build UGC section")); - gen::OsmID2FeatureID osmIdsToFeatureIds; - if (!osmIdsToFeatureIds.ReadFromFile(osmToFeatureFilename)) + std::unordered_map> featureToOsmId; + if (!ParseFeatureIdToOsmIdMapping(osmToFeatureFilename, featureToOsmId)) return false; - std::unordered_map featureToOsmId; - osmIdsToFeatureIds.ForEach([&featureToOsmId](gen::OsmID2FeatureID::ValueT const & p) { - featureToOsmId.emplace(p.second /* feature id */, p.first /* osm id */); - }); - UGCTranslator translator(srcDbFilename); std::vector content; @@ -46,11 +42,11 @@ bool BuildUgcMwmSection(std::string const & srcDbFilename, std::string const & m return; auto const it = featureToOsmId.find(featureId); - CHECK(it != featureToOsmId.cend(), + CHECK(it != featureToOsmId.cend() && it->second.size() != 0, ("FeatureID", featureId, "is not found in", osmToFeatureFilename)); ugc::UGC result; - if (!translator.TranslateUGC(it->second, result)) + if (!translator.TranslateUGC(it->second[0], result)) return; if (result.IsEmpty()) diff --git a/generator/utils.cpp b/generator/utils.cpp index 60cb8c28e0..e2bc64ce74 100644 --- a/generator/utils.cpp +++ b/generator/utils.cpp @@ -45,8 +45,9 @@ void LoadDataSource(DataSource & dataSource) } } -bool ParseFeatureIdToOsmIdMapping(std::string const & path, - std::map> & mapping) +bool ParseFeatureIdToOsmIdMapping( + std::string const & path, + std::unordered_map> & mapping) { return ForEachOsmId2FeatureId(path, [&](base::GeoObjectId const & osmId, uint32_t const featureId) { diff --git a/generator/utils.hpp b/generator/utils.hpp index 1311e1b50a..ae0a915e1d 100644 --- a/generator/utils.hpp +++ b/generator/utils.hpp @@ -15,8 +15,8 @@ #include "base/logging.hpp" #include -#include #include +#include #include namespace generator @@ -63,6 +63,7 @@ bool ForEachOsmId2FeatureId(std::string const & path, ToDo && toDo) return true; } -bool ParseFeatureIdToOsmIdMapping(std::string const & path, - std::map> & mapping); +bool ParseFeatureIdToOsmIdMapping( + std::string const & path, + std::unordered_map> & mapping); } // namespace generator