public JSNodeChildEnumerator(JSNode node, JSNodeTraversalData traversalData, bool includeSelf) { TraversalData = traversalData; Node = node; IncludeSelf = includeSelf; _Index = IncludeSelf ? -2 : -1; _ArrayRecord = null; _ArrayRecordState = default(JSNodeTraversalArrayRecordState); _Current = null; _CurrentName = null; }
private void MoveNextArrayRecord(JSNodeTraversalArrayRecord arrayRecord) { _ArrayRecord = arrayRecord; _ArrayRecordState = arrayRecord.StartEnumeration(Node); }
public bool MoveNext() { _Current = null; _CurrentName = null; while (true) { if ((_ArrayRecord == null) || (_Index < 0)) { _Index += 1; } if (_Index >= TraversalData.Records.Length) { return(false); } if (_Index < 0) { if (IncludeSelf) { _Current = Node; _CurrentName = "Self"; return(true); } else { throw new InvalidOperationException("Enumerator error"); } } if (_ArrayRecord != null) { if (_ArrayRecord.MoveNext(ref _ArrayRecordState)) { _Current = _ArrayRecordState.CurrentNode; _CurrentName = _ArrayRecordState.CurrentName; return(true); } else { _ArrayRecord = null; } } else { var record = TraversalData.Records[_Index]; var elementRecord = record as JSNodeTraversalElementRecord; if (elementRecord != null) { elementRecord.Get(Node, out _Current, out _CurrentName); if (_Current != null) { return(true); } } else { var arrayRecord = record as JSNodeTraversalArrayRecord; if (arrayRecord != null) { _ArrayRecord = arrayRecord; _ArrayRecordState = arrayRecord.StartEnumeration(Node); } else { throw new InvalidDataException("Unrecognized record type"); } } } } }