示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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();
        }