ElementPtr ElementSorter::readNextElement() { ElementPtr result; ConstElementPtr cr; if (_nodeIndex != _nodeIds.size()) { cr = _source->getNode(_nodeIds[_nodeIndex++]); } else if (_wayIndex != _wayIds.size()) { cr = _source->getWay(_wayIds[_wayIndex++]); } else if (_relationIndex != _relationIds.size()) { cr = _source->getRelation(_relationIds[_relationIndex++]); } if (cr.get()) { result.reset(cr->clone()); } return result; }
ElementPtr OsmApiDbSqlChangesetFileWriter::_getChangeElement(ConstElementPtr element) { ElementPtr changeElement; switch (element->getElementType().getEnum()) { case ElementType::Node: changeElement.reset(new Node(*boost::dynamic_pointer_cast<const Node>(element))); break; case ElementType::Way: changeElement.reset(new Way(*boost::dynamic_pointer_cast<const Way>(element))); break; case ElementType::Relation: changeElement.reset(new Relation(*boost::dynamic_pointer_cast<const Relation>(element))); break; default: throw HootException("Unknown element type"); } return changeElement; }