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

Method TryRead

generator/osm_source.cpp:128–184  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

126{}
127
128bool ProcessorOsmElementsFromO5M::TryRead(OsmElement & element)
129{
130 if (m_pos == m_dataset.end())
131 return false;
132
133 using Type = osm::O5MSource::EntityType;
134 auto const translate = [](Type t) -> OsmElement::EntityType
135 {
136 switch (t)
137 {
138 case Type::Node: return OsmElement::EntityType::Node;
139 case Type::Way: return OsmElement::EntityType::Way;
140 case Type::Relation: return OsmElement::EntityType::Relation;
141 default: return OsmElement::EntityType::Unknown;
142 }
143 };
144
145 // Be careful, we could call Nodes(), Members(), Tags() from O5MSource::Entity
146 // only once (!). Because these functions read data from file simultaneously with
147 // iterating in loop. Furthermore, into Tags() method calls Nodes.Skip() and Members.Skip(),
148 // thus first call of Nodes (Members) after Tags() will not return any results.
149 // So don not reorder the "for" loops (!).
150 auto const & entity = *m_pos;
151 element.m_id = entity.id;
152 switch (entity.type)
153 {
154 case Type::Node:
155 {
156 element.m_type = OsmElement::EntityType::Node;
157 element.m_lat = entity.lat;
158 element.m_lon = entity.lon;
159 break;
160 }
161 case Type::Way:
162 {
163 element.m_type = OsmElement::EntityType::Way;
164 for (uint64_t nd : entity.Nodes())
165 element.AddNd(nd);
166 break;
167 }
168 case Type::Relation:
169 {
170 element.m_type = OsmElement::EntityType::Relation;
171 for (auto const & member : entity.Members())
172 element.AddMember(member.ref, translate(member.type), member.role);
173 break;
174 }
175 default: break;
176 }
177
178 for (auto const & tag : entity.Tags())
179 element.AddTag(tag.key, tag.value);
180
181 element.Validate();
182 ++m_pos;
183 return true;
184}
185

Callers 3

Calls 9

NodesMethod · 0.80
AddNdMethod · 0.80
MembersMethod · 0.80
AddMemberMethod · 0.80
TagsMethod · 0.80
endMethod · 0.45
AddTagMethod · 0.45
ValidateMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected