Contains buffer - queue of elements that extends from given iterator when particular elements are requested;
and shrinks by calling dropBuffer method.
Generally, at any specific time this buffer contains "suffix" of given iterator,
e.g. some piece of data from past calls of next, which extends by requesting new batches from iterator.
Therefore we can denote the same notation of indices as for regular Array or more abstract IndexedSeq.
The only difference is when index doesn't fit into the bounds of current buffer
either the new batches are requested to extend the buffer, either it's inaccessible at all,
so calling of dropBuffer should guarantee that there won't be any attempts to access to the elements in dropped part of input.
Also requests batches to the until.
If the current buffer is too small to provide some part of data after from bound,
lower bound of slice is cut to the minimum of from and first index of accessible element in the buffer.
Also requests batches to the until.
If the current buffer is too small to provide some part of data after from bound,
lower bound of slice is cut to the minimum of from and first index of accessible element in the buffer.