public override long Seek(long offset, SeekOrigin origin) {
long temp = _position;
switch (origin) {
case SeekOrigin.Begin:
temp = offset;
break;
case SeekOrigin.Current:
temp = _position + offset;
break;
case SeekOrigin.End:
temp = _length - offset;
break;
}
// make sure position satisfies 0 <= position <= _length
if (temp < 0) {
temp = 0;
} else if (temp > _length) {
temp = _length;
}
_position = temp;
return _position;
}