public SeriesEnumerator(SeriesIterator <T> seriesIterator) { this.BaseSeries = seriesIterator.BaseSeries; this.IterationSet = seriesIterator.IterationSet; this.maskEnumerator = new SeriesMaskEnumerator(seriesIterator.BaseSeries.Length, seriesIterator.Depth); maskEnumerator.MoveNext(); BaseSeriesElements = BaseSeries.Select(x => new[] { x }).ToArray(); jaggedElements = (T[][])BaseSeriesElements.Clone(); this.jaggedArray = new EnumerableJaggedArray <T>(jaggedElements); this.jaggedArrayEnumerator = jaggedArray.GetEnumerator(); }
public bool MoveNext() { bool result = jaggedArrayEnumerator.MoveNext(); if (!result) { result = maskEnumerator.MoveNext(); if (result) { if (jaggedElements.Length != maskEnumerator.Current.Length) { jaggedElements = maskEnumerator.Current.Select(x => new T[] { }).ToArray(); } //var jaggedElements = new List<T[]>(); int baseIndex = 0; for (var i = 0; i < maskEnumerator.Current.Length; i++) { if (maskEnumerator.Current[i]) { //jaggedElements.Add(BaseSeriesElements[baseIndex++]); jaggedElements[i] = BaseSeriesElements[baseIndex++]; } else { //jaggedElements.Add((T[])IterationSet.Clone()); jaggedElements[i] = (T[])IterationSet.Clone(); } } this.jaggedArray = new EnumerableJaggedArray <T>(jaggedElements.ToArray()); this.jaggedArrayEnumerator = jaggedArray.GetEnumerator(); result = jaggedArrayEnumerator.MoveNext(); } } return(result); }