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:
authorAnatoly Serdtcev <serdtcev@maps.me>2019-04-18 13:24:27 +0300
committermpimenov <mpimenov@users.noreply.github.com>2019-04-19 13:40:36 +0300
commit015425a4b8ae086ed1df8aa5ddb2885d54c7b229 (patch)
treee25f2a62e1955f992414f52a7440db519ce6a0b5 /generator
parent0fe64f033d014321ce057ff8f59aa5134de87ce8 (diff)
[generator:geo_object] Fix for review
Diffstat (limited to 'generator')
-rw-r--r--generator/geo_objects/streets_builder.cpp17
-rw-r--r--generator/osm_element.cpp16
-rw-r--r--generator/osm_element.hpp2
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);