├── .appveyor.yml ├── .codecov.yml ├── .drone.star ├── .drone ├── drone.bat └── drone.sh ├── .github ├── ISSUE_TEMPLATE.md ├── actions │ └── build │ │ └── action.yml └── workflows │ ├── run_analyze-bloat.yml │ └── run_fuzzer.yml ├── .gitignore ├── CHANGELOG.md ├── CMakeLists.txt ├── CONTRIBUTING.md ├── LICENSE_1_0.txt ├── README.md ├── bench ├── .gitignore ├── CMakeLists.txt ├── Jamfile ├── README.md ├── apache_builds.hpp ├── bench.cpp ├── boost-json-bench.jam ├── clone.sh ├── data │ ├── apache_builds.json │ ├── canada.json │ ├── citm_catalog.json │ ├── github_events.json │ ├── gsoc-2018.json │ ├── instruments.json │ ├── marine_ik.json │ ├── mesh.json │ ├── mesh.pretty.json │ ├── numbers.json │ ├── random.json │ ├── twitter.json │ ├── twitterescaped.json │ └── update-center.json ├── results.html ├── results.txt └── samples.txt ├── build.jam ├── build └── Jamfile ├── cmake └── toolchains │ ├── clang.cmake │ ├── common.cmake │ ├── gcc.cmake │ └── msvc.cmake ├── doc ├── .gitignore ├── Jamfile ├── README.md ├── config.json ├── externals.hpp ├── images │ ├── doc-logo.png │ ├── parse_apache_builds.png │ ├── parse_canada.png │ ├── parse_citm_catalog.png │ ├── parse_github_events.png │ ├── parse_gsoc_2018.png │ ├── parse_instruments.png │ ├── parse_marine_ik.png │ ├── parse_mesh.png │ ├── parse_mesh_pretty.png │ ├── parse_numbers.png │ ├── parse_random.png │ ├── parse_twitter.png │ ├── parse_twitterescaped.png │ ├── parse_update_center.png │ ├── repo-logo-3.png │ ├── serialize_apache_builds.png │ ├── serialize_canada.png │ ├── serialize_citm_catalog.png │ ├── serialize_github_events.png │ ├── serialize_gsoc_2018.png │ ├── serialize_instruments.png │ ├── serialize_marine_ik.png │ ├── serialize_mesh.png │ ├── serialize_mesh_pretty.png │ ├── serialize_numbers.png │ ├── serialize_random.png │ ├── serialize_twitter.png │ ├── serialize_twitterescaped.png │ └── serialize_update_center.png ├── javadoc.hpp ├── library-detail.adoc └── qbk │ ├── allocators │ ├── background.qbk │ ├── overview.qbk │ ├── pmr.qbk │ └── storage_ptr.qbk │ ├── benchmarks.qbk │ ├── comparison.qbk │ ├── conversion │ ├── alloc.qbk │ ├── basics.qbk │ ├── context.qbk │ ├── custom.qbk │ ├── direct.qbk │ ├── forward.qbk │ ├── guidelines.qbk │ ├── nothrow.qbk │ └── overview.qbk │ ├── dom │ ├── array.qbk │ ├── init_lists.qbk │ ├── nested_access.qbk │ ├── numbers.qbk │ ├── object.qbk │ ├── overview.qbk │ ├── string.qbk │ └── value.qbk │ ├── examples.qbk │ ├── faq.qbk │ ├── index.xml │ ├── io │ ├── overview.qbk │ ├── parsing.qbk │ └── serializing.qbk │ ├── main.qbk │ ├── overview.qbk │ ├── quick_look.qbk │ ├── quickref.xml │ └── release_notes.qbk ├── example ├── CMakeLists.txt ├── Jamfile ├── canada.hpp ├── cbor.cpp ├── citm_catalog.hpp ├── file.hpp ├── parse_into.cpp ├── parse_into_canada.cpp ├── parse_into_citm_catalog.cpp ├── path.cpp ├── pretty.cpp ├── proxy.cpp ├── use_allocator.cpp └── validate.cpp ├── fuzzing ├── .gitignore ├── CMakeLists.txt ├── Jamfile ├── Readme.md ├── fuzz.sh ├── fuzz_basic_parser.cpp ├── fuzz_direct_parse.cpp ├── fuzz_parse.cpp ├── fuzz_parser.cpp └── old_crashes │ ├── basic_parser │ ├── 20200903.json │ ├── crash_00.json │ ├── crash_01.json │ ├── gh13_1.json │ ├── gh13_3.json │ ├── gh20_0.json │ ├── gh21_0.json │ └── minimized-from-58a10325bce45df3e0b4988f932e5a400a344687 │ ├── direct_parse │ ├── array.json │ ├── tuple.json │ ├── valid_cxx14.json │ └── valid_cxx17.json │ ├── parse │ └── gh221.json │ └── parser │ ├── clusterfuzz-testcase-minimized-fuzz_parser-4763163676508160 │ ├── clusterfuzz-testcase-minimized-fuzz_parser-6038712407425024 │ └── clusterfuzz-testcase-minimized-fuzz_parser-6157345913700352 ├── include └── boost │ ├── json.hpp │ └── json │ ├── array.hpp │ ├── basic_parser.hpp │ ├── basic_parser_impl.hpp │ ├── conversion.hpp │ ├── debug_printers.hpp │ ├── detail │ ├── array.hpp │ ├── buffer.hpp │ ├── charconv │ │ ├── chars_format.hpp │ │ ├── detail │ │ │ ├── compute_float64.hpp │ │ │ ├── config.hpp │ │ │ ├── emulated128.hpp │ │ │ ├── fast_float │ │ │ │ ├── ascii_number.hpp │ │ │ │ ├── bigint.hpp │ │ │ │ ├── constexpr_feature_detect.hpp │ │ │ │ ├── decimal_to_binary.hpp │ │ │ │ ├── digit_comparison.hpp │ │ │ │ ├── fast_float.hpp │ │ │ │ ├── fast_table.hpp │ │ │ │ ├── float_common.hpp │ │ │ │ └── parse_number.hpp │ │ │ ├── from_chars_float_impl.hpp │ │ │ ├── from_chars_integer_impl.hpp │ │ │ ├── from_chars_result.hpp │ │ │ ├── integer_search_trees.hpp │ │ │ ├── parser.hpp │ │ │ └── significand_tables.hpp │ │ ├── from_chars.hpp │ │ ├── impl │ │ │ └── from_chars.ipp │ │ └── limits.hpp │ ├── config.hpp │ ├── default_resource.hpp │ ├── digest.hpp │ ├── except.hpp │ ├── format.hpp │ ├── gdb_printers.hpp │ ├── handler.hpp │ ├── impl │ │ ├── array.hpp │ │ ├── default_resource.ipp │ │ ├── except.ipp │ │ ├── format.ipp │ │ ├── handler.ipp │ │ ├── shared_resource.ipp │ │ ├── stack.hpp │ │ ├── stack.ipp │ │ └── string_impl.ipp │ ├── literals.hpp │ ├── object.hpp │ ├── parse_into.hpp │ ├── ryu │ │ ├── detail │ │ │ ├── common.hpp │ │ │ ├── d2s.hpp │ │ │ ├── d2s_full_table.hpp │ │ │ ├── d2s_intrinsics.hpp │ │ │ └── digit_table.hpp │ │ ├── impl │ │ │ └── d2s.ipp │ │ └── ryu.hpp │ ├── sbo_buffer.hpp │ ├── shared_resource.hpp │ ├── sse2.hpp │ ├── stack.hpp │ ├── stream.hpp │ ├── string_impl.hpp │ ├── utf8.hpp │ ├── value.hpp │ ├── value_from.hpp │ ├── value_to.hpp │ └── writer.hpp │ ├── error.hpp │ ├── fwd.hpp │ ├── impl │ ├── array.hpp │ ├── array.ipp │ ├── conversion.hpp │ ├── error.hpp │ ├── error.ipp │ ├── kind.ipp │ ├── monotonic_resource.ipp │ ├── null_resource.ipp │ ├── object.hpp │ ├── object.ipp │ ├── parse.ipp │ ├── parse_into.hpp │ ├── parser.ipp │ ├── pointer.ipp │ ├── serialize.hpp │ ├── serialize.ipp │ ├── serializer.hpp │ ├── serializer.ipp │ ├── static_resource.ipp │ ├── stream_parser.ipp │ ├── string.hpp │ ├── string.ipp │ ├── value.hpp │ ├── value.ipp │ ├── value_ref.hpp │ ├── value_ref.ipp │ ├── value_stack.ipp │ └── visit.hpp │ ├── is_deallocate_trivial.hpp │ ├── json.natvis │ ├── kind.hpp │ ├── monotonic_resource.hpp │ ├── null_resource.hpp │ ├── object.hpp │ ├── parse.hpp │ ├── parse_into.hpp │ ├── parse_options.hpp │ ├── parser.hpp │ ├── pilfer.hpp │ ├── result_for.hpp │ ├── serialize.hpp │ ├── serialize_options.hpp │ ├── serializer.hpp │ ├── set_pointer_options.hpp │ ├── src.hpp │ ├── static_resource.hpp │ ├── storage_ptr.hpp │ ├── stream_parser.hpp │ ├── string.hpp │ ├── string_view.hpp │ ├── value.hpp │ ├── value_from.hpp │ ├── value_ref.hpp │ ├── value_stack.hpp │ ├── value_to.hpp │ └── visit.hpp ├── index.html ├── meta ├── explicit-failures-markup.xml └── libraries.json ├── pretty_printers ├── FindBoostPrettyPrinters.cmake ├── boost-pretty-printers.jam ├── generate-gdb-header.py └── generate-gdb-test-runner.py ├── src ├── boost_json_gdb_printers.py └── src.cpp └── test ├── CMakeLists.txt ├── Jamfile ├── README.md ├── array.cpp ├── basic_parser.cpp ├── checking_resource.hpp ├── cmake-subdir ├── CMakeLists.txt └── main.cpp ├── cmake_install_test ├── CMakeLists.txt └── main.cpp ├── conversion.cpp ├── doc_background.cpp ├── doc_forward_conversion.cpp ├── doc_parsing.cpp ├── doc_quick_look.cpp ├── doc_serializing.cpp ├── doc_storage_ptr.cpp ├── doc_types.hpp ├── doc_uses_allocator.cpp ├── doc_using_numbers.cpp ├── double.cpp ├── error.cpp ├── fwd.cpp ├── intrusive_macros.cpp ├── json.cpp ├── kind.cpp ├── limits.cpp ├── main.cpp ├── make-pvs.py ├── make-strings.py ├── memory_resource.cpp ├── monotonic_resource.cpp ├── natvis.cpp ├── no_exceptions.cpp ├── null_resource.cpp ├── object.cpp ├── parse-vectors.hpp ├── parse-vectors ├── i_number_double_huge_neg_exp.json ├── i_number_huge_exp.json ├── i_number_neg_int_huge_exp.json ├── i_number_pos_double_huge_exp.json ├── i_number_real_neg_overflow.json ├── i_number_real_pos_overflow.json ├── i_number_real_underflow.json ├── i_number_too_big_neg_int.json ├── i_number_too_big_pos_int.json ├── i_number_very_big_negative_int.json ├── i_object_key_lone_2nd_surrogate.json ├── i_string_1st_surrogate_but_2nd_missing.json ├── i_string_1st_valid_surrogate_2nd_invalid.json ├── i_string_UTF-16LE_with_BOM.json ├── i_string_UTF-8_invalid_sequence.json ├── i_string_UTF8_surrogate_U+D800.json ├── i_string_incomplete_surrogate_and_escape_valid.json ├── i_string_incomplete_surrogate_pair.json ├── i_string_incomplete_surrogates_escape_valid.json ├── i_string_invalid_lonely_surrogate.json ├── i_string_invalid_surrogate.json ├── i_string_invalid_utf-8.json ├── i_string_inverted_surrogates_U+1D11E.json ├── i_string_iso_latin_1.json ├── i_string_lone_second_surrogate.json ├── i_string_lone_utf8_continuation_byte.json ├── i_string_not_in_unicode_range.json ├── i_string_overlong_sequence_2_bytes.json ├── i_string_overlong_sequence_6_bytes.json ├── i_string_overlong_sequence_6_bytes_null.json ├── i_string_truncated-utf-8.json ├── i_string_utf16BE_no_BOM.json ├── i_string_utf16LE_no_BOM.json ├── i_structure_500_nested_arrays.json ├── i_structure_UTF-8_BOM_empty_object.json ├── n_array_1_true_without_comma.json ├── n_array_a_invalid_utf8.json ├── n_array_colon_instead_of_comma.json ├── n_array_comma_after_close.json ├── n_array_comma_and_number.json ├── n_array_double_comma.json ├── n_array_double_extra_comma.json ├── n_array_extra_close.json ├── n_array_extra_comma.json ├── n_array_incomplete.json ├── n_array_incomplete_invalid_value.json ├── n_array_inner_array_no_comma.json ├── n_array_invalid_utf8.json ├── n_array_items_separated_by_semicolon.json ├── n_array_just_comma.json ├── n_array_just_minus.json ├── n_array_missing_value.json ├── n_array_newlines_unclosed.json ├── n_array_number_and_comma.json ├── n_array_number_and_several_commas.json ├── n_array_spaces_vertical_tab_formfeed.json ├── n_array_star_inside.json ├── n_array_unclosed.json ├── n_array_unclosed_trailing_comma.json ├── n_array_unclosed_with_new_lines.json ├── n_array_unclosed_with_object_inside.json ├── n_fail01.json ├── n_fail02.json ├── n_fail03.json ├── n_fail04.json ├── n_fail05.json ├── n_fail06.json ├── n_fail07.json ├── n_fail08.json ├── n_fail09.json ├── n_fail10.json ├── n_fail11.json ├── n_fail12.json ├── n_fail13.json ├── n_fail14.json ├── n_fail15.json ├── n_fail16.json ├── n_fail17.json ├── n_fail19.json ├── n_fail20.json ├── n_fail21.json ├── n_fail22.json ├── n_fail23.json ├── n_fail24.json ├── n_fail25.json ├── n_fail26.json ├── n_fail27.json ├── n_fail28.json ├── n_fail29.json ├── n_fail30.json ├── n_fail31.json ├── n_fail32.json ├── n_incomplete_false.json ├── n_incomplete_null.json ├── n_incomplete_true.json ├── n_multidigit_number_then_00.json ├── n_number_++.json ├── n_number_+1.json ├── n_number_+Inf.json ├── n_number_-01.json ├── n_number_-1.0..json ├── n_number_-2..json ├── n_number_-NaN.json ├── n_number_.-1.json ├── n_number_.2e-3.json ├── n_number_0.1.2.json ├── n_number_0.3e+.json ├── n_number_0.3e.json ├── n_number_0.e1.json ├── n_number_0_capital_E+.json ├── n_number_0_capital_E.json ├── n_number_0e+.json ├── n_number_0e.json ├── n_number_1.0e+.json ├── n_number_1.0e-.json ├── n_number_1.0e.json ├── n_number_1_000.json ├── n_number_1eE2.json ├── n_number_2.e+3.json ├── n_number_2.e-3.json ├── n_number_2.e3.json ├── n_number_9.e+.json ├── n_number_Inf.json ├── n_number_NaN.json ├── n_number_U+FF11_fullwidth_digit_one.json ├── n_number_expression.json ├── n_number_hex_1_digit.json ├── n_number_hex_2_digits.json ├── n_number_infinity.json ├── n_number_invalid+-.json ├── n_number_invalid-negative-real.json ├── n_number_invalid-utf-8-in-bigger-int.json ├── n_number_invalid-utf-8-in-exponent.json ├── n_number_invalid-utf-8-in-int.json ├── n_number_minus_infinity.json ├── n_number_minus_sign_with_trailing_garbage.json ├── n_number_minus_space_1.json ├── n_number_neg_int_starting_with_zero.json ├── n_number_neg_real_without_int_part.json ├── n_number_neg_with_garbage_at_end.json ├── n_number_real_garbage_after_e.json ├── n_number_real_with_invalid_utf8_after_e.json ├── n_number_real_without_fractional_part.json ├── n_number_starting_with_dot.json ├── n_number_with_alpha.json ├── n_number_with_alpha_char.json ├── n_number_with_leading_zero.json ├── n_object_bad_value.json ├── n_object_bracket_key.json ├── n_object_comma_instead_of_colon.json ├── n_object_double_colon.json ├── n_object_emoji.json ├── n_object_garbage_at_end.json ├── n_object_key_with_single_quotes.json ├── n_object_lone_continuation_byte_in_key_and_trailing_comma.json ├── n_object_missing_colon.json ├── n_object_missing_key.json ├── n_object_missing_semicolon.json ├── n_object_missing_value.json ├── n_object_no-colon.json ├── n_object_non_string_key.json ├── n_object_non_string_key_but_huge_number_instead.json ├── n_object_repeated_null_null.json ├── n_object_several_trailing_commas.json ├── n_object_single_quote.json ├── n_object_trailing_comma.json ├── n_object_trailing_comment.json ├── n_object_trailing_comment_open.json ├── n_object_trailing_comment_slash_open.json ├── n_object_trailing_comment_slash_open_incomplete.json ├── n_object_two_commas_in_a_row.json ├── n_object_unquoted_key.json ├── n_object_unterminated-value.json ├── n_object_with_single_string.json ├── n_object_with_trailing_garbage.json ├── n_single_space.json ├── n_string_1_surrogate_then_escape.json ├── n_string_1_surrogate_then_escape_u.json ├── n_string_1_surrogate_then_escape_u1.json ├── n_string_1_surrogate_then_escape_u1x.json ├── n_string_accentuated_char_no_quotes.json ├── n_string_backslash_00.json ├── n_string_escape_x.json ├── n_string_escaped_backslash_bad.json ├── n_string_escaped_ctrl_char_tab.json ├── n_string_escaped_emoji.json ├── n_string_incomplete_escape.json ├── n_string_incomplete_escaped_character.json ├── n_string_incomplete_surrogate.json ├── n_string_incomplete_surrogate_escape_invalid.json ├── n_string_invalid-utf-8-in-escape.json ├── n_string_invalid_backslash_esc.json ├── n_string_invalid_unicode_escape.json ├── n_string_invalid_utf8_after_escape.json ├── n_string_leading_uescaped_thinspace.json ├── n_string_no_quotes_with_bad_escape.json ├── n_string_single_doublequote.json ├── n_string_single_quote.json ├── n_string_single_string_no_double_quotes.json ├── n_string_start_escape_unclosed.json ├── n_string_unescaped_crtl_char.json ├── n_string_unescaped_newline.json ├── n_string_unescaped_tab.json ├── n_string_unicode_CapitalU.json ├── n_string_with_trailing_garbage.json ├── n_structure_100000_opening_arrays.json ├── n_structure_U+2060_word_joined.json ├── n_structure_UTF8_BOM_no_data.json ├── n_structure_angle_bracket_..json ├── n_structure_angle_bracket_null.json ├── n_structure_array_trailing_garbage.json ├── n_structure_array_with_extra_array_close.json ├── n_structure_array_with_unclosed_string.json ├── n_structure_ascii-unicode-identifier.json ├── n_structure_capitalized_True.json ├── n_structure_close_unopened_array.json ├── n_structure_comma_instead_of_closing_brace.json ├── n_structure_double_array.json ├── n_structure_end_array.json ├── n_structure_incomplete_UTF8_BOM.json ├── n_structure_lone-invalid-utf-8.json ├── n_structure_lone-open-bracket.json ├── n_structure_no_data.json ├── n_structure_null-byte-outside-string.json ├── n_structure_number_with_trailing_garbage.json ├── n_structure_object_followed_by_closing_object.json ├── n_structure_object_unclosed_no_value.json ├── n_structure_object_with_comment.json ├── n_structure_object_with_trailing_garbage.json ├── n_structure_open_array_apostrophe.json ├── n_structure_open_array_comma.json ├── n_structure_open_array_object.json ├── n_structure_open_array_open_object.json ├── n_structure_open_array_open_string.json ├── n_structure_open_array_string.json ├── n_structure_open_object.json ├── n_structure_open_object_close_array.json ├── n_structure_open_object_comma.json ├── n_structure_open_object_open_array.json ├── n_structure_open_object_open_string.json ├── n_structure_open_object_string_with_apostrophes.json ├── n_structure_open_open.json ├── n_structure_single_eacute.json ├── n_structure_single_star.json ├── n_structure_trailing_#.json ├── n_structure_uescaped_LF_before_string.json ├── n_structure_unclosed_array.json ├── n_structure_unclosed_array_partial_null.json ├── n_structure_unclosed_array_unfinished_false.json ├── n_structure_unclosed_array_unfinished_true.json ├── n_structure_unclosed_object.json ├── n_structure_unicode-identifier.json ├── n_structure_whitespace_U+2060_word_joiner.json ├── n_structure_whitespace_formfeed.json ├── y_array_arraysWithSpaces.json ├── y_array_empty-string.json ├── y_array_empty.json ├── y_array_ending_with_newline.json ├── y_array_false.json ├── y_array_heterogeneous.json ├── y_array_null.json ├── y_array_with_1_and_newline.json ├── y_array_with_leading_space.json ├── y_array_with_several_null.json ├── y_array_with_trailing_space.json ├── y_number.json ├── y_number_0e+1.json ├── y_number_0e1.json ├── y_number_after_space.json ├── y_number_double_close_to_zero.json ├── y_number_int_with_exp.json ├── y_number_minus_zero.json ├── y_number_negative_int.json ├── y_number_negative_one.json ├── y_number_negative_zero.json ├── y_number_real_capital_e.json ├── y_number_real_capital_e_neg_exp.json ├── y_number_real_capital_e_pos_exp.json ├── y_number_real_exponent.json ├── y_number_real_fraction_exponent.json ├── y_number_real_neg_exp.json ├── y_number_real_pos_exponent.json ├── y_number_simple_int.json ├── y_number_simple_real.json ├── y_object.json ├── y_object_basic.json ├── y_object_duplicated_key.json ├── y_object_duplicated_key_and_value.json ├── y_object_empty.json ├── y_object_empty_key.json ├── y_object_escaped_null_in_key.json ├── y_object_extreme_numbers.json ├── y_object_long_strings.json ├── y_object_simple.json ├── y_object_string_unicode.json ├── y_object_with_newlines.json ├── y_pass01.json ├── y_pass02.json ├── y_pass03.json ├── y_string_1_2_3_bytes_UTF-8_sequences.json ├── y_string_accepted_surrogate_pair.json ├── y_string_accepted_surrogate_pairs.json ├── y_string_allowed_escapes.json ├── y_string_backslash_and_u_escaped_zero.json ├── y_string_backslash_doublequotes.json ├── y_string_comments.json ├── y_string_double_escape_a.json ├── y_string_double_escape_n.json ├── y_string_escaped_control_character.json ├── y_string_escaped_noncharacter.json ├── y_string_in_array.json ├── y_string_in_array_with_leading_space.json ├── y_string_last_surrogates_1_and_2.json ├── y_string_nbsp_uescaped.json ├── y_string_nonCharacterInUTF-8_U+10FFFF.json ├── y_string_nonCharacterInUTF-8_U+FFFF.json ├── y_string_null_escape.json ├── y_string_one-byte-utf-8.json ├── y_string_pi.json ├── y_string_reservedCharacterInUTF-8_U+1BFFF.json ├── y_string_simple_ascii.json ├── y_string_space.json ├── y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json ├── y_string_three-byte-utf-8.json ├── y_string_two-byte-utf-8.json ├── y_string_u+2028_line_sep.json ├── y_string_u+2029_par_sep.json ├── y_string_uEscape.json ├── y_string_uescaped_newline.json ├── y_string_unescaped_char_delete.json ├── y_string_unicode.json ├── y_string_unicodeEscapedBackslash.json ├── y_string_unicode_2.json ├── y_string_unicode_U+10FFFE_nonchar.json ├── y_string_unicode_U+1FFFE_nonchar.json ├── y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json ├── y_string_unicode_U+2064_invisible_plus.json ├── y_string_unicode_U+FDD0_nonchar.json ├── y_string_unicode_U+FFFE_nonchar.json ├── y_string_unicode_escaped_double_quote.json ├── y_string_utf8.json ├── y_string_with_del_character.json ├── y_structure_lonely_false.json ├── y_structure_lonely_int.json ├── y_structure_lonely_negative_real.json ├── y_structure_lonely_null.json ├── y_structure_lonely_string.json ├── y_structure_lonely_true.json ├── y_structure_string_empty.json ├── y_structure_trailing_newline.json ├── y_structure_true_in_array.json └── y_structure_whitespace_array.json ├── parse.cpp ├── parse_into.cpp ├── parser.cpp ├── pilfer.cpp ├── pointer.cpp ├── printers.cpp ├── result_for.cpp ├── ryu ├── d2s_intrinsics_test.cpp ├── d2s_table_test.cpp ├── d2s_test.cpp └── gtest.hpp ├── serialize.cpp ├── serializer.cpp ├── snippets.cpp ├── static_resource.cpp ├── storage_ptr.cpp ├── stream_parser.cpp ├── string.cpp ├── string_view.cpp ├── test.hpp ├── test_suite.hpp ├── utf8.cpp ├── value.cpp ├── value_from.cpp ├── value_ref.cpp ├── value_stack.cpp ├── value_to.cpp └── visit.cpp /.codecov.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2019 - 2021 Alexander Grund 2 | # Distributed under the Boost Software License, Version 1.0. 3 | # (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) 4 | # 5 | # Sample codecov configuration file. Edit as required 6 | 7 | codecov: 8 | max_report_age: off 9 | require_ci_to_pass: yes 10 | notify: 11 | # Increase this if you have multiple coverage collection jobs 12 | after_n_builds: 1 13 | wait_for_ci: yes 14 | 15 | # Change how pull request comments look 16 | comment: 17 | layout: "reach,diff,flags,files,footer" 18 | 19 | # Ignore specific files or folders. Glob patterns are supported. 20 | # See https://docs.codecov.com/docs/ignoring-paths 21 | ignore: 22 | - extra/* 23 | - extra/**/* 24 | - test/* 25 | - test/**/* 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | PLEASE DON'T FORGET TO "STAR" THIS REPOSITORY :) 2 | 3 | When reporting a bug please include the following: 4 | 5 | ### Version of Boost 6 | 7 | You can find the version number in the file `` 8 | 9 | ### Steps necessary to reproduce the problem 10 | 11 | A small compiling program is the best. If your code is 12 | public, you can provide a link to the repository. 13 | 14 | ### All relevant compiler information 15 | 16 | If you are unable to compile please include the type and 17 | version of compiler you are using as well as all compiler 18 | output including the error message, file, and line numbers 19 | involved. 20 | 21 | The more information you provide the sooner your issue 22 | can get resolved! 23 | -------------------------------------------------------------------------------- /.github/workflows/run_analyze-bloat.yml: -------------------------------------------------------------------------------- 1 | name: analyze-bloat 2 | 3 | on: [push, pull_request] 4 | 5 | env: 6 | CMAKE_SHARED_LIBS: '0' 7 | CMAKE_NO_TESTS: ignore 8 | CMAKE_OPTIONS: > 9 | -DBOOST_JSON_BUILD_TESTS=OFF 10 | -DBOOST_JSON_BUILD_FUZZERS=OFF 11 | -DBOOST_JSON_BUILD_BENCHMARKS=OFF 12 | -DCMAKE_BUILD_TYPE=Release 13 | -DVISIBILITY_INLINES_HIDDEN=TRUE 14 | -DCMAKE_CXX_VISIBILITY_PRESET=hidden 15 | 16 | jobs: 17 | analyze-bloat: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - name: Fetch head 21 | uses: actions/checkout@v4 22 | with: 23 | path: 'head_ref/root' 24 | - name: Compile static lib for head ref 25 | uses: ./head_ref/root/.github/actions/build 26 | with: 27 | buildtype: 'cmake-superproject' 28 | toolset: gcc 29 | path: 'head_ref/root' 30 | - name: Bloat analysis - absolute values 31 | uses: djarek/bloaty-analyze@v1.0.0 32 | with: 33 | file: head_ref/boost-root/__build_static/stage/lib/libboost_json.a 34 | rows: 0 # 0 indicates unlimited number of rows 35 | - name: Fetch base 36 | if: ${{ github.event_name == 'pull_request' }} 37 | uses: actions/checkout@v4 38 | with: 39 | ref: ${{ github.base_ref }} 40 | path: 'base_ref/root' 41 | - name: Compile static lib for base ref 42 | if: ${{ github.event_name == 'pull_request' }} 43 | uses: ./head_ref/root/.github/actions/build 44 | with: 45 | buildtype: 'cmake-superproject' 46 | toolset: gcc 47 | path: 'base_ref/root' 48 | - name: Bloat analysis - diff 49 | uses: djarek/bloaty-analyze@v1.0.0 50 | if: ${{ github.event_name == 'pull_request' }} 51 | with: 52 | file: head_ref/boost-root/__build_static/stage/lib/libboost_json.a 53 | base-file: base_ref/boost-root/__build_static/stage/lib/libboost_json.a 54 | rows: 0 # 0 indicates unlimited number of rows 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /bin.v2 3 | /bin64 4 | /_build* 5 | temp 6 | 7 | # Emacs 8 | *# 9 | 10 | # Vim 11 | *~ 12 | 13 | # Visual Studio 14 | /.vs 15 | /out 16 | 17 | # Visual Studio Code 18 | /.vscode 19 | 20 | # local copy of bench 21 | /bench/bench 22 | /bench/bench.exe 23 | 24 | # Python 25 | __pycache__ 26 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Boost.JSON 2 | 3 | ## Quickstart 4 | 5 | Here is minimal sequence of steps required to prepare development environment: 6 | 7 | 1. Download Boost 8 | 2. Bootstrap Boost 9 | 3. Build Boost.JSON tests, benchmarks and examples 10 | 11 | ``` 12 | git clone --recurse-submodules --jobs 8 https://github.com/boostorg/boost.git 13 | cd boost 14 | ./bootstrap.sh 15 | ./b2 headers 16 | cd libs/json 17 | ../../b2 test 18 | ../../b2 bench 19 | ../../b2 example 20 | ``` 21 | -------------------------------------------------------------------------------- /LICENSE_1_0.txt: -------------------------------------------------------------------------------- 1 | Boost Software License - Version 1.0 - August 17th, 2003 2 | 3 | Permission is hereby granted, free of charge, to any person or organization 4 | obtaining a copy of the software and accompanying documentation covered by 5 | this license (the "Software") to use, reproduce, display, distribute, 6 | execute, and transmit the Software, and to prepare derivative works of the 7 | Software, and to permit third-parties to whom the Software is furnished to 8 | do so, all subject to the following: 9 | 10 | The copyright notices in the Software and this entire statement, including 11 | the above license grant, this restriction and the following disclaimer, 12 | must be included in all copies of the Software, in whole or in part, and 13 | all derivative works of the Software, unless such copies or derivative 14 | works are solely in the form of machine-executable object code generated by 15 | a source language processor. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 20 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 21 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 | DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /bench/.gitignore: -------------------------------------------------------------------------------- 1 | lib/ 2 | -------------------------------------------------------------------------------- /bench/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) 3 | # 4 | # Distributed under the Boost Software License, Version 1.0. (See accompanying 5 | # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 | # 7 | # Official repository: https://github.com/boostorg/json 8 | # 9 | 10 | source_group("" FILES 11 | Jamfile 12 | bench.cpp 13 | ) 14 | 15 | add_executable(bench 16 | Jamfile 17 | bench.cpp 18 | ) 19 | 20 | target_include_directories(bench PRIVATE ../test) 21 | target_link_libraries(bench PRIVATE Boost::json) 22 | 23 | if(EXISTS lib/nlohmann/single_include/nlohmann/json.hpp) 24 | target_compile_definitions(bench PRIVATE BOOST_JSON_HAS_NLOHMANN_JSON) 25 | endif() 26 | 27 | if(EXISTS lib/rapidjson/include/rapidjson/rapidjson.h) 28 | target_compile_definitions(bench PRIVATE BOOST_JSON_HAS_RAPIDJSON) 29 | endif() 30 | -------------------------------------------------------------------------------- /bench/Jamfile: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) 3 | # 4 | # Distributed under the Boost Software License, Version 1.0. (See accompanying 5 | # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 | # 7 | # Official repository: https://github.com/boostorg/json 8 | # 9 | 10 | import boost-json-bench ; 11 | import common ; 12 | import feature ; 13 | import notfile ; 14 | import os ; 15 | import path ; 16 | import property ; 17 | import toolset ; 18 | 19 | local has_nlohmann_json = [ 20 | glob lib/nlohmann/single_include/nlohmann/json.hpp ] ; 21 | if $(has_nlohmann_json) 22 | { 23 | has_nlohmann_json = "" ; 24 | } 25 | 26 | local has_rapidjson = [ 27 | glob lib/rapidjson/include/rapidjson/rapidjson.h ] ; 28 | if $(has_rapidjson) 29 | { 30 | has_rapidjson = "" ; 31 | } 32 | 33 | exe bench : 34 | bench.cpp 35 | /boost/json//boost_json 36 | : 37 | ../test 38 | ../example 39 | $(has_nlohmann_json)BOOST_JSON_HAS_NLOHMANN_JSON 40 | $(has_rapidjson)BOOST_JSON_HAS_RAPIDJSON 41 | ; 42 | 43 | install bench-local : bench : . true ; 44 | explicit bench-local ; 45 | always bench-local ; 46 | 47 | local bench-files = [ glob-tree-ex data : *.json ] ; 48 | notfile run : @run-bench : bench : : $(bench-files) ; 49 | explicit run ; 50 | 51 | rule run-bench ( target : sources * : props * ) 52 | { 53 | local launcher = [ property.select bench.launcher : $(props) ] ; 54 | if $(launcher) 55 | { 56 | launcher = "$(launcher:G=) " ; 57 | launcher = "$(launcher:J=) " ; 58 | } 59 | else 60 | { 61 | launcher = "" ; 62 | } 63 | LAUNCHER on $(target) = $(launcher) ; 64 | } 65 | 66 | actions run-bench bind FILES 67 | { 68 | $(LAUNCHER) $(>) $(FLAGS) $(FILES) 69 | } 70 | 71 | toolset.flags $(__name__).run-bench FLAGS : ; 72 | toolset.flags $(__name__).run-bench FLAGS : ; 73 | toolset.flags $(__name__).run-bench FILES : ; 74 | -------------------------------------------------------------------------------- /bench/apache_builds.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2024 Dmitry Arkhipov (grisumbras@yandex.ru) 3 | // 4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 | // 7 | // Official repository: https://github.com/boostorg/json 8 | // 9 | 10 | #ifndef BOOST_JSON_BENCH_APACHE_BUILDS_HPP 11 | #define BOOST_JSON_BENCH_APACHE_BUILDS_HPP 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | namespace boost { 20 | namespace json { 21 | namespace apache_builds { 22 | 23 | struct label 24 | { 25 | boost::optional name; 26 | }; 27 | BOOST_DESCRIBE_STRUCT( label, (), (name) ) 28 | 29 | struct job 30 | { 31 | std::string name; 32 | std::string url; 33 | std::string color; 34 | }; 35 | BOOST_DESCRIBE_STRUCT( job, (), (name, url, color) ) 36 | 37 | struct view 38 | { 39 | std::string name; 40 | std::string url; 41 | }; 42 | BOOST_DESCRIBE_STRUCT( view, (), (name, url) ) 43 | 44 | struct builds 45 | { 46 | std::vector