private void ProcessPara(ParagraphInfo startPI) { ParagraphInfo parent = startPI; _domIter.MoveNext(); ParagraphInfo current = _domIter.Current; while (true) { if (IsChild(parent, current)) { current.Start(_xmlWriter); _stack.Push(parent); parent = current; _domIter.MoveNext(); current = _domIter.Current; } else { parent.End(_xmlWriter); if (_stack.Count == 0) { System.Diagnostics.Debug.Assert(current.IsEndMarker); break; } parent = _stack.Pop(); } } }
// recursive version takes 13/8 times as long as stack version above private void ProcessParaRecursive(ParagraphInfo parent) { ParagraphInfo current; parent.Start(_xmlWriter); _domIter.MoveNext(); while (IsChild(parent, (current = _domIter.Current))) { ProcessPara(current); } parent.End(_xmlWriter); }
private bool IsChild(ParagraphInfo parent, ParagraphInfo child) { return !child.IsEndMarker && parent.IsChild(child); }
public bool IsChild(ParagraphInfo child) { return _strategy.DoIsChild(child, this); }