/// <summary> /// Returns all tokens (depth first) /// </summary> public static IEnumerable <TemplateToken> Traverse( this TemplateToken token, bool omitKeys) { if (token != null) { yield return(token); if (token is SequenceToken || token is MappingToken) { var state = new TraversalState(null, token); while (state != null) { if (state.MoveNext(omitKeys)) { token = state.Current; yield return(token); if (token is SequenceToken || token is MappingToken) { state = new TraversalState(state, token); } } else { state = state.Parent; } } } } }
/// <summary> /// Returns all context data objects (depth first) /// </summary> internal static IEnumerable <PipelineContextData> Traverse( this PipelineContextData value, Boolean omitKeys) { yield return(value); if (value is ArrayContextData || value is DictionaryContextData) { var state = new TraversalState(null, value); while (state != null) { if (state.MoveNext(omitKeys)) { value = state.Current; yield return(value); if (value is ArrayContextData || value is DictionaryContextData) { state = new TraversalState(state, value); } } else { state = state.Parent; } } } }