private VisitorResult VisitEntityImpl(VisitEntityDelegate visitor) { if (visitor(this) == VisitorResult.ExitVisit) { return(VisitorResult.ExitVisit); } var children = Children; foreach (var child in Children) { if (child.VisitEntityImpl(visitor) == VisitorResult.ExitVisit) { return(VisitorResult.ExitVisit); } } return(VisitorResult.ContinueVisit); }
/// <summary> /// Visit this entity and any children in a depth first traversal until every node is visited /// or until the visitor returns VisitorResult.ExitVisit /// </summary> public void VisitEntity(VisitEntityDelegate visitor) { VisitEntityImpl(visitor); }