public IEnumerable <T> Items() { for (var i = StartIndex; ; ++i) { if (LastIndex != null && i >= LastIndex) { break; } if (i >= state.WaveIndex) { state.CheckNext(); } if (LastIndex == null || i < LastIndex) { yield return(state.cache[i]); } } }