Пример #1
0
        /// <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;
                        }
                    }
                }
            }
        }
Пример #2
0
        /// <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;
                    }
                }
            }
        }