示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}