OnEnteringPolygon* SITSituationVisitor::visitOnEnteringPolygon(ASTNode *node) { OnEnteringPolygon *oep = NULL; if (node != NULL) { oep = new OnEnteringPolygon(); ASTNode *n = findByKey("OBJECTID", node->getParent(), 3); if (n == NULL) { OPENDAVINCI_CORE_THROW_EXCEPTION(SITSituationVisitorException, "Node to get name from OBJECTID expected."); } oep->setID(n->getValue<uint32_t>()); n = findByKey("VERTEX2", node->getParent(), 4); if (n == NULL) { OPENDAVINCI_CORE_THROW_EXCEPTION(SITSituationVisitorException, "Node to get name from VERTEX222 expected."); } n = n->getParent()->getParent(); vector<ASTNode*> listOfEnteringPolygon = n->getChildren(); vector<ASTNode*>::iterator it = listOfEnteringPolygon.begin(); while (it != listOfEnteringPolygon.end()) { n = (*it++); if (n->getFirstChild()->getKey() == "VERTEX2") { oep->add(visitVertex3(n)); } } } return oep; }
void ASTVisitor::visitChildren(const ASTNode& node) { const ASTNodes& children = node.getChildren(); for ( int index = 0; index < children.size(); index++ ) { const ASTNode& child = children[index]; child.accept(*this); } }
bool ASTNode::operator==(const ASTNode& rhs) const { if (typeid(*this) != typeid(rhs)) return false; if (children.size() != rhs.getChildren().size()) return false; for (uint64 i = 0; i < children.size(); i++) { if (this->at(i) == nullptr && rhs.at(i) == nullptr) continue; if (*(this->at(i)) != *(rhs.at(i))) return false; } return true; }
void ASTVisitor::reverseVisitChildren(const ASTNode& node) { const ASTNodes& children = node.getChildren(); children.accept(*this); }
void ASTVisitor::visitChildren(ASTNode& node) { ASTNodes& children = node.getChildren(); children.accept(*this); }