Open
Conversation
Using a string as input to the decoder meant it was required to read the whole length of data to decode into memory, which meant decoding was a potentially very heavy on memory. This change abstracts out the input to the decoder, and adds a DataSource called String to replace it. This change breaks backwards compatibility.
This data source provides a way to decode a bencoded a file with only a handle to that file. This avoids the entire file into memory.
The addition of the DataSource interface originally changed the signature of `Bencode::decode` to use a type hint. This broke backwards compatibility (the function previously took a string) and was clunky to use. This change implicitly converts non-DataSource inputs to `DataSource\String`.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This changes the decoder to read from an interface (
Rych\Bencode\DataSource) instead of directly from a string.StringandFileHandleDataSource implementations are built in. A file can be decoded given a file handle:When I wrote this back in April, it broke backwards compatibility by changing the method signature of
Bencode::decodeto require an instance ofDataSource, but I've updated it for this PR to implicitly convert strings toRych\Bencode\DataSource\Stringinstead.