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]);
         }
     }
 }