reducible with BSONIndexUnsafe #26
Open
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.
Implements a more efficient "break" when foldl-ing. I just reduce on an isbit type, that I call "BSONIndexUnsafe", instead of a BSONReader.
I test:
Before:
and after
A few remarks:
function Transducers.__foldl__(rf, val, reader::BSONReader)
function Transducers.__foldl__(rf, val, indices::BSONIndices)
but I don't know how, but it should be doable, no? Obviously the first method would rely on the second one.
Base.getindex(reader::BSONReader, target::Union{AbstractString, Symbol})
function Transducers.__foldl__(rf, val, indices::BSONIndices)
That seems more tricky because of the
name_len_and_match_
optimization.el_type
ofBSONIndexUnsafe
is of typeInt
. It should be aUInt8
. But if I do that, the benchmark above runs in 60ns. I don't understand why my "fix" as any kind of impact. Any idea?Thanks,