mirror of
https://github.com/nlohmann/json.git
synced 2026-10-20 13:08:13 +00:00
* Make parsing from std::istream and FILE* fast
Squashed onto develop cd6b428ef (CI fixes from #5860). Original commits:
- Let the lexer's bulk fast paths run on a window of the input
- Scan the get area of an input stream in bulk
- Lock a FILE once per parse instead of once per character
- Add benchmarks for parsing from a FILE* and for many values from a stream
- Avoid implicit unsigned char to char conversion in stream tests
- Make file_input_adapter::unlock() safe to call on a moved-from adapter
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* Add ABI tags for JSON_DISABLE_STREAM_BULK_SCAN and JSON_DISABLE_UNLOCKED_FILE_IO
Both macros select between two definitions of an input adapter, so
translation units compiled with different settings violated the ODR when
linked together. Like the other ABI-affecting macros, they now append a
tag to the inline namespace: _dsbs and _dufio. Their defaults move to
abi_macros.hpp so that json_fwd.hpp sees them, and the natvis file is
regenerated for the new namespaces.
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* Skip the exception-only checks of the stream input tests without exceptions
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
---------
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
39 lines
1.5 KiB
CMake
39 lines
1.5 KiB
CMake
# test the different options to change the namespace
|
|
|
|
# test default namespace
|
|
add_executable(abi_config_default default.cpp)
|
|
target_link_libraries(abi_config_default PRIVATE abi_compat_main)
|
|
add_test(
|
|
NAME test-abi_config_default
|
|
COMMAND abi_config_default ${DOCTEST_TEST_FILTER})
|
|
|
|
# test no version namespace
|
|
add_executable(abi_config_noversion noversion.cpp)
|
|
target_link_libraries(abi_config_noversion PRIVATE abi_compat_main)
|
|
add_test(
|
|
NAME test-abi_config_noversion
|
|
COMMAND abi_config_noversion ${DOCTEST_TEST_FILTER})
|
|
|
|
# test default and no version namespace with all ABI tags enabled, so the
|
|
# expected tag order is checked regardless of the JSON_* CMake options
|
|
foreach(test default noversion)
|
|
add_executable(abi_config_${test}_all_tags ${test}.cpp)
|
|
target_compile_definitions(abi_config_${test}_all_tags PRIVATE
|
|
JSON_DIAGNOSTICS=1
|
|
JSON_DIAGNOSTIC_POSITIONS=1
|
|
JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1
|
|
JSON_DISABLE_STREAM_BULK_SCAN=1
|
|
JSON_DISABLE_UNLOCKED_FILE_IO=1)
|
|
target_link_libraries(abi_config_${test}_all_tags PRIVATE abi_compat_main)
|
|
add_test(
|
|
NAME test-abi_config_${test}_all_tags
|
|
COMMAND abi_config_${test}_all_tags ${DOCTEST_TEST_FILTER})
|
|
endforeach()
|
|
|
|
# test custom namespace
|
|
add_executable(abi_config_custom custom.cpp)
|
|
target_link_libraries(abi_config_custom PRIVATE abi_compat_main)
|
|
add_test(
|
|
NAME test-abi_config_custom
|
|
COMMAND abi_config_custom ${DOCTEST_TEST_FILTER})
|