public override long Seek(long offset, SeekOrigin origin)
{
switch (origin)
{
case SeekOrigin.Begin:
{
break;
}
case SeekOrigin.Current:
{
offset += GetAbsolutePosition();
break;
}
case SeekOrigin.End:
{
offset += GetAbsoluteLength();
break;
}
}
if (offset < 0)
{
throw new IOException("Cannot seek beyond the beginning of the stream.");
}
int position = (int)offset;
for (int ii = 0; ii < m_buffers.Count; ii++)
{
int length = GetBufferCount(ii);
if (offset <= length)
{
SetCurrentBuffer(ii);
m_currentPosition = (int)offset;
return position;
}
offset -= length;
}
throw new IOException("Cannot seek beyond the end of the stream.");
}