ogg
ogg copied to clipboard
Allow usage without `Seek`: `RevReader` approach
Implemented my proposal to resolve #12 .
Instead of Seek, the (non-seeking) functionality of the PacketReader now requires a new trait RevRead which allows making a single reversible read operation. This is blanket-implemented for all types implementing Read + Seek, so business as usual is possible. Beyond that, I added the RevReader which implements RevRead solely on the basis of Read. This allows usage of the PacketReader with underlying readers that do not implement Seek.
The tests seem to pass (on my machine), but I have not yet tried to apply this to an OGG file where seeking is actually necessary. Do the tests cover that scenario?
Potential Drawbacks
- The interface of some public functions has changed.
- Currently, the
RevReadtrait carries an annoying lifetime that is required to return references to internal state of the reader. This could probably be resolved with generic associated types (https://github.com/rust-lang/rust/issues/44265). - Potentially slightly slower performance with general reads when using the
RevReader. I have not run any benchmarks yet, if that is necessary, please request.