size_t MemoryWriteStreamDynamic::seek(ptrdiff_t offset, SeekableWriteStream::Origin whence) { assert((size_t)pos() <= _size); const size_t oldPos = pos(); const size_t newPos = evalSeek(offset, whence, pos(), 0, size()); if (newPos > _size) throw Exception(kSeekError); _ptr = _data.get() + newPos; return oldPos; }
size_t MemoryWriteStream::seek(ptrdiff_t offset, SeekableWriteStream::Origin whence) { assert((size_t)_pos <= _bufSize); const size_t oldPos = _pos; const size_t newPos = evalSeek(offset, whence, _pos, 0, size()); if (newPos > _bufSize) throw Exception(kSeekError); _pos = newPos; _ptr = _ptr - oldPos + newPos; return oldPos; }
size_t SeekableSubReadStream::seek(ptrdiff_t offset, Origin whence) { assert(_pos >= _begin); assert(_pos <= _end); const size_t oldPos = _pos; const size_t newPos = evalSeek(offset, whence, _pos, _begin, size()); if ((newPos < _begin) || (newPos > _end)) throw Exception(kSeekError); _pos = newPos; _parentStream->seek(_pos); _eos = false; // reset eos on successful seek return oldPos; }
size_t MemoryReadStream::seek(ptrdiff_t offset, Origin whence) { assert((size_t)_pos <= _size); const size_t oldPos = _pos; const size_t newPos = evalSeek(offset, whence, _pos, 0, size()); if (newPos > _size) throw Exception(kSeekError); _pos = newPos; _ptr = _ptrOrig.get() + newPos; // Reset end-of-stream flag on a successful seek _eos = false; return oldPos; }