public IEnumerator <JSNode> GetEnumerator() { if (IncludeSelf) { yield return(Node); } var list = new LinkedList <JSNode>(); using (var inner = new JSNodeChildEnumerator(Node, TraversalData, false)) while (inner.MoveNext()) { var node = inner.Current; if (node != null) { list.AddLast(node); } } while (list.Count > 0) { var current = list.First; using (var e = current.Value.Children.EnumeratorTemplate) while (e.MoveNext()) { var leaf = e.Current; if (leaf != null) { list.AddBefore(current, leaf); } } list.Remove(current); yield return(current.Value); } }
public JSNodeChildren(JSNode node, JSNodeTraversalData traversalData, bool includeSelf) { EnumeratorTemplate = new JSNodeChildEnumerator(node, traversalData, includeSelf); }