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:
authorSergey Yershov <yershov@corp.mail.ru>2015-08-12 15:53:28 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 03:01:24 +0300
commit2066aa34b8f8a9f82e8ef4cb5902403f1e8a8b9d (patch)
treedc1a071ee1b71470aa276b122857d61bef8a6921 /generator
parent6b82fed453bf3a43370a2c285dfb353c1bb45e78 (diff)
Make separate 'member' tag processing
Diffstat (limited to 'generator')
-rw-r--r--generator/osm_element.hpp16
-rw-r--r--generator/xml_element.cpp8
-rw-r--r--generator/xml_element.hpp26
3 files changed, 21 insertions, 29 deletions
diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp
index 7a1bf5f136..6c3fe3a8a6 100644
--- a/generator/osm_element.hpp
+++ b/generator/osm_element.hpp
@@ -479,15 +479,15 @@ public:
AreaWayMerger<THolder> outer(m_holder);
// 3. Iterate ways to get 'outer' and 'inner' geometries
- for (auto const & e : p->childs)
+ for (auto const & e : p->Members())
{
- if (e.type == XMLElement::EntityType::Member && e.memberType == XMLElement::EntityType::Way)
- {
- if (e.role == "outer")
- outer.AddWay(e.ref);
- else if (e.role == "inner")
- holes(e.ref);
- }
+ if (e.type != XMLElement::EntityType::Way)
+ continue;
+
+ if (e.role == "outer")
+ outer.AddWay(e.ref);
+ else if (e.role == "inner")
+ holes(e.ref);
}
multipolygons_emitter emitter(this, params, holes.GetHoles(), p->id);
diff --git a/generator/xml_element.cpp b/generator/xml_element.cpp
index 22e21a3e3f..80e3f1bc7e 100644
--- a/generator/xml_element.cpp
+++ b/generator/xml_element.cpp
@@ -23,13 +23,7 @@ void XMLElement::AddND(uint64_t ref)
void XMLElement::AddMEMBER(uint64_t ref, EntityType type, string const & role)
{
- childs.push_back(XMLElement());
- XMLElement & e = childs.back();
-
- e.type = EntityType::Member;
- e.ref = ref;
- e.memberType = type;
- e.role = role;
+ m_members.push_back({ref, type, role});
}
string DebugPrint(XMLElement::EntityType e)
diff --git a/generator/xml_element.hpp b/generator/xml_element.hpp
index 1d7379c9ab..f256a8fc64 100644
--- a/generator/xml_element.hpp
+++ b/generator/xml_element.hpp
@@ -35,7 +35,16 @@ struct XMLElement
EntityType memberType = EntityType::Unknown;
string role;
+ struct Member
+ {
+ uint64_t ref;
+ EntityType type;
+ string role;
+ };
+
+
vector<uint64_t> m_nds;
+ vector<Member> m_members;
vector<XMLElement> childs;
void Clear()
@@ -51,6 +60,7 @@ struct XMLElement
role.clear();
m_nds.clear();
+ m_members.clear();
childs.clear();
}
@@ -61,12 +71,6 @@ struct XMLElement
return m_nds;
}
- struct Member
- {
- uint64_t ref;
- EntityType type;
- string role;
- };
static EntityType StringToEntityType(string const & t)
{
@@ -80,15 +84,9 @@ struct XMLElement
return EntityType::Unknown;
}
- vector<Member> Members() const
+ vector<Member> const & Members() const
{
- vector<Member> members;
- for (auto const & e : childs)
- {
- if (e.type == EntityType::Member)
- members.push_back({e.ref, e.memberType, e.role});
- }
- return move(members);
+ return m_members;
}
struct Tag