void Relation::visitRw(ElementProvider& map, ElementVisitor& filter) { filter.visit(map.getRelation(getId())); const vector<RelationData::Entry> members = getMembers(); for (size_t i = 0; i < members.size(); i++) { const RelationData::Entry& m = members[i]; if (map.containsElement(m.getElementId())) { if (m.getElementId().getType() == ElementType::Node && map.containsNode(m.getElementId().getId())) { map.getNode(m.getElementId().getId())->visitRw(map, filter); } else if (m.getElementId().getType() == ElementType::Way && map.containsWay(m.getElementId().getId())) { map.getWay(m.getElementId().getId())->visitRw(map, filter); } else if (m.getElementId().getType() == ElementType::Relation && map.containsRelation(m.getElementId().getId())) { map.getRelation(m.getElementId().getId())->visitRw(map, filter); } else { assert(false); } } } }
void Node::visitRo(const ElementProvider& map, ElementVisitor& filter) const { filter.visit(map.getNode(getId())); }
void Node::visitRw(ElementProvider& map, ElementVisitor& filter) { filter.visit(map.getNode(getId())); }
void Node::visitRo(const OsmMap& map, ElementVisitor& filter) const { filter.visit(map.getNode(getId())); }
void Node::visitRw(OsmMap& map, ElementVisitor& filter) { filter.visit(map.getNode(getId())); }
// Accepts visitor. void accept(ElementVisitor& visitor) const { visitor.visitRelation(*this); }