/// <summary> /// Descendants iterator /// </summary> /// <param name="source"></param> /// <returns></returns> private static IEnumerable <TokenSequence> DescendantsIterator(TokenSequence source) { if (ModelSubsequencer.IsPrimitive(source)) { yield break; } if (ModelSubsequencer.IsObject(source)) { foreach (KeyValuePair <DataName, TokenSequence> property in ModelSubsequencer.Properties(source, null)) { yield return(property.Value); foreach (TokenSequence descendant in ModelSubsequencer.Descendants(property.Value)) { yield return(descendant); } } yield break; } if (ModelSubsequencer.IsArray(source)) { foreach (TokenSequence item in ModelSubsequencer.ArrayItems(source, null)) { yield return(item); foreach (TokenSequence descendant in ModelSubsequencer.Descendants(item)) { yield return(descendant); } } yield break; } }
/// <summary> /// Gets all properties of the root object /// </summary> /// <param name="source"></param> /// <param name="predicate"></param> /// <returns>all properties for the object</returns> public static TokenSequence Property(this TokenSequence source, DataName propertyName) { using (var enumerator = ModelSubsequencer.Properties(source, name => (name == propertyName)).GetEnumerator()) { // effectively FirstOrDefault() return(enumerator.MoveNext() ? enumerator.Current.Value : null); } }
/// <summary> /// Gets all properties of the root object /// </summary> /// <param name="source"></param> /// <param name="predicate"></param> /// <returns>all properties for the object</returns> public static IEnumerable <KeyValuePair <DataName, TokenSequence> > Properties(this TokenSequence source) { return(ModelSubsequencer.Properties(source, null)); }