MCPcopy Create free account
hub / github.com/comaps/comaps / AddElementToCache

Function AddElementToCache

generator/osm_source.cpp:49–96  ·  view source on GitHub ↗

Functions ---------------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

47
48// Functions ---------------------------------------------------------------------------------------
49void AddElementToCache(cache::IntermediateDataWriter & cache, OsmElement && element)
50{
51 switch (element.m_type)
52 {
53 case OsmElement::EntityType::Node:
54 {
55 auto const pt = mercator::FromLatLon(element.m_lat, element.m_lon);
56 cache.AddNode(element.m_id, pt.y, pt.x);
57 break;
58 }
59 case OsmElement::EntityType::Way:
60 {
61 // Store way.
62 WayElement way(element.m_id);
63 way.m_nodes = std::move(element.NodesRef());
64
65 if (way.IsValid())
66 cache.AddWay(element.m_id, way);
67 break;
68 }
69 case OsmElement::EntityType::Relation:
70 {
71 // store relation
72 RelationElement relation;
73 for (auto & member : element.MembersRef())
74 {
75 switch (member.m_type)
76 {
77 case OsmElement::EntityType::Node: relation.m_nodes.emplace_back(member.m_ref, std::move(member.m_role)); break;
78 case OsmElement::EntityType::Way: relation.m_ways.emplace_back(member.m_ref, std::move(member.m_role)); break;
79 case OsmElement::EntityType::Relation:
80 relation.m_relations.emplace_back(member.m_ref, std::move(member.m_role));
81 break;
82 default: break;
83 }
84 }
85
86 for (auto & tag : element.TagsRef())
87 relation.m_tags.emplace(std::move(tag.m_key), std::move(tag.m_value));
88
89 if (relation.IsValid())
90 cache.AddRelation(element.m_id, relation);
91
92 break;
93 }
94 default: break;
95 }
96}
97
98void ProcessOsmElementsFromXML(SourceReader & stream, std::function<void(OsmElement &&)> const & processor)
99{

Callers 1

GenerateIntermediateDataFunction · 0.85

Calls 7

AddRelationMethod · 0.80
FromLatLonFunction · 0.70
AddNodeMethod · 0.45
IsValidMethod · 0.45
AddWayMethod · 0.45
emplace_backMethod · 0.45
emplaceMethod · 0.45

Tested by

no test coverage detected