diff options
author | Anatoly Serdtcev <serdtcev@maps.me> | 2019-04-18 13:24:27 +0300 |
---|---|---|
committer | mpimenov <mpimenov@users.noreply.github.com> | 2019-04-19 13:40:36 +0300 |
commit | 015425a4b8ae086ed1df8aa5ddb2885d54c7b229 (patch) | |
tree | e25f2a62e1955f992414f52a7440db519ce6a0b5 /generator | |
parent | 0fe64f033d014321ce057ff8f59aa5134de87ce8 (diff) |
[generator:geo_object] Fix for review
Diffstat (limited to 'generator')
-rw-r--r-- | generator/geo_objects/streets_builder.cpp | 17 | ||||
-rw-r--r-- | generator/osm_element.cpp | 16 | ||||
-rw-r--r-- | generator/osm_element.hpp | 2 |
3 files changed, 21 insertions, 14 deletions
diff --git a/generator/geo_objects/streets_builder.cpp b/generator/geo_objects/streets_builder.cpp index db6de47a59..9c15366804 100644 --- a/generator/geo_objects/streets_builder.cpp +++ b/generator/geo_objects/streets_builder.cpp @@ -108,24 +108,13 @@ std::unique_ptr<char, JSONFreeDeleter> StreetsBuilder::MakeStreetValue( // static bool StreetsBuilder::IsStreet(OsmElement const & element) { - auto const & tags = element.Tags(); - - auto const hasName = std::any_of(std::cbegin(tags), std::cend(tags), [] (auto const & tag) { - return tag.key == "name"; - }); - if (!hasName) + if (element.GetTagValue("name", {}).empty()) return false; - auto const isHighway = std::any_of(std::cbegin(tags), std::cend(tags), [] (auto const & tag) { - return tag.key == "highway"; - }); - if (isHighway && (element.IsWay() || element.IsRelation())) + if (element.HasTag("highway") && (element.IsWay() || element.IsRelation())) return true; - auto const isSquare = std::any_of(std::cbegin(tags), std::cend(tags), [] (auto const & tag) { - return tag.key == "place" && tag.value == "square"; - }); - if (isSquare) + if (element.HasTag("highway", "square")) return true; return false; diff --git a/generator/osm_element.cpp b/generator/osm_element.cpp index fddf9a8adf..576c6bffa4 100644 --- a/generator/osm_element.cpp +++ b/generator/osm_element.cpp @@ -70,6 +70,13 @@ void OsmElement::AddTag(std::string_view const & k, std::string_view const & v) m_tags.emplace_back(std::string{k}, std::move(value)); } +bool OsmElement::HasTag(std::string_view const & key) const +{ + return std::any_of(m_tags.begin(), m_tags.end(), [&](auto const & t) { + return t.key == key; + }); +} + bool OsmElement::HasTag(std::string_view const & k, std::string_view const & v) const { return std::any_of(m_tags.begin(), m_tags.end(), [&](auto const & t) { @@ -154,6 +161,15 @@ std::string OsmElement::GetTag(std::string const & key) const return it == m_tags.cend() ? std::string() : it->value; } +std::string_view OsmElement::GetTagValue(std::string_view const & key, + std::string_view const & defaultValue) const +{ + auto const it = std::find_if(m_tags.cbegin(), m_tags.cend(), + [&key](Tag const & tag) { return tag.key == key; }); + + return it != m_tags.cend() ? it->value : defaultValue; +} + std::string DebugPrint(OsmElement const & e) { return e.ToString(); diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp index bf9406a5d0..e55b1ff071 100644 --- a/generator/osm_element.hpp +++ b/generator/osm_element.hpp @@ -142,6 +142,7 @@ struct OsmElement } void AddTag(std::string_view const & k, std::string_view const & v); + bool HasTag(std::string_view const & key) const; bool HasTag(std::string_view const & k, std::string_view const & v) const; bool HasAnyTag(std::unordered_multimap<std::string, std::string> const & tags) const; @@ -164,6 +165,7 @@ struct OsmElement } std::string GetTag(std::string const & key) const; + std::string_view GetTagValue(std::string_view const & key, std::string_view const & defaultValue) const; }; base::GeoObjectId GetGeoObjectId(OsmElement const & element); |