| 20 | } |
| 21 | |
| 22 | std::int64_t BoundedFileStream::Seek(std::int64_t offset, SeekOrigin origin) |
| 23 | { |
| 24 | std::int64_t newPos; |
| 25 | switch (origin) { |
| 26 | case SeekOrigin::Begin: newPos = _offset + offset; break; |
| 27 | case SeekOrigin::Current: newPos = _underlyingStream.GetPosition() + offset; break; |
| 28 | case SeekOrigin::End: newPos = _offset + _size + offset; break; |
| 29 | default: return Stream::OutOfRange; |
| 30 | } |
| 31 | |
| 32 | if (newPos < static_cast<std::int64_t>(_offset) || newPos > static_cast<std::int64_t>(_offset + _size)) { |
| 33 | newPos = Stream::OutOfRange; |
| 34 | } else { |
| 35 | newPos = _underlyingStream.Seek(newPos, SeekOrigin::Begin); |
| 36 | if (newPos >= static_cast<std::int64_t>(_offset)) { |
| 37 | newPos -= _offset; |
| 38 | } |
| 39 | } |
| 40 | return newPos; |
| 41 | } |
| 42 | |
| 43 | std::int64_t BoundedFileStream::GetPosition() const |
| 44 | { |
no test coverage detected