Ejemplo n.º 1
0
        public static T[] MyToArray <T>(this IEnumerable <T> enumerable)
        {
            var builder = new LargeArrayBuilder <T>(true);

            builder.AddRange(enumerable);
            return(builder.ToArray());
        }
Ejemplo n.º 2
0
            public TResult[] ToArray()
            {
                var builder = new LargeArrayBuilder <TResult>(initialize: true);

                foreach (TSource element in _source)
                {
                    builder.AddRange(_selector(element));
                }

                return(builder.ToArray());
            }
Ejemplo n.º 3
0
        public void AddRange(IEnumerable <T> seed)
        {
            var builder = new LargeArrayBuilder <T>(initialize: true);

            // Call AddRange multiple times and verify contents w/ each iteration.
            for (int i = 1; i <= 10; i++)
            {
                builder.AddRange(seed);

                IEnumerable <T> expected = Enumerable.Repeat(seed, i).SelectMany(s => s);
                Assert.Equal(expected, builder.ToArray());
            }
        }
Ejemplo n.º 4
0
            public virtual TSource[] ToArray()
            {
                var builder = new LargeArrayBuilder <TSource>(initialize: true);

                for (int i = 0; ; i++)
                {
                    IEnumerable <TSource> source = GetEnumerable(i);
                    if (source == null)
                    {
                        break;
                    }

                    builder.AddRange(source);
                }

                return(builder.ToArray());
            }
Ejemplo n.º 5
0
        public void CopyTo(IEnumerable <T> seed, int index, int count)
        {
            var array = new T[seed.Count()];

            var builder = new LargeArrayBuilder <T>(initialize: true);

            builder.AddRange(seed);
            builder.CopyTo(array, index, count);

            // Ensure we don't copy out of bounds by verifying contents outside the copy area, too.
            IEnumerable <T> prefix = array.Take(index);
            IEnumerable <T> suffix = array.Skip(index + count);
            IEnumerable <T> actual = array.Skip(index).Take(count);

            Assert.Equal(Enumerable.Repeat(default(T), index), prefix);
            Assert.Equal(Enumerable.Repeat(default(T), array.Length - index - count), suffix);
            Assert.Equal(seed.Take(count), actual);
        }
Ejemplo n.º 6
0
            private TSource[] LazyToArray()
            {
                Debug.Assert(GetCount(onlyIfCheap: true) == -1);

                var builder = new LargeArrayBuilder <TSource>(initialize: true);

                if (!_appending)
                {
                    builder.SlowAdd(_item);
                }

                builder.AddRange(_source);

                if (_appending)
                {
                    builder.SlowAdd(_item);
                }

                return(builder.ToArray());
            }
Ejemplo n.º 7
0
            private TSource[] LazyToArray()
            {
                Debug.Assert(GetCount(onlyIfCheap: true) == -1);

                var builder = new LargeArrayBuilder <TSource>(initialize: true);

                for (SingleLinkedNode <TSource> node = _prepended; node != null; node = node.Linked)
                {
                    builder.Add(node.Item);
                }

                builder.AddRange(_source);

                if (_appended != null)
                {
                    foreach (TSource item in _appended.ToArray())
                    {
                        builder.Add(item);
                    }
                }

                return(builder.ToArray());
            }