Optimize binary get_number
implementation by reading multiple bytes at once
#4391
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 PR improves performance for
get_number
implementation by reading multiple bytes at once, which saves calling overhead especially when interacting with file I/O. It addsget_elements
to input adapters and allow them to select more efficient underlying calls to read multiple bytes if availablePerformance for reading msgpack from C style
FILE
develop
branch:
Questions:
get_elements
inwide_string_input_adapter
, I encountered a compile error without it. If I don't implement it, tests are passing locally, which seems to make sense: ifwchar
is used, likely the content has non-ASCII text and we won't want to interpret it as binary numbers, whereget_elements
is currently used. I am not sure are we expected to fallback to reading each char one-by-one or doing something else. Currently it just falls back to theget_character
method.Pull request checklist
Read the Contribution Guidelines for detailed information.
include/nlohmann
directory, runmake amalgamate
to create the single-header filessingle_include/nlohmann/json.hpp
andsingle_include/nlohmann/json_fwd.hpp
. The whole process is described here.Please don't
#ifdef
s or other means.