diff options
author | tatiana-yan <tatiana.kondakova@gmail.com> | 2019-04-11 14:08:13 +0300 |
---|---|---|
committer | Maksim Andrianov <maksimandrianov1@gmail.com> | 2019-04-12 12:26:16 +0300 |
commit | 1eb7a1d11626f1598dbd3c3bcab841e7a6cc4c40 (patch) | |
tree | 3c7deef05133bd77a168107bfc7b03c946cbc282 /generator | |
parent | 0a70b7f11a8867f0628eddf8f2fd1780297772b1 (diff) |
[generator] Use ParseFeatureIdToOsmIdMapping for popularity and ugc sections build. Convert FeatureIdToOsmIdMapping to unordered map.
Diffstat (limited to 'generator')
-rw-r--r-- | generator/cities_boundaries_builder.cpp | 9 | ||||
-rw-r--r-- | generator/descriptions_section_builder.hpp | 6 | ||||
-rw-r--r-- | generator/popular_places_section_builder.cpp | 12 | ||||
-rw-r--r-- | generator/ugc_section_builder.cpp | 16 | ||||
-rw-r--r-- | generator/utils.cpp | 5 | ||||
-rw-r--r-- | generator/utils.hpp | 7 |
6 files changed, 26 insertions, 29 deletions
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 <map> #include <memory> +#include <unordered_map> #include <utility> #include <vector> @@ -39,7 +39,8 @@ namespace generator { namespace { -bool ParseFeatureIdToTestIdMapping(string const & path, map<uint32_t, vector<uint64_t>> & mapping) +bool ParseFeatureIdToTestIdMapping(string const & path, + unordered_map<uint32_t, vector<uint64_t>> & 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<uint32_t, vector<base::GeoObjectId>>; + using Mapping = unordered_map<uint32_t, vector<base::GeoObjectId>>; return BuildCitiesBoundaries(dataPath, table, [&]() -> unique_ptr<Mapping> { Mapping mapping; @@ -121,7 +122,7 @@ bool BuildCitiesBoundaries(string const & dataPath, string const & osmToFeatureP bool BuildCitiesBoundariesForTesting(string const & dataPath, TestIdToBoundariesTable & table) { - using Mapping = map<uint32_t, vector<uint64_t>>; + using Mapping = unordered_map<uint32_t, vector<uint64_t>>; return BuildCitiesBoundaries(dataPath, table, [&]() -> unique_ptr<Mapping> { 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 <cstddef> #include <cstdint> #include <functional> -#include <map> #include <string> +#include <unordered_map> #include <utility> #include <vector> @@ -46,8 +46,8 @@ public: private: std::string m_mwmPath; std::string m_idToWikidataPath; - std::map<uint32_t, std::vector<base::GeoObjectId>> m_featureIdToOsmId; - std::map<base::GeoObjectId, std::string> m_osmIdToWikidataId; + std::unordered_map<uint32_t, std::vector<base::GeoObjectId>> m_featureIdToOsmId; + std::unordered_map<base::GeoObjectId, std::string> m_osmIdToWikidataId; }; template <class T> 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<uint32_t, base::GeoObjectId> featureIdToOsmId; - ForEachOsmId2FeatureId(osmToFeatureFilename, - [&featureIdToOsmId](base::GeoObjectId const & osmId, uint32_t fId) { - featureIdToOsmId.emplace(fId, osmId); - }); + std::unordered_map<uint32_t, std::vector<base::GeoObjectId>> 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 <unordered_map> #include <utility> +#include <vector> 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<uint32_t, std::vector<base::GeoObjectId>> featureToOsmId; + if (!ParseFeatureIdToOsmIdMapping(osmToFeatureFilename, featureToOsmId)) return false; - std::unordered_map<uint32_t, base::GeoObjectId> featureToOsmId; - osmIdsToFeatureIds.ForEach([&featureToOsmId](gen::OsmID2FeatureID::ValueT const & p) { - featureToOsmId.emplace(p.second /* feature id */, p.first /* osm id */); - }); - UGCTranslator translator(srcDbFilename); std::vector<IndexUGC> 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<uint32_t, std::vector<base::GeoObjectId>> & mapping) +bool ParseFeatureIdToOsmIdMapping( + std::string const & path, + std::unordered_map<uint32_t, std::vector<base::GeoObjectId>> & 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 <cstdint> -#include <map> #include <string> +#include <unordered_map> #include <vector> namespace generator @@ -63,6 +63,7 @@ bool ForEachOsmId2FeatureId(std::string const & path, ToDo && toDo) return true; } -bool ParseFeatureIdToOsmIdMapping(std::string const & path, - std::map<uint32_t, std::vector<base::GeoObjectId>> & mapping); +bool ParseFeatureIdToOsmIdMapping( + std::string const & path, + std::unordered_map<uint32_t, std::vector<base::GeoObjectId>> & mapping); } // namespace generator |