public virtual string GetText(Interval interval)
{
if (interval.a < 0 || interval.b < interval.a - 1)
{
throw new ArgumentException("invalid interval");
}
int bufferStartIndex = BufferStartIndex;
if (n > 0 && data[n - 1] == char.MaxValue)
{
if (interval.a + interval.Length > bufferStartIndex + n)
{
throw new ArgumentException("the interval extends past the end of the stream");
}
}
if (interval.a < bufferStartIndex || interval.b >= bufferStartIndex + n)
{
throw new NotSupportedException("interval " + interval + " outside buffer: " + bufferStartIndex + ".." + (bufferStartIndex + n - 1));
}
// convert from absolute to local index
int i = interval.a - bufferStartIndex;
return new string(data, i, interval.Length);
}