public static IEnumerable <TValue> InternalStreamingEnumerable <TReader, TValue>( TReader reader) where TReader : InternalReaderBase { Debug.Assert(reader != null); var run = InternalReaderAgentGenerator <TReader, TValue> .Run; var valueHolder = new ValueHolder <TValue>(); while (reader.ReadBoolean()) { valueHolder.Value = default(TValue); run(reader, valueHolder); yield return(valueHolder.Value); } }
public static IEnumerable <TValue> InternalStreamingEnumerableAsCounted <TReader, TValue>( TReader reader, int length) where TReader : InternalReaderBase { Debug.Assert(reader != null); var run = InternalReaderAgentGenerator <TReader, TValue> .Run; var valueHolder = new ValueHolder <TValue>(); for (var index = 0; index < length; index++) { valueHolder.Value = default(TValue); run(reader, valueHolder); yield return(valueHolder.Value); } }
public static TList CreateAndLoadList <TReader, TList, TValue>(TReader reader, int length) where TReader : InternalReaderBase where TList : class, IList <TValue>, new() { Debug.Assert(reader != null); Debug.Assert((length != -1) && (length != 0)); var run = InternalReaderAgentGenerator <TReader, TValue> .Run; var valueHolder = new ValueHolder <TValue>(); if (length == -2) { var list = new TList(); while (reader.ReadBoolean()) { valueHolder.Value = default(TValue); run(reader, valueHolder); list.Add(valueHolder.Value); } return(list); } if (length >= 1) { var list = new TList(); for (var index = 0; index < length; index++) { valueHolder.Value = default(TValue); run(reader, valueHolder); list.Add(valueHolder.Value); } return(list); } throw new ArgumentOutOfRangeException(); }