From 7ddd4d20217deb56237ad2f4dd803b0539fbe481 Mon Sep 17 00:00:00 2001 From: lemire Date: Mon, 30 Jan 2023 19:42:55 +0000 Subject: [PATCH] deploy: 269ae7ad6ba43c698e6d230e94b53031ed108fea --- .nojekyll | 0 annotated.html | 160 ++ annotated_dup.js | 57 + arm64_2begin_8h_source.html | 104 + arm64_2bitmanipulation_8h_source.html | 189 ++ arm64_2bitmask_8h_source.html | 142 + arm64_2end_8h_source.html | 104 + arm64_2implementation_8h_source.html | 138 + arm64_2intrinsics_8h_source.html | 114 + arm64_2numberparsing_8h_source.html | 130 + arm64_2simd_8h_source.html | 627 +++++ arm64_2stringparsing_8h_source.html | 156 ++ arm64_8h_source.html | 136 + array__iterator-inl_8h_source.html | 181 ++ array__iterator_8h_source.html | 173 ++ atomparsing_8h_source.html | 169 ++ base_8h_source.html | 129 + bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes builtin_8h_source.html | 151 ++ classes.html | 141 + ..._1dom__parser__implementation-members.html | 122 + ..._i_o_n_1_1dom__parser__implementation.html | 179 ++ ..._t_i_o_n_1_1dom__parser__implementation.js | 20 + ...t_i_o_n_1_1dom__parser__implementation.png | Bin 0 -> 1297 bytes ..._t_i_o_n_1_1ondemand_1_1array-members.html | 120 + ..._e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html | 642 +++++ ..._m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.js | 20 + ..._1ondemand_1_1array__iterator-members.html | 110 + ..._i_o_n_1_1ondemand_1_1array__iterator.html | 267 ++ ..._t_i_o_n_1_1ondemand_1_1array__iterator.js | 11 + ...i_o_n_1_1ondemand_1_1document-members.html | 174 ++ ...n_t_a_t_i_o_n_1_1ondemand_1_1document.html | 1859 +++++++++++++ ...e_n_t_a_t_i_o_n_1_1ondemand_1_1document.js | 79 + ...demand_1_1document__reference-members.html | 155 ++ ..._n_1_1ondemand_1_1document__reference.html | 301 +++ ..._o_n_1_1ondemand_1_1document__reference.js | 53 + ...1ondemand_1_1document__stream-members.html | 113 + ...i_o_n_1_1ondemand_1_1document__stream.html | 221 ++ ...t_i_o_n_1_1ondemand_1_1document__stream.js | 17 + ...1document__stream_1_1iterator-members.html | 114 + ...emand_1_1document__stream_1_1iterator.html | 189 ++ ...ndemand_1_1document__stream_1_1iterator.js | 15 + ..._t_i_o_n_1_1ondemand_1_1field-members.html | 113 + ..._e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html | 255 ++ ..._m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.js | 11 + ...m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.png | Bin 0 -> 1130 bytes ...t_i_o_n_1_1ondemand_1_1object-members.html | 127 + ...e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html | 518 ++++ ...m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.js | 24 + ...1ondemand_1_1object__iterator-members.html | 110 + ...i_o_n_1_1ondemand_1_1object__iterator.html | 161 ++ ...t_i_o_n_1_1ondemand_1_1object__iterator.js | 10 + ...t_i_o_n_1_1ondemand_1_1parser-members.html | 131 + ...e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html | 510 ++++ ...m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.js | 31 + ...ondemand_1_1raw__json__string-members.html | 115 + ..._o_n_1_1ondemand_1_1raw__json__string.html | 395 +++ ..._i_o_n_1_1ondemand_1_1raw__json__string.js | 15 + ..._t_i_o_n_1_1ondemand_1_1value-members.html | 156 ++ ..._e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html | 1675 ++++++++++++ ..._m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.js | 58 + classsimdjson_1_1dom_1_1array-members.html | 112 + classsimdjson_1_1dom_1_1array.html | 347 +++ classsimdjson_1_1dom_1_1array.js | 13 + ...n_1_1dom_1_1array_1_1iterator-members.html | 119 + ...ssimdjson_1_1dom_1_1array_1_1iterator.html | 254 ++ classsimdjson_1_1dom_1_1array_1_1iterator.js | 18 + classsimdjson_1_1dom_1_1document-members.html | 110 + classsimdjson_1_1dom_1_1document.html | 233 ++ classsimdjson_1_1dom_1_1document.js | 9 + ...on_1_1dom_1_1document__stream-members.html | 113 + classsimdjson_1_1dom_1_1document__stream.html | 223 ++ classsimdjson_1_1dom_1_1document__stream.js | 15 + ...1document__stream_1_1iterator-members.html | 113 + ..._1dom_1_1document__stream_1_1iterator.html | 189 ++ ..._1_1dom_1_1document__stream_1_1iterator.js | 12 + classsimdjson_1_1dom_1_1element-members.html | 155 ++ classsimdjson_1_1dom_1_1element.html | 1635 +++++++++++ classsimdjson_1_1dom_1_1element.js | 57 + ...on_1_1dom_1_1key__value__pair-members.html | 107 + classsimdjson_1_1dom_1_1key__value__pair.html | 129 + classsimdjson_1_1dom_1_1key__value__pair.js | 6 + classsimdjson_1_1dom_1_1object-members.html | 114 + classsimdjson_1_1dom_1_1object.html | 443 +++ classsimdjson_1_1dom_1_1object.js | 15 + ..._1_1dom_1_1object_1_1iterator-members.html | 125 + ...simdjson_1_1dom_1_1object_1_1iterator.html | 368 +++ classsimdjson_1_1dom_1_1object_1_1iterator.js | 24 + classsimdjson_1_1dom_1_1parser-members.html | 141 + classsimdjson_1_1dom_1_1parser.html | 890 ++++++ classsimdjson_1_1dom_1_1parser.js | 41 + classsimdjson_1_1implementation-members.html | 110 + classsimdjson_1_1implementation.html | 266 ++ classsimdjson_1_1implementation.js | 8 + ...djson_1_1padded__string__view-members.html | 112 + classsimdjson_1_1padded__string__view.html | 291 ++ classsimdjson_1_1padded__string__view.js | 10 + classsimdjson_1_1padded__string__view.png | Bin 0 -> 670 bytes closed.png | Bin 0 -> 132 bytes common__defs_8h_source.html | 392 +++ compiler__check_8h_source.html | 138 + deprecated.html | 113 + dir_0d145e48adcb2584d6aad0aa1d711d9e.html | 103 + dir_0d145e48adcb2584d6aad0aa1d711d9e.js | 12 + dir_0fee190c3bc9a7d22e6d44901a62fa54.html | 103 + dir_0fee190c3bc9a7d22e6d44901a62fa54.js | 12 + dir_438095d7beafc60159803dc5832a82bd.html | 103 + dir_438095d7beafc60159803dc5832a82bd.js | 21 + dir_49a0b2767ded4a45005c5d6720a18cd1.html | 115 + dir_49a0b2767ded4a45005c5d6720a18cd1.js | 38 + dir_53368a02099cf3699f2996a5d88d70b6.html | 107 + dir_53368a02099cf3699f2996a5d88d70b6.js | 12 + dir_76d8247d4498211a7d04a3794a38eb71.html | 103 + dir_76d8247d4498211a7d04a3794a38eb71.js | 12 + dir_7796bb4b727f918c96faee1bdd50e49a.html | 103 + dir_7796bb4b727f918c96faee1bdd50e49a.js | 36 + dir_9b01d0736ef91c92ca1a5074971144b1.html | 103 + dir_9b01d0736ef91c92ca1a5074971144b1.js | 12 + dir_aff943445258981e0d80c1f13c0bf97f.html | 103 + dir_aff943445258981e0d80c1f13c0bf97f.js | 4 + dir_b35ffb90479583e132afc246e9b6e77a.html | 103 + dir_b35ffb90479583e132afc246e9b6e77a.js | 12 + dir_ba336e6e255a3bf0b1427b51513cdc60.html | 103 + dir_ba336e6e255a3bf0b1427b51513cdc60.js | 12 + dir_bdd5d78d80e110a51a7313218161f5b4.html | 103 + dir_bdd5d78d80e110a51a7313218161f5b4.js | 9 + dir_d44c64559bbebec7f509842c48db8b23.html | 107 + dir_d44c64559bbebec7f509842c48db8b23.js | 4 + dir_e68e8157741866f444e17edd764ebbae.html | 103 + doc.png | Bin 0 -> 746 bytes dom_2array-inl_8h_source.html | 296 ++ dom_2array_8h_source.html | 224 ++ dom_2document-inl_8h_source.html | 268 ++ dom_2document_8h_source.html | 151 ++ dom_2document__stream-inl_8h_source.html | 464 ++++ dom_2document__stream_8h_source.html | 270 ++ dom_2object-inl_8h_source.html | 372 +++ dom_2object_8h_source.html | 258 ++ dom_2parser-inl_8h_source.html | 368 +++ dom_2parser_8h_source.html | 281 ++ dom_2serialization-inl_8h_source.html | 516 ++++ dom_2serialization_8h_source.html | 248 ++ dom_8h_source.html | 138 + doxygen-awesome-darkmode-toggle.js | 157 ++ doxygen-awesome-sidebar-only.css | 115 + doxygen-awesome.css | 2405 +++++++++++++++++ doxygen.css | 1793 ++++++++++++ doxygen.svg | 26 + dynsections.js | 128 + element-inl_8h_source.html | 590 ++++ element_8h_source.html | 336 +++ error-inl_8h_source.html | 299 ++ error_8h_source.html | 284 ++ fallback_2begin_8h_source.html | 104 + fallback_2bitmanipulation_8h_source.html | 151 ++ fallback_2end_8h_source.html | 104 + fallback_2implementation_8h_source.html | 141 + fallback_2numberparsing_8h_source.html | 138 + fallback_2stringparsing_8h_source.html | 138 + fallback_8h_source.html | 132 + field-inl_8h_source.html | 192 ++ field_8h_source.html | 161 ++ files.html | 264 ++ files_dup.js | 4 + folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes functions.html | 149 + functions_b.html | 115 + functions_c.html | 132 + functions_d.html | 122 + functions_dup.js | 24 + functions_e.html | 121 + functions_f.html | 120 + functions_func.html | 149 + functions_func.js | 24 + functions_func_b.html | 112 + functions_func_c.html | 132 + functions_func_d.html | 116 + functions_func_e.html | 121 + functions_func_f.html | 117 + functions_func_g.html | 182 ++ functions_func_i.html | 175 ++ functions_func_k.html | 118 + functions_func_l.html | 112 + functions_func_m.html | 110 + functions_func_n.html | 108 + functions_func_o.html | 197 ++ functions_func_p.html | 124 + functions_func_r.html | 133 + functions_func_s.html | 139 + functions_func_t.html | 124 + functions_func_u.html | 111 + functions_func_v.html | 116 + functions_func_w.html | 105 + functions_func_~.html | 106 + functions_g.html | 182 ++ functions_i.html | 180 ++ functions_k.html | 119 + functions_l.html | 115 + functions_m.html | 110 + functions_n.html | 108 + functions_o.html | 200 ++ functions_p.html | 127 + functions_r.html | 133 + functions_s.html | 142 + functions_t.html | 124 + functions_u.html | 111 + functions_v.html | 117 + functions_vars.html | 137 + functions_w.html | 105 + functions_~.html | 106 + ...dom__parser__implementation_8h_source.html | 194 ++ generic_2numberparsing_8h_source.html | 1359 ++++++++++ generic_2ondemand_2array-inl_8h_source.html | 336 +++ generic_2ondemand_2array_8h_source.html | 192 ++ ...ric_2ondemand_2document-inl_8h_source.html | 909 +++++++ generic_2ondemand_2document_8h_source.html | 494 ++++ ...emand_2document__stream-inl_8h_source.html | 493 ++++ ...2ondemand_2document__stream_8h_source.html | 276 ++ generic_2ondemand_2object-inl_8h_source.html | 338 +++ generic_2ondemand_2object_8h_source.html | 197 ++ generic_2ondemand_2parser-inl_8h_source.html | 263 ++ generic_2ondemand_2parser_8h_source.html | 217 ++ ...ondemand_2serialization-inl_8h_source.html | 333 +++ ...ic_2ondemand_2serialization_8h_source.html | 149 + group__array.html | 287 ++ group__array.js | 9 + group__object.html | 409 +++ group__object.js | 13 + group__scalar.html | 211 ++ haswell_2begin_8h_source.html | 105 + haswell_2bitmanipulation_8h_source.html | 163 ++ haswell_2bitmask_8h_source.html | 129 + haswell_2end_8h_source.html | 105 + haswell_2implementation_8h_source.html | 139 + haswell_2intrinsics_8h_source.html | 136 + haswell_2numberparsing_8h_source.html | 138 + haswell_2simd_8h_source.html | 472 ++++ haswell_2stringparsing_8h_source.html | 151 ++ haswell_8h_source.html | 149 + hierarchy.html | 180 ++ hierarchy.js | 101 + icelake_2begin_8h_source.html | 105 + icelake_2bitmanipulation_8h_source.html | 163 ++ icelake_2bitmask_8h_source.html | 129 + icelake_2end_8h_source.html | 105 + icelake_2implementation_8h_source.html | 139 + icelake_2intrinsics_8h_source.html | 144 + icelake_2numberparsing_8h_source.html | 138 + icelake_2simd_8h_source.html | 475 ++++ icelake_2stringparsing_8h_source.html | 151 ++ icelake_8h_source.html | 149 + implementation-base_8h.html | 112 + implementation-base_8h_source.html | 119 + implementation_8h_source.html | 227 ++ ..._simdjson__result__base-inl_8h_source.html | 195 ++ ...ion__simdjson__result__base_8h_source.html | 163 ++ implementations_8h_source.html | 216 ++ index.html | 109 + ...dom__parser__implementation_8h_source.html | 207 ++ isadetection_8h_source.html | 334 +++ jquery.js | 35 + json__iterator-inl_8h_source.html | 498 ++++ json__iterator_8h_source.html | 234 ++ json__type-inl_8h_source.html | 247 ++ json__type_8h_source.html | 211 ++ jsoncharutils_8h_source.html | 220 ++ jsoncharutils__tables_8h_source.html | 130 + jsonformatutils_8h_source.html | 170 ++ jsonioutil_8h_source.html | 125 + jsonparser_8h_source.html | 223 ++ logger-inl_8h_source.html | 276 ++ logger_8h_source.html | 145 + logotiny.png | Bin 0 -> 4291 bytes md_doc_basics.html | 1142 ++++++++ md_doc_dom.html | 575 ++++ md_doc_implementation_selection.html | 170 ++ md_doc_iterate_many.html | 222 ++ md_doc_ondemand_design.html | 597 ++++ md_doc_parse_many.html | 223 ++ md_doc_performance.html | 206 ++ md_doc_tape.html | 245 ++ menu.js | 51 + menudata.js | 117 + minify_8h_source.html | 124 + modules.html | 109 + modules.js | 6 + namespacemembers.html | 328 +++ namespacemembers_enum.html | 112 + namespacemembers_eval.html | 248 ++ namespacemembers_func.html | 134 + namespacemembers_type.html | 109 + namespacemembers_vars.html | 109 + namespaces.html | 162 ++ namespaces_dup.js | 7 + namespacesimdjson.html | 1224 +++++++++ namespacesimdjson.js | 145 + ...m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html | 670 +++++ ...i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.js | 66 + nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes navtree.css | 146 + navtree.js | 546 ++++ navtreedata.js | 194 ++ navtreeindex0.js | 253 ++ navtreeindex1.js | 253 ++ navtreeindex2.js | 253 ++ navtreeindex3.js | 253 ++ navtreeindex4.js | 253 ++ navtreeindex5.js | 134 + numberparsing__tables_8h_source.html | 133 + object__iterator-inl_8h_source.html | 234 ++ object__iterator_8h_source.html | 177 ++ ondemand-inl_8h_source.html | 119 + ondemand_8h_source.html | 132 + open.png | Bin 0 -> 123 bytes padded__string-inl_8h_source.html | 290 ++ padded__string_8h_source.html | 192 ++ padded__string__view-inl_8h_source.html | 148 + padded__string__view_8h_source.html | 151 ++ pages.html | 115 + parsedjson_8h_source.html | 119 + parsedjson__iterator-inl_8h_source.html | 593 ++++ parsedjson__iterator_8h_source.html | 375 +++ portability_8h_source.html | 275 ++ ppc64_2begin_8h_source.html | 104 + ppc64_2bitmanipulation_8h_source.html | 174 ++ ppc64_2bitmask_8h_source.html | 146 + ppc64_2end_8h_source.html | 104 + ppc64_2implementation_8h_source.html | 142 + ppc64_2intrinsics_8h_source.html | 125 + ppc64_2numberparsing_8h_source.html | 144 + ppc64_2simd_8h_source.html | 577 ++++ ppc64_2stringparsing_8h_source.html | 168 ++ ppc64_8h_source.html | 136 + raw__json__string-inl_8h_source.html | 300 ++ raw__json__string_8h_source.html | 191 ++ resize.js | 140 + search/all_0.html | 37 + search/all_0.js | 16 + search/all_1.html | 37 + search/all_1.js | 7 + search/all_10.html | 37 + search/all_10.js | 11 + search/all_11.html | 37 + search/all_11.js | 58 + search/all_12.html | 37 + search/all_12.js | 16 + search/all_13.html | 37 + search/all_13.js | 13 + search/all_14.html | 37 + search/all_14.js | 6 + search/all_15.html | 37 + search/all_15.js | 4 + search/all_16.html | 37 + search/all_16.js | 4 + search/all_2.html | 37 + search/all_2.js | 12 + search/all_3.html | 37 + search/all_3.js | 15 + search/all_4.html | 37 + search/all_4.js | 10 + search/all_5.html | 37 + search/all_5.js | 12 + search/all_6.html | 37 + search/all_6.js | 22 + search/all_7.html | 37 + search/all_7.js | 5 + search/all_8.html | 37 + search/all_8.js | 50 + search/all_9.html | 37 + search/all_9.js | 4 + search/all_a.html | 37 + search/all_a.js | 9 + search/all_b.html | 37 + search/all_b.js | 7 + search/all_c.html | 37 + search/all_c.js | 7 + search/all_d.html | 37 + search/all_d.js | 12 + search/all_e.html | 37 + search/all_e.js | 29 + search/all_f.html | 37 + search/all_f.js | 14 + search/classes_0.html | 37 + search/classes_0.js | 5 + search/classes_1.html | 37 + search/classes_1.js | 7 + search/classes_2.html | 37 + search/classes_2.js | 4 + search/classes_3.html | 37 + search/classes_3.js | 4 + search/classes_4.html | 37 + search/classes_4.js | 21 + search/classes_5.html | 37 + search/classes_5.js | 4 + search/classes_6.html | 37 + search/classes_6.js | 4 + search/classes_7.html | 37 + search/classes_7.js | 6 + search/classes_8.html | 37 + search/classes_8.js | 6 + search/classes_9.html | 37 + search/classes_9.js | 4 + search/classes_a.html | 37 + search/classes_a.js | 24 + search/classes_b.html | 37 + search/classes_b.js | 4 + search/close.svg | 31 + search/enums_0.html | 37 + search/enums_0.js | 4 + search/enums_1.html | 37 + search/enums_1.js | 4 + search/enums_2.html | 37 + search/enums_2.js | 4 + search/enums_3.html | 37 + search/enums_3.js | 4 + search/enumvalues_0.html | 37 + search/enumvalues_0.js | 4 + search/enumvalues_1.html | 37 + search/enumvalues_1.js | 4 + search/enumvalues_2.html | 37 + search/enumvalues_2.js | 4 + search/enumvalues_3.html | 37 + search/enumvalues_3.js | 4 + search/enumvalues_4.html | 37 + search/enumvalues_4.js | 4 + search/enumvalues_5.html | 37 + search/enumvalues_5.js | 4 + search/enumvalues_6.html | 37 + search/enumvalues_6.js | 10 + search/enumvalues_7.html | 37 + search/enumvalues_7.js | 4 + search/enumvalues_8.html | 37 + search/enumvalues_8.js | 9 + search/enumvalues_9.html | 37 + search/enumvalues_9.js | 6 + search/enumvalues_a.html | 37 + search/enumvalues_a.js | 4 + search/enumvalues_b.html | 37 + search/enumvalues_b.js | 11 + search/enumvalues_c.html | 37 + search/enumvalues_c.js | 6 + search/enumvalues_d.html | 37 + search/enumvalues_d.js | 10 + search/files_0.html | 37 + search/files_0.js | 4 + search/files_1.html | 37 + search/files_1.js | 4 + search/functions_0.html | 37 + search/functions_0.js | 14 + search/functions_1.html | 37 + search/functions_1.js | 5 + search/functions_10.html | 37 + search/functions_10.js | 22 + search/functions_11.html | 37 + search/functions_11.js | 10 + search/functions_12.html | 37 + search/functions_12.js | 6 + search/functions_13.html | 37 + search/functions_13.js | 6 + search/functions_14.html | 37 + search/functions_14.js | 4 + search/functions_15.html | 37 + search/functions_15.js | 4 + search/functions_2.html | 37 + search/functions_2.js | 10 + search/functions_3.html | 37 + search/functions_3.js | 7 + search/functions_4.html | 37 + search/functions_4.js | 7 + search/functions_5.html | 37 + search/functions_5.js | 10 + search/functions_6.html | 37 + search/functions_6.js | 22 + search/functions_7.html | 37 + search/functions_7.js | 5 + search/functions_8.html | 37 + search/functions_8.js | 25 + search/functions_9.html | 37 + search/functions_9.js | 8 + search/functions_a.html | 37 + search/functions_a.js | 6 + search/functions_b.html | 37 + search/functions_b.js | 6 + search/functions_c.html | 37 + search/functions_c.js | 5 + search/functions_d.html | 37 + search/functions_d.js | 24 + search/functions_e.html | 37 + search/functions_e.js | 10 + search/functions_f.html | 37 + search/functions_f.js | 11 + search/groups_0.html | 37 + search/groups_0.js | 4 + search/groups_1.html | 37 + search/groups_1.js | 4 + search/groups_2.html | 37 + search/groups_2.js | 4 + search/mag_sel.svg | 74 + search/namespaces_0.html | 37 + search/namespaces_0.js | 5 + search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/pages_1.html | 37 + search/pages_1.js | 4 + search/pages_2.html | 37 + search/pages_2.js | 4 + search/pages_3.html | 37 + search/pages_3.js | 4 + search/pages_4.html | 37 + search/pages_4.js | 5 + search/pages_5.html | 37 + search/pages_5.js | 6 + search/search.css | 257 ++ search/search.js | 816 ++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 45 + search/typedefs_0.html | 37 + search/typedefs_0.js | 4 + search/typedefs_1.html | 37 + search/typedefs_1.js | 4 + search/typedefs_2.html | 37 + search/typedefs_2.js | 4 + search/variables_0.html | 37 + search/variables_0.js | 4 + search/variables_1.html | 37 + search/variables_1.js | 6 + search/variables_2.html | 37 + search/variables_2.js | 4 + search/variables_3.html | 37 + search/variables_3.js | 5 + search/variables_4.html | 37 + search/variables_4.js | 4 + search/variables_5.html | 37 + search/variables_5.js | 4 + search/variables_6.html | 37 + search/variables_6.js | 4 + search/variables_7.html | 37 + search/variables_7.js | 4 + search/variables_8.html | 37 + search/variables_8.js | 6 + search/variables_9.html | 37 + search/variables_9.js | 4 + simdjson_8h.html | 109 + simdjson_8h_source.html | 111 + simdjson__version_8h_source.html | 123 + simdprune__tables_8h_source.html | 123 + splitbar.png | Bin 0 -> 314 bytes string__view_8hpp_source.html | 1743 ++++++++++++ ...ation__simdjson__result__base-members.html | 121 + ...mplementation__simdjson__result__base.html | 510 ++++ ...1implementation__simdjson__result__base.js | 19 + ...t_i_o_n_1_1ondemand_1_1number-members.html | 128 + ...e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html | 280 ++ ...m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.js | 27 + ..._a_t_i_o_n_1_1open__container-members.html | 107 + ..._m_e_n_t_a_t_i_o_n_1_1open__container.html | 122 + ..._e_m_e_n_t_a_t_i_o_n_1_1open__container.js | 5 + structsimdjson_1_1padded__string-members.html | 122 + structsimdjson_1_1padded__string.html | 507 ++++ structsimdjson_1_1padded__string.js | 19 + ...ctsimdjson_1_1simdjson__error-members.html | 108 + structsimdjson_1_1simdjson__error.html | 174 ++ structsimdjson_1_1simdjson__error.js | 6 + structsimdjson_1_1simdjson__error.png | Bin 0 -> 584 bytes ...tsimdjson_1_1simdjson__result-members.html | 114 + structsimdjson_1_1simdjson__result.html | 452 ++++ structsimdjson_1_1simdjson__result.js | 12 + structsimdjson_1_1simdjson__result.png | Bin 0 -> 1210 bytes ...deman0b124547aa99491b95d3b709cc8ba113.html | 124 + ...deman18ec6e334ea49309508401878c544161.html | 126 + ...deman5f311c30a735cab74da62d82024b9198.html | 126 + ...deman663397d8034fdf0054210fe0a2553fd5.html | 122 + ...deman73f6105c02baf0bea5c887e614f5b224.html | 167 ++ ...deman8d5f87b59eed7747952fa5b22ffa7abe.html | 122 + ...demanc727a1699918daa2a31e62be31f36420.html | 122 + ...o_n_1_1ondemand_1_1array_01_4-members.html | 129 + ...t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html | 207 ++ ...n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.js | 11 + ..._t_a_t_i_o_n_1_1ondemand_1_1array_01_4.png | Bin 0 -> 1896 bytes ...n_1_1ondemand_1_1array__iterator_01_4.html | 198 ++ ...o_n_1_1ondemand_1_1array__iterator_01_4.js | 8 + ..._n_1_1ondemand_1_1array__iterator_01_4.png | Bin 0 -> 2074 bytes ..._1_1ondemand_1_1document_01_4-members.html | 177 ++ ..._t_i_o_n_1_1ondemand_1_1document_01_4.html | 397 +++ ..._a_t_i_o_n_1_1ondemand_1_1document_01_4.js | 60 + ...a_t_i_o_n_1_1ondemand_1_1document_01_4.png | Bin 0 -> 1914 bytes ...1ondemand_1_1document__reference_01_4.html | 352 +++ ...1_1ondemand_1_1document__reference_01_4.js | 49 + ..._1ondemand_1_1document__reference_01_4.png | Bin 0 -> 2125 bytes ..._1_1ondemand_1_1document__stream_01_4.html | 182 ++ ..._n_1_1ondemand_1_1document__stream_01_4.js | 4 + ...n_1_1ondemand_1_1document__stream_01_4.png | Bin 0 -> 2088 bytes ...o_n_1_1ondemand_1_1field_01_4-members.html | 125 + ...t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html | 195 ++ ...n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.js | 7 + ..._t_a_t_i_o_n_1_1ondemand_1_1field_01_4.png | Bin 0 -> 1863 bytes ..._n_1_1ondemand_1_1json__iterator_01_4.html | 182 ++ ..._o_n_1_1ondemand_1_1json__iterator_01_4.js | 4 + ...o_n_1_1ondemand_1_1json__iterator_01_4.png | Bin 0 -> 2050 bytes ..._1ondemand_1_1json__type_01_4-members.html | 122 + ..._i_o_n_1_1ondemand_1_1json__type_01_4.html | 182 ++ ..._t_i_o_n_1_1ondemand_1_1json__type_01_4.js | 4 + ...t_i_o_n_1_1ondemand_1_1json__type_01_4.png | Bin 0 -> 1965 bytes ..._n_1_1ondemand_1_1object_01_4-members.html | 134 + ..._a_t_i_o_n_1_1ondemand_1_1object_01_4.html | 222 ++ ..._t_a_t_i_o_n_1_1ondemand_1_1object_01_4.js | 16 + ...t_a_t_i_o_n_1_1ondemand_1_1object_01_4.png | Bin 0 -> 1891 bytes ..._1_1ondemand_1_1object__iterator_01_4.html | 198 ++ ..._n_1_1ondemand_1_1object__iterator_01_4.js | 8 + ...n_1_1ondemand_1_1object__iterator_01_4.png | Bin 0 -> 2084 bytes ..._n_1_1ondemand_1_1parser_01_4-members.html | 122 + ..._a_t_i_o_n_1_1ondemand_1_1parser_01_4.html | 182 ++ ..._t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.js | 4 + ...t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.png | Bin 0 -> 1892 bytes ...1_1ondemand_1_1raw__json__string_01_4.html | 192 ++ ...n_1_1ondemand_1_1raw__json__string_01_4.js | 6 + ..._1_1ondemand_1_1raw__json__string_01_4.png | Bin 0 -> 2107 bytes ...n_1_1ondemand_1_1token__iterator_01_4.html | 182 ++ ...o_n_1_1ondemand_1_1token__iterator_01_4.js | 4 + ..._n_1_1ondemand_1_1token__iterator_01_4.png | Bin 0 -> 2054 bytes ...o_n_1_1ondemand_1_1value_01_4-members.html | 167 ++ ...t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html | 533 ++++ ...n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.js | 49 + ..._t_a_t_i_o_n_1_1ondemand_1_1value_01_4.png | Bin 0 -> 1879 bytes ...n_1_1ondemand_1_1value__iterator_01_4.html | 182 ++ ...o_n_1_1ondemand_1_1value__iterator_01_4.js | 4 + ..._n_1_1ondemand_1_1value__iterator_01_4.png | Bin 0 -> 2067 bytes ...demane3bc1d6e1f7ab3457d0e05e7c958ddde.html | 122 + ..._result_3_01dom_1_1array_01_4-members.html | 110 + ...imdjson__result_3_01dom_1_1array_01_4.html | 142 + ...1simdjson__result_3_01dom_1_1array_01_4.js | 8 + ...simdjson__result_3_01dom_1_1array_01_4.png | Bin 0 -> 1498 bytes ...1dom_1_1document__stream_01_4-members.html | 107 + ...sult_3_01dom_1_1document__stream_01_4.html | 129 + ...result_3_01dom_1_1document__stream_01_4.js | 5 + ...esult_3_01dom_1_1document__stream_01_4.png | Bin 0 -> 1734 bytes ...esult_3_01dom_1_1element_01_4-members.html | 144 + ...djson__result_3_01dom_1_1element_01_4.html | 247 ++ ...imdjson__result_3_01dom_1_1element_01_4.js | 42 + ...mdjson__result_3_01dom_1_1element_01_4.png | Bin 0 -> 1527 bytes ...result_3_01dom_1_1object_01_4-members.html | 113 + ...mdjson__result_3_01dom_1_1object_01_4.html | 151 ++ ...simdjson__result_3_01dom_1_1object_01_4.js | 11 + ...imdjson__result_3_01dom_1_1object_01_4.png | Bin 0 -> 1510 bytes sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + tape__ref-inl_8h_source.html | 216 ++ tape__ref_8h_source.html | 152 ++ tape__type_8h_source.html | 129 + token__iterator-inl_8h_source.html | 183 ++ token__iterator_8h_source.html | 176 ++ token__position_8h_source.html | 113 + value-inl_8h_source.html | 570 ++++ value_8h_source.html | 347 +++ value__iterator-inl_8h_source.html | 1115 ++++++++ value__iterator_8h_source.html | 296 ++ westmere_2begin_8h_source.html | 105 + westmere_2bitmanipulation_8h_source.html | 174 ++ westmere_2bitmask_8h_source.html | 129 + westmere_2end_8h_source.html | 105 + westmere_2implementation_8h_source.html | 138 + westmere_2intrinsics_8h_source.html | 123 + westmere_2numberparsing_8h_source.html | 138 + westmere_2simd_8h_source.html | 443 +++ westmere_2stringparsing_8h_source.html | 149 + westmere_8h_source.html | 149 + 678 files changed, 90843 insertions(+) create mode 100644 .nojekyll create mode 100644 annotated.html create mode 100644 annotated_dup.js create mode 100644 arm64_2begin_8h_source.html create mode 100644 arm64_2bitmanipulation_8h_source.html create mode 100644 arm64_2bitmask_8h_source.html create mode 100644 arm64_2end_8h_source.html create mode 100644 arm64_2implementation_8h_source.html create mode 100644 arm64_2intrinsics_8h_source.html create mode 100644 arm64_2numberparsing_8h_source.html create mode 100644 arm64_2simd_8h_source.html create mode 100644 arm64_2stringparsing_8h_source.html create mode 100644 arm64_8h_source.html create mode 100644 array__iterator-inl_8h_source.html create mode 100644 array__iterator_8h_source.html create mode 100644 atomparsing_8h_source.html create mode 100644 base_8h_source.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 builtin_8h_source.html create mode 100644 classes.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.png create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.png create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.js create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value-members.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html create mode 100644 classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.js create mode 100644 classsimdjson_1_1dom_1_1array-members.html create mode 100644 classsimdjson_1_1dom_1_1array.html create mode 100644 classsimdjson_1_1dom_1_1array.js create mode 100644 classsimdjson_1_1dom_1_1array_1_1iterator-members.html create mode 100644 classsimdjson_1_1dom_1_1array_1_1iterator.html create mode 100644 classsimdjson_1_1dom_1_1array_1_1iterator.js create mode 100644 classsimdjson_1_1dom_1_1document-members.html create mode 100644 classsimdjson_1_1dom_1_1document.html create mode 100644 classsimdjson_1_1dom_1_1document.js create mode 100644 classsimdjson_1_1dom_1_1document__stream-members.html create mode 100644 classsimdjson_1_1dom_1_1document__stream.html create mode 100644 classsimdjson_1_1dom_1_1document__stream.js create mode 100644 classsimdjson_1_1dom_1_1document__stream_1_1iterator-members.html create mode 100644 classsimdjson_1_1dom_1_1document__stream_1_1iterator.html create mode 100644 classsimdjson_1_1dom_1_1document__stream_1_1iterator.js create mode 100644 classsimdjson_1_1dom_1_1element-members.html create mode 100644 classsimdjson_1_1dom_1_1element.html create mode 100644 classsimdjson_1_1dom_1_1element.js create mode 100644 classsimdjson_1_1dom_1_1key__value__pair-members.html create mode 100644 classsimdjson_1_1dom_1_1key__value__pair.html create mode 100644 classsimdjson_1_1dom_1_1key__value__pair.js create mode 100644 classsimdjson_1_1dom_1_1object-members.html create mode 100644 classsimdjson_1_1dom_1_1object.html create mode 100644 classsimdjson_1_1dom_1_1object.js create mode 100644 classsimdjson_1_1dom_1_1object_1_1iterator-members.html create mode 100644 classsimdjson_1_1dom_1_1object_1_1iterator.html create mode 100644 classsimdjson_1_1dom_1_1object_1_1iterator.js create mode 100644 classsimdjson_1_1dom_1_1parser-members.html create mode 100644 classsimdjson_1_1dom_1_1parser.html create mode 100644 classsimdjson_1_1dom_1_1parser.js create mode 100644 classsimdjson_1_1implementation-members.html create mode 100644 classsimdjson_1_1implementation.html create mode 100644 classsimdjson_1_1implementation.js create mode 100644 classsimdjson_1_1padded__string__view-members.html create mode 100644 classsimdjson_1_1padded__string__view.html create mode 100644 classsimdjson_1_1padded__string__view.js create mode 100644 classsimdjson_1_1padded__string__view.png create mode 100644 closed.png create mode 100644 common__defs_8h_source.html create mode 100644 compiler__check_8h_source.html create mode 100644 deprecated.html create mode 100644 dir_0d145e48adcb2584d6aad0aa1d711d9e.html create mode 100644 dir_0d145e48adcb2584d6aad0aa1d711d9e.js create mode 100644 dir_0fee190c3bc9a7d22e6d44901a62fa54.html create mode 100644 dir_0fee190c3bc9a7d22e6d44901a62fa54.js create mode 100644 dir_438095d7beafc60159803dc5832a82bd.html create mode 100644 dir_438095d7beafc60159803dc5832a82bd.js create mode 100644 dir_49a0b2767ded4a45005c5d6720a18cd1.html create mode 100644 dir_49a0b2767ded4a45005c5d6720a18cd1.js create mode 100644 dir_53368a02099cf3699f2996a5d88d70b6.html create mode 100644 dir_53368a02099cf3699f2996a5d88d70b6.js create mode 100644 dir_76d8247d4498211a7d04a3794a38eb71.html create mode 100644 dir_76d8247d4498211a7d04a3794a38eb71.js create mode 100644 dir_7796bb4b727f918c96faee1bdd50e49a.html create mode 100644 dir_7796bb4b727f918c96faee1bdd50e49a.js create mode 100644 dir_9b01d0736ef91c92ca1a5074971144b1.html create mode 100644 dir_9b01d0736ef91c92ca1a5074971144b1.js create mode 100644 dir_aff943445258981e0d80c1f13c0bf97f.html create mode 100644 dir_aff943445258981e0d80c1f13c0bf97f.js create mode 100644 dir_b35ffb90479583e132afc246e9b6e77a.html create mode 100644 dir_b35ffb90479583e132afc246e9b6e77a.js create mode 100644 dir_ba336e6e255a3bf0b1427b51513cdc60.html create mode 100644 dir_ba336e6e255a3bf0b1427b51513cdc60.js create mode 100644 dir_bdd5d78d80e110a51a7313218161f5b4.html create mode 100644 dir_bdd5d78d80e110a51a7313218161f5b4.js create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.js create mode 100644 dir_e68e8157741866f444e17edd764ebbae.html create mode 100644 doc.png create mode 100644 dom_2array-inl_8h_source.html create mode 100644 dom_2array_8h_source.html create mode 100644 dom_2document-inl_8h_source.html create mode 100644 dom_2document_8h_source.html create mode 100644 dom_2document__stream-inl_8h_source.html create mode 100644 dom_2document__stream_8h_source.html create mode 100644 dom_2object-inl_8h_source.html create mode 100644 dom_2object_8h_source.html create mode 100644 dom_2parser-inl_8h_source.html create mode 100644 dom_2parser_8h_source.html create mode 100644 dom_2serialization-inl_8h_source.html create mode 100644 dom_2serialization_8h_source.html create mode 100644 dom_8h_source.html create mode 100644 doxygen-awesome-darkmode-toggle.js create mode 100644 doxygen-awesome-sidebar-only.css create mode 100644 doxygen-awesome.css create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 element-inl_8h_source.html create mode 100644 element_8h_source.html create mode 100644 error-inl_8h_source.html create mode 100644 error_8h_source.html create mode 100644 fallback_2begin_8h_source.html create mode 100644 fallback_2bitmanipulation_8h_source.html create mode 100644 fallback_2end_8h_source.html create mode 100644 fallback_2implementation_8h_source.html create mode 100644 fallback_2numberparsing_8h_source.html create mode 100644 fallback_2stringparsing_8h_source.html create mode 100644 fallback_8h_source.html create mode 100644 field-inl_8h_source.html create mode 100644 field_8h_source.html create mode 100644 files.html create mode 100644 files_dup.js create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 functions.html create mode 100644 functions_b.html create mode 100644 functions_c.html create mode 100644 functions_d.html create mode 100644 functions_dup.js create mode 100644 functions_e.html create mode 100644 functions_f.html create mode 100644 functions_func.html create mode 100644 functions_func.js create mode 100644 functions_func_b.html create mode 100644 functions_func_c.html create mode 100644 functions_func_d.html create mode 100644 functions_func_e.html create mode 100644 functions_func_f.html create mode 100644 functions_func_g.html create mode 100644 functions_func_i.html create mode 100644 functions_func_k.html create mode 100644 functions_func_l.html create mode 100644 functions_func_m.html create mode 100644 functions_func_n.html create mode 100644 functions_func_o.html create mode 100644 functions_func_p.html create mode 100644 functions_func_r.html create mode 100644 functions_func_s.html create mode 100644 functions_func_t.html create mode 100644 functions_func_u.html create mode 100644 functions_func_v.html create mode 100644 functions_func_w.html create mode 100644 functions_func_~.html create mode 100644 functions_g.html create mode 100644 functions_i.html create mode 100644 functions_k.html create mode 100644 functions_l.html create mode 100644 functions_m.html create mode 100644 functions_n.html create mode 100644 functions_o.html create mode 100644 functions_p.html create mode 100644 functions_r.html create mode 100644 functions_s.html create mode 100644 functions_t.html create mode 100644 functions_u.html create mode 100644 functions_v.html create mode 100644 functions_vars.html create mode 100644 functions_w.html create mode 100644 functions_~.html create mode 100644 generic_2dom__parser__implementation_8h_source.html create mode 100644 generic_2numberparsing_8h_source.html create mode 100644 generic_2ondemand_2array-inl_8h_source.html create mode 100644 generic_2ondemand_2array_8h_source.html create mode 100644 generic_2ondemand_2document-inl_8h_source.html create mode 100644 generic_2ondemand_2document_8h_source.html create mode 100644 generic_2ondemand_2document__stream-inl_8h_source.html create mode 100644 generic_2ondemand_2document__stream_8h_source.html create mode 100644 generic_2ondemand_2object-inl_8h_source.html create mode 100644 generic_2ondemand_2object_8h_source.html create mode 100644 generic_2ondemand_2parser-inl_8h_source.html create mode 100644 generic_2ondemand_2parser_8h_source.html create mode 100644 generic_2ondemand_2serialization-inl_8h_source.html create mode 100644 generic_2ondemand_2serialization_8h_source.html create mode 100644 group__array.html create mode 100644 group__array.js create mode 100644 group__object.html create mode 100644 group__object.js create mode 100644 group__scalar.html create mode 100644 haswell_2begin_8h_source.html create mode 100644 haswell_2bitmanipulation_8h_source.html create mode 100644 haswell_2bitmask_8h_source.html create mode 100644 haswell_2end_8h_source.html create mode 100644 haswell_2implementation_8h_source.html create mode 100644 haswell_2intrinsics_8h_source.html create mode 100644 haswell_2numberparsing_8h_source.html create mode 100644 haswell_2simd_8h_source.html create mode 100644 haswell_2stringparsing_8h_source.html create mode 100644 haswell_8h_source.html create mode 100644 hierarchy.html create mode 100644 hierarchy.js create mode 100644 icelake_2begin_8h_source.html create mode 100644 icelake_2bitmanipulation_8h_source.html create mode 100644 icelake_2bitmask_8h_source.html create mode 100644 icelake_2end_8h_source.html create mode 100644 icelake_2implementation_8h_source.html create mode 100644 icelake_2intrinsics_8h_source.html create mode 100644 icelake_2numberparsing_8h_source.html create mode 100644 icelake_2simd_8h_source.html create mode 100644 icelake_2stringparsing_8h_source.html create mode 100644 icelake_8h_source.html create mode 100644 implementation-base_8h.html create mode 100644 implementation-base_8h_source.html create mode 100644 implementation_8h_source.html create mode 100644 implementation__simdjson__result__base-inl_8h_source.html create mode 100644 implementation__simdjson__result__base_8h_source.html create mode 100644 implementations_8h_source.html create mode 100644 index.html create mode 100644 internal_2dom__parser__implementation_8h_source.html create mode 100644 isadetection_8h_source.html create mode 100644 jquery.js create mode 100644 json__iterator-inl_8h_source.html create mode 100644 json__iterator_8h_source.html create mode 100644 json__type-inl_8h_source.html create mode 100644 json__type_8h_source.html create mode 100644 jsoncharutils_8h_source.html create mode 100644 jsoncharutils__tables_8h_source.html create mode 100644 jsonformatutils_8h_source.html create mode 100644 jsonioutil_8h_source.html create mode 100644 jsonparser_8h_source.html create mode 100644 logger-inl_8h_source.html create mode 100644 logger_8h_source.html create mode 100644 logotiny.png create mode 100644 md_doc_basics.html create mode 100644 md_doc_dom.html create mode 100644 md_doc_implementation_selection.html create mode 100644 md_doc_iterate_many.html create mode 100644 md_doc_ondemand_design.html create mode 100644 md_doc_parse_many.html create mode 100644 md_doc_performance.html create mode 100644 md_doc_tape.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 minify_8h_source.html create mode 100644 modules.html create mode 100644 modules.js create mode 100644 namespacemembers.html create mode 100644 namespacemembers_enum.html create mode 100644 namespacemembers_eval.html create mode 100644 namespacemembers_func.html create mode 100644 namespacemembers_type.html create mode 100644 namespacemembers_vars.html create mode 100644 namespaces.html create mode 100644 namespaces_dup.js create mode 100644 namespacesimdjson.html create mode 100644 namespacesimdjson.js create mode 100644 namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html create mode 100644 namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.js create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 navtree.css create mode 100644 navtree.js create mode 100644 navtreedata.js create mode 100644 navtreeindex0.js create mode 100644 navtreeindex1.js create mode 100644 navtreeindex2.js create mode 100644 navtreeindex3.js create mode 100644 navtreeindex4.js create mode 100644 navtreeindex5.js create mode 100644 numberparsing__tables_8h_source.html create mode 100644 object__iterator-inl_8h_source.html create mode 100644 object__iterator_8h_source.html create mode 100644 ondemand-inl_8h_source.html create mode 100644 ondemand_8h_source.html create mode 100644 open.png create mode 100644 padded__string-inl_8h_source.html create mode 100644 padded__string_8h_source.html create mode 100644 padded__string__view-inl_8h_source.html create mode 100644 padded__string__view_8h_source.html create mode 100644 pages.html create mode 100644 parsedjson_8h_source.html create mode 100644 parsedjson__iterator-inl_8h_source.html create mode 100644 parsedjson__iterator_8h_source.html create mode 100644 portability_8h_source.html create mode 100644 ppc64_2begin_8h_source.html create mode 100644 ppc64_2bitmanipulation_8h_source.html create mode 100644 ppc64_2bitmask_8h_source.html create mode 100644 ppc64_2end_8h_source.html create mode 100644 ppc64_2implementation_8h_source.html create mode 100644 ppc64_2intrinsics_8h_source.html create mode 100644 ppc64_2numberparsing_8h_source.html create mode 100644 ppc64_2simd_8h_source.html create mode 100644 ppc64_2stringparsing_8h_source.html create mode 100644 ppc64_8h_source.html create mode 100644 raw__json__string-inl_8h_source.html create mode 100644 raw__json__string_8h_source.html create mode 100644 resize.js create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_10.html create mode 100644 search/all_10.js create mode 100644 search/all_11.html create mode 100644 search/all_11.js create mode 100644 search/all_12.html create mode 100644 search/all_12.js create mode 100644 search/all_13.html create mode 100644 search/all_13.js create mode 100644 search/all_14.html create mode 100644 search/all_14.js create mode 100644 search/all_15.html create mode 100644 search/all_15.js create mode 100644 search/all_16.html create mode 100644 search/all_16.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/classes_4.html create mode 100644 search/classes_4.js create mode 100644 search/classes_5.html create mode 100644 search/classes_5.js create mode 100644 search/classes_6.html create mode 100644 search/classes_6.js create mode 100644 search/classes_7.html create mode 100644 search/classes_7.js create mode 100644 search/classes_8.html create mode 100644 search/classes_8.js create mode 100644 search/classes_9.html create mode 100644 search/classes_9.js create mode 100644 search/classes_a.html create mode 100644 search/classes_a.js create mode 100644 search/classes_b.html create mode 100644 search/classes_b.js create mode 100644 search/close.svg create mode 100644 search/enums_0.html create mode 100644 search/enums_0.js create mode 100644 search/enums_1.html create mode 100644 search/enums_1.js create mode 100644 search/enums_2.html create mode 100644 search/enums_2.js create mode 100644 search/enums_3.html create mode 100644 search/enums_3.js create mode 100644 search/enumvalues_0.html create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.html create mode 100644 search/enumvalues_1.js create mode 100644 search/enumvalues_2.html create mode 100644 search/enumvalues_2.js create mode 100644 search/enumvalues_3.html create mode 100644 search/enumvalues_3.js create mode 100644 search/enumvalues_4.html create mode 100644 search/enumvalues_4.js create mode 100644 search/enumvalues_5.html create mode 100644 search/enumvalues_5.js create mode 100644 search/enumvalues_6.html create mode 100644 search/enumvalues_6.js create mode 100644 search/enumvalues_7.html create mode 100644 search/enumvalues_7.js create mode 100644 search/enumvalues_8.html create mode 100644 search/enumvalues_8.js create mode 100644 search/enumvalues_9.html create mode 100644 search/enumvalues_9.js create mode 100644 search/enumvalues_a.html create mode 100644 search/enumvalues_a.js create mode 100644 search/enumvalues_b.html create mode 100644 search/enumvalues_b.js create mode 100644 search/enumvalues_c.html create mode 100644 search/enumvalues_c.js create mode 100644 search/enumvalues_d.html create mode 100644 search/enumvalues_d.js create mode 100644 search/files_0.html create mode 100644 search/files_0.js create mode 100644 search/files_1.html create mode 100644 search/files_1.js create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/functions_1.html create mode 100644 search/functions_1.js create mode 100644 search/functions_10.html create mode 100644 search/functions_10.js create mode 100644 search/functions_11.html create mode 100644 search/functions_11.js create mode 100644 search/functions_12.html create mode 100644 search/functions_12.js create mode 100644 search/functions_13.html create mode 100644 search/functions_13.js create mode 100644 search/functions_14.html create mode 100644 search/functions_14.js create mode 100644 search/functions_15.html create mode 100644 search/functions_15.js create mode 100644 search/functions_2.html create mode 100644 search/functions_2.js create mode 100644 search/functions_3.html create mode 100644 search/functions_3.js create mode 100644 search/functions_4.html create mode 100644 search/functions_4.js create mode 100644 search/functions_5.html create mode 100644 search/functions_5.js create mode 100644 search/functions_6.html create mode 100644 search/functions_6.js create mode 100644 search/functions_7.html create mode 100644 search/functions_7.js create mode 100644 search/functions_8.html create mode 100644 search/functions_8.js create mode 100644 search/functions_9.html create mode 100644 search/functions_9.js create mode 100644 search/functions_a.html create mode 100644 search/functions_a.js create mode 100644 search/functions_b.html create mode 100644 search/functions_b.js create mode 100644 search/functions_c.html create mode 100644 search/functions_c.js create mode 100644 search/functions_d.html create mode 100644 search/functions_d.js create mode 100644 search/functions_e.html create mode 100644 search/functions_e.js create mode 100644 search/functions_f.html create mode 100644 search/functions_f.js create mode 100644 search/groups_0.html create mode 100644 search/groups_0.js create mode 100644 search/groups_1.html create mode 100644 search/groups_1.js create mode 100644 search/groups_2.html create mode 100644 search/groups_2.js create mode 100644 search/mag_sel.svg create mode 100644 search/namespaces_0.html create mode 100644 search/namespaces_0.js create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/pages_1.html create mode 100644 search/pages_1.js create mode 100644 search/pages_2.html create mode 100644 search/pages_2.js create mode 100644 search/pages_3.html create mode 100644 search/pages_3.js create mode 100644 search/pages_4.html create mode 100644 search/pages_4.js create mode 100644 search/pages_5.html create mode 100644 search/pages_5.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 search/typedefs_0.html create mode 100644 search/typedefs_0.js create mode 100644 search/typedefs_1.html create mode 100644 search/typedefs_1.js create mode 100644 search/typedefs_2.html create mode 100644 search/typedefs_2.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 search/variables_1.html create mode 100644 search/variables_1.js create mode 100644 search/variables_2.html create mode 100644 search/variables_2.js create mode 100644 search/variables_3.html create mode 100644 search/variables_3.js create mode 100644 search/variables_4.html create mode 100644 search/variables_4.js create mode 100644 search/variables_5.html create mode 100644 search/variables_5.js create mode 100644 search/variables_6.html create mode 100644 search/variables_6.js create mode 100644 search/variables_7.html create mode 100644 search/variables_7.js create mode 100644 search/variables_8.html create mode 100644 search/variables_8.js create mode 100644 search/variables_9.html create mode 100644 search/variables_9.js create mode 100644 simdjson_8h.html create mode 100644 simdjson_8h_source.html create mode 100644 simdjson__version_8h_source.html create mode 100644 simdprune__tables_8h_source.html create mode 100644 splitbar.png create mode 100644 string__view_8hpp_source.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base-members.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.js create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number-members.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.js create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container-members.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html create mode 100644 structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.js create mode 100644 structsimdjson_1_1padded__string-members.html create mode 100644 structsimdjson_1_1padded__string.html create mode 100644 structsimdjson_1_1padded__string.js create mode 100644 structsimdjson_1_1simdjson__error-members.html create mode 100644 structsimdjson_1_1simdjson__error.html create mode 100644 structsimdjson_1_1simdjson__error.js create mode 100644 structsimdjson_1_1simdjson__error.png create mode 100644 structsimdjson_1_1simdjson__result-members.html create mode 100644 structsimdjson_1_1simdjson__result.html create mode 100644 structsimdjson_1_1simdjson__result.js create mode 100644 structsimdjson_1_1simdjson__result.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman0b124547aa99491b95d3b709cc8ba113.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman18ec6e334ea49309508401878c544161.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman5f311c30a735cab74da62d82024b9198.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman663397d8034fdf0054210fe0a2553fd5.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman73f6105c02baf0bea5c887e614f5b224.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman8d5f87b59eed7747952fa5b22ffa7abe.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemanc727a1699918daa2a31e62be31f36420.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemane3bc1d6e1f7ab3457d0e05e7c958ddde.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.png create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4-members.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.js create mode 100644 structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.png create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css create mode 100644 tape__ref-inl_8h_source.html create mode 100644 tape__ref_8h_source.html create mode 100644 tape__type_8h_source.html create mode 100644 token__iterator-inl_8h_source.html create mode 100644 token__iterator_8h_source.html create mode 100644 token__position_8h_source.html create mode 100644 value-inl_8h_source.html create mode 100644 value_8h_source.html create mode 100644 value__iterator-inl_8h_source.html create mode 100644 value__iterator_8h_source.html create mode 100644 westmere_2begin_8h_source.html create mode 100644 westmere_2bitmanipulation_8h_source.html create mode 100644 westmere_2bitmask_8h_source.html create mode 100644 westmere_2end_8h_source.html create mode 100644 westmere_2implementation_8h_source.html create mode 100644 westmere_2intrinsics_8h_source.html create mode 100644 westmere_2numberparsing_8h_source.html create mode 100644 westmere_2simd_8h_source.html create mode 100644 westmere_2stringparsing_8h_source.html create mode 100644 westmere_8h_source.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/annotated.html b/annotated.html new file mode 100644 index 000000000..ffbdfe34e --- /dev/null +++ b/annotated.html @@ -0,0 +1,160 @@ + + + + + + + +simdjson: Class List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NsimdjsonWe want to support argument-dependent lookup (ADL)
 Ndom
 CarrayJSON array
 Citerator
 CdocumentA parsed JSON document
 Cdocument_streamA forward-only stream of documents
 CiteratorAn iterator through a forward-only stream of documents
 CelementA JSON element
 CobjectJSON object
 Citerator
 Ckey_value_pairKey/value pair in an object
 CparserA persistent document parser
 NSIMDJSON_IMPLEMENTATION
 NondemandA fast, simple, DOM-like interface that parses JSON as you use it
 CarrayA forward-only JSON array
 Carray_iteratorA forward-only JSON array
 CdocumentA JSON document
 Cdocument_referenceA document_reference is a thin wrapper around a document reference instance
 Cdocument_streamA forward-only stream of documents
 Citerator
 CfieldA JSON field (key/value pair) in an object
 CnumberA type representing a JSON number
 CobjectA forward-only JSON object field iterator
 Cobject_iterator
 CparserA JSON fragment iterator
 Craw_json_stringA string escaped per JSON rules, terminated with quote (")
 CvalueAn ephemeral JSON value returned during iteration
 Copen_container
 Cdom_parser_implementation
 Cimplementation_simdjson_result_baseThe result of a simdjson operation that could fail
 Csimdjson_result< dom::array >The result of a JSON conversion that may fail
 Csimdjson_result< dom::document_stream >
 Csimdjson_result< dom::element >The result of a JSON navigation that may fail
 Csimdjson_result< dom::object >The result of a JSON conversion that may fail
 Csimdjson_errorException thrown when an exception-supporting simdjson method is called
 Csimdjson_resultThe result of a simdjson operation that could fail
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
 Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
 CimplementationAn implementation of simdjson for a particular CPU architecture
 Cpadded_stringString with extra allocation for ease of use with parser::parse()
 Cpadded_string_viewUser-provided string that promises it has extra padded bytes at the end for use with parser::parse()
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 000000000..eef6140db --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,57 @@ +var annotated_dup = +[ + [ "simdjson", "namespacesimdjson.html", [ + [ "dom", null, [ + [ "array", "classsimdjson_1_1dom_1_1array.html", "classsimdjson_1_1dom_1_1array" ], + [ "document", "classsimdjson_1_1dom_1_1document.html", "classsimdjson_1_1dom_1_1document" ], + [ "document_stream", "classsimdjson_1_1dom_1_1document__stream.html", "classsimdjson_1_1dom_1_1document__stream" ], + [ "element", "classsimdjson_1_1dom_1_1element.html", "classsimdjson_1_1dom_1_1element" ], + [ "object", "classsimdjson_1_1dom_1_1object.html", "classsimdjson_1_1dom_1_1object" ], + [ "key_value_pair", "classsimdjson_1_1dom_1_1key__value__pair.html", "classsimdjson_1_1dom_1_1key__value__pair" ], + [ "parser", "classsimdjson_1_1dom_1_1parser.html", "classsimdjson_1_1dom_1_1parser" ] + ] ], + [ "SIMDJSON_IMPLEMENTATION", null, [ + [ "ondemand", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html", [ + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array" ], + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator" ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document" ], + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference" ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream" ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field" ], + [ "number", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number" ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object" ], + [ "object_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator" ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser" ], + [ "raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string" ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value" ] + ] ], + [ "open_container", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container" ], + [ "dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation" ], + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base" ] + ] ], + [ "simdjson_result< dom::array >", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4" ], + [ "simdjson_result< dom::document_stream >", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4" ], + [ "simdjson_result< dom::element >", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4" ], + [ "simdjson_result< dom::object >", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4" ], + [ "simdjson_error", "structsimdjson_1_1simdjson__error.html", "structsimdjson_1_1simdjson__error" ], + [ "simdjson_result", "structsimdjson_1_1simdjson__result.html", "structsimdjson_1_1simdjson__result" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4" ], + [ "implementation", "classsimdjson_1_1implementation.html", "classsimdjson_1_1implementation" ], + [ "padded_string", "structsimdjson_1_1padded__string.html", "structsimdjson_1_1padded__string" ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html", "classsimdjson_1_1padded__string__view" ] + ] ] +]; \ No newline at end of file diff --git a/arm64_2begin_8h_source.html b/arm64_2begin_8h_source.html new file mode 100644 index 000000000..9be5dd1ff --- /dev/null +++ b/arm64_2begin_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/arm64/begin.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
begin.h
+
+
+
1 #define SIMDJSON_IMPLEMENTATION arm64
+
+
+ + + + diff --git a/arm64_2bitmanipulation_8h_source.html b/arm64_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..966457549 --- /dev/null +++ b/arm64_2bitmanipulation_8h_source.html @@ -0,0 +1,189 @@ + + + + + + + +simdjson: include/simdjson/arm64/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmanipulation.h
+
+
+
1 #ifndef SIMDJSON_ARM64_BITMANIPULATION_H
+
2 #define SIMDJSON_ARM64_BITMANIPULATION_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 // We sometimes call trailing_zero on inputs that are zero,
+
9 // but the algorithms do not end up using the returned value.
+
10 // Sadly, sanitizers are not smart enough to figure it out.
+
11 SIMDJSON_NO_SANITIZE_UNDEFINED
+
12 simdjson_inline int trailing_zeroes(uint64_t input_num) {
+
13 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
14  unsigned long ret;
+
15  // Search the mask data from least significant bit (LSB)
+
16  // to the most significant bit (MSB) for a set bit (1).
+
17  _BitScanForward64(&ret, input_num);
+
18  return (int)ret;
+
19 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
+
20  return __builtin_ctzll(input_num);
+
21 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
+
22 }
+
23 
+
24 /* result might be undefined when input_num is zero */
+
25 simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
+
26  return input_num & (input_num-1);
+
27 }
+
28 
+
29 /* result might be undefined when input_num is zero */
+
30 simdjson_inline int leading_zeroes(uint64_t input_num) {
+
31 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
32  unsigned long leading_zero = 0;
+
33  // Search the mask data from most significant bit (MSB)
+
34  // to least significant bit (LSB) for a set bit (1).
+
35  if (_BitScanReverse64(&leading_zero, input_num))
+
36  return (int)(63 - leading_zero);
+
37  else
+
38  return 64;
+
39 #else
+
40  return __builtin_clzll(input_num);
+
41 #endif// SIMDJSON_REGULAR_VISUAL_STUDIO
+
42 }
+
43 
+
44 /* result might be undefined when input_num is zero */
+
45 simdjson_inline int count_ones(uint64_t input_num) {
+
46  return vaddv_u8(vcnt_u8(vcreate_u8(input_num)));
+
47 }
+
48 
+
49 
+
50 #if defined(__GNUC__) // catches clang and gcc
+
57 /*
+
58  * We use SIMDJSON_PREFER_REVERSE_BITS as a hint that algorithms that
+
59  * work well with bit reversal may use it.
+
60  */
+
61 #define SIMDJSON_PREFER_REVERSE_BITS 1
+
62 
+
63 /* reverse the bits */
+
64 simdjson_inline uint64_t reverse_bits(uint64_t input_num) {
+
65  uint64_t rev_bits;
+
66  __asm("rbit %0, %1" : "=r"(rev_bits) : "r"(input_num));
+
67  return rev_bits;
+
68 }
+
69 
+
76 SIMDJSON_NO_SANITIZE_UNDEFINED
+
77 simdjson_inline uint64_t zero_leading_bit(uint64_t rev_bits, int leading_zeroes) {
+
78  return rev_bits ^ (uint64_t(0x8000000000000000) >> leading_zeroes);
+
79 }
+
80 
+
81 #endif
+
82 
+
83 simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2, uint64_t *result) {
+
84 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
85  *result = value1 + value2;
+
86  return *result < value1;
+
87 #else
+
88  return __builtin_uaddll_overflow(value1, value2,
+
89  reinterpret_cast<unsigned long long *>(result));
+
90 #endif
+
91 }
+
92 
+
93 } // unnamed namespace
+
94 } // namespace SIMDJSON_IMPLEMENTATION
+
95 } // namespace simdjson
+
96 
+
97 #endif // SIMDJSON_ARM64_BITMANIPULATION_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/arm64_2bitmask_8h_source.html b/arm64_2bitmask_8h_source.html new file mode 100644 index 000000000..0e23bfb0c --- /dev/null +++ b/arm64_2bitmask_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +simdjson: include/simdjson/arm64/bitmask.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmask.h
+
+
+
1 #ifndef SIMDJSON_ARM64_BITMASK_H
+
2 #define SIMDJSON_ARM64_BITMASK_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 //
+
9 // Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
+
10 //
+
11 // For example, prefix_xor(00100100) == 00011100
+
12 //
+
13 simdjson_inline uint64_t prefix_xor(uint64_t bitmask) {
+
15  // We could do this with PMULL, but it is apparently slow.
+
16  //
+
17  //#ifdef __ARM_FEATURE_CRYPTO // some ARM processors lack this extension
+
18  //return vmull_p64(-1ULL, bitmask);
+
19  //#else
+
20  // Analysis by @sebpop:
+
21  // When diffing the assembly for src/stage1_find_marks.cpp I see that the eors are all spread out
+
22  // in between other vector code, so effectively the extra cycles of the sequence do not matter
+
23  // because the GPR units are idle otherwise and the critical path is on the FP side.
+
24  // Also the PMULL requires two extra fmovs: GPR->FP (3 cycles in N1, 5 cycles in A72 )
+
25  // and FP->GPR (2 cycles on N1 and 5 cycles on A72.)
+
27  bitmask ^= bitmask << 1;
+
28  bitmask ^= bitmask << 2;
+
29  bitmask ^= bitmask << 4;
+
30  bitmask ^= bitmask << 8;
+
31  bitmask ^= bitmask << 16;
+
32  bitmask ^= bitmask << 32;
+
33  return bitmask;
+
34 }
+
35 
+
36 } // unnamed namespace
+
37 } // namespace arm64
+
38 } // namespace simdjson
+
39 
+
40 #endif
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/arm64_2end_8h_source.html b/arm64_2end_8h_source.html new file mode 100644 index 000000000..4695ee305 --- /dev/null +++ b/arm64_2end_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/arm64/end.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
end.h
+
+
+
1 #undef SIMDJSON_IMPLEMENTATION
+
+
+ + + + diff --git a/arm64_2implementation_8h_source.html b/arm64_2implementation_8h_source.html new file mode 100644 index 000000000..af1a34025 --- /dev/null +++ b/arm64_2implementation_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/arm64/implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation.h
+
+
+
1 #ifndef SIMDJSON_ARM64_IMPLEMENTATION_H
+
2 #define SIMDJSON_ARM64_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include "simdjson/internal/isadetection.h"
+
6 
+
7 namespace simdjson {
+
8 namespace arm64 {
+
9 
+
10 namespace {
+
11 using namespace simdjson;
+
12 using namespace simdjson::dom;
+
13 }
+
14 
+
18 class implementation final : public simdjson::implementation {
+
19 public:
+
20  simdjson_inline implementation() : simdjson::implementation("arm64", "ARM NEON", internal::instruction_set::NEON) {}
+
21  simdjson_warn_unused error_code create_dom_parser_implementation(
+
22  size_t capacity,
+
23  size_t max_length,
+
24  std::unique_ptr<internal::dom_parser_implementation>& dst
+
25  ) const noexcept final;
+
26  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept final;
+
27  simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final;
+
28 };
+
29 
+
30 } // namespace arm64
+
31 } // namespace simdjson
+
32 
+
33 #endif // SIMDJSON_ARM64_IMPLEMENTATION_H
+
An implementation of simdjson for a particular CPU architecture.
+
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
std::string minify(T x)
Minifies a JSON element or document, printing the smallest possible valid JSON.
+
+
+ + + + diff --git a/arm64_2intrinsics_8h_source.html b/arm64_2intrinsics_8h_source.html new file mode 100644 index 000000000..ee815eebb --- /dev/null +++ b/arm64_2intrinsics_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +simdjson: include/simdjson/arm64/intrinsics.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
intrinsics.h
+
+
+
1 #ifndef SIMDJSON_ARM64_INTRINSICS_H
+
2 #define SIMDJSON_ARM64_INTRINSICS_H
+
3 
+
4 // This should be the correct header whether
+
5 // you use visual studio or other compilers.
+
6 #include <arm_neon.h>
+
7 
+
8 static_assert(sizeof(uint8x16_t) <= simdjson::SIMDJSON_PADDING, "insufficient padding for arm64");
+
9 
+
10 #endif // SIMDJSON_ARM64_INTRINSICS_H
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/arm64_2numberparsing_8h_source.html b/arm64_2numberparsing_8h_source.html new file mode 100644 index 000000000..315732e54 --- /dev/null +++ b/arm64_2numberparsing_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +simdjson: include/simdjson/arm64/numberparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
numberparsing.h
+
+
+
1 #ifndef SIMDJSON_ARM64_NUMBERPARSING_H
+
2 #define SIMDJSON_ARM64_NUMBERPARSING_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 // we don't have SSE, so let us use a scalar function
+
9 // credit: https://johnnylee-sde.github.io/Fast-numeric-string-to-int/
+
10 static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
+
11  uint64_t val;
+
12  std::memcpy(&val, chars, sizeof(uint64_t));
+
13  val = (val & 0x0F0F0F0F0F0F0F0F) * 2561 >> 8;
+
14  val = (val & 0x00FF00FF00FF00FF) * 6553601 >> 16;
+
15  return uint32_t((val & 0x0000FFFF0000FFFF) * 42949672960001 >> 32);
+
16 }
+
17 
+
18 } // unnamed namespace
+
19 } // namespace SIMDJSON_IMPLEMENTATION
+
20 } // namespace simdjson
+
21 
+
22 #define SIMDJSON_SWAR_NUMBER_PARSING 1
+
23 
+
24 #include "simdjson/generic/numberparsing.h"
+
25 
+
26 #endif // SIMDJSON_ARM64_NUMBERPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/arm64_2simd_8h_source.html b/arm64_2simd_8h_source.html new file mode 100644 index 000000000..fa6f5f6da --- /dev/null +++ b/arm64_2simd_8h_source.html @@ -0,0 +1,627 @@ + + + + + + + +simdjson: include/simdjson/arm64/simd.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simd.h
+
+
+
1 #ifndef SIMDJSON_ARM64_SIMD_H
+
2 #define SIMDJSON_ARM64_SIMD_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include "simdjson/internal/simdprune_tables.h"
+
6 #include "simdjson/arm64/bitmanipulation.h"
+
7 #include <type_traits>
+
8 
+
9 
+
10 namespace simdjson {
+
11 namespace SIMDJSON_IMPLEMENTATION {
+
12 namespace {
+
13 namespace simd {
+
14 
+
15 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
16 namespace {
+
17 // Start of private section with Visual Studio workaround
+
18 
+
19 
+
31 simdjson_inline uint8x16_t make_uint8x16_t(uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4,
+
32  uint8_t x5, uint8_t x6, uint8_t x7, uint8_t x8,
+
33  uint8_t x9, uint8_t x10, uint8_t x11, uint8_t x12,
+
34  uint8_t x13, uint8_t x14, uint8_t x15, uint8_t x16) {
+
35  // Doing a load like so end ups generating worse code.
+
36  // uint8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8,
+
37  // x9, x10,x11,x12,x13,x14,x15,x16};
+
38  // return vld1q_u8(array);
+
39  uint8x16_t x{};
+
40  // incredibly, Visual Studio does not allow x[0] = x1
+
41  x = vsetq_lane_u8(x1, x, 0);
+
42  x = vsetq_lane_u8(x2, x, 1);
+
43  x = vsetq_lane_u8(x3, x, 2);
+
44  x = vsetq_lane_u8(x4, x, 3);
+
45  x = vsetq_lane_u8(x5, x, 4);
+
46  x = vsetq_lane_u8(x6, x, 5);
+
47  x = vsetq_lane_u8(x7, x, 6);
+
48  x = vsetq_lane_u8(x8, x, 7);
+
49  x = vsetq_lane_u8(x9, x, 8);
+
50  x = vsetq_lane_u8(x10, x, 9);
+
51  x = vsetq_lane_u8(x11, x, 10);
+
52  x = vsetq_lane_u8(x12, x, 11);
+
53  x = vsetq_lane_u8(x13, x, 12);
+
54  x = vsetq_lane_u8(x14, x, 13);
+
55  x = vsetq_lane_u8(x15, x, 14);
+
56  x = vsetq_lane_u8(x16, x, 15);
+
57  return x;
+
58 }
+
59 
+
60 simdjson_inline uint8x8_t make_uint8x8_t(uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4,
+
61  uint8_t x5, uint8_t x6, uint8_t x7, uint8_t x8) {
+
62  uint8x8_t x{};
+
63  x = vset_lane_u8(x1, x, 0);
+
64  x = vset_lane_u8(x2, x, 1);
+
65  x = vset_lane_u8(x3, x, 2);
+
66  x = vset_lane_u8(x4, x, 3);
+
67  x = vset_lane_u8(x5, x, 4);
+
68  x = vset_lane_u8(x6, x, 5);
+
69  x = vset_lane_u8(x7, x, 6);
+
70  x = vset_lane_u8(x8, x, 7);
+
71  return x;
+
72 }
+
73 
+
74 // We have to do the same work for make_int8x16_t
+
75 simdjson_inline int8x16_t make_int8x16_t(int8_t x1, int8_t x2, int8_t x3, int8_t x4,
+
76  int8_t x5, int8_t x6, int8_t x7, int8_t x8,
+
77  int8_t x9, int8_t x10, int8_t x11, int8_t x12,
+
78  int8_t x13, int8_t x14, int8_t x15, int8_t x16) {
+
79  // Doing a load like so end ups generating worse code.
+
80  // int8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8,
+
81  // x9, x10,x11,x12,x13,x14,x15,x16};
+
82  // return vld1q_s8(array);
+
83  int8x16_t x{};
+
84  // incredibly, Visual Studio does not allow x[0] = x1
+
85  x = vsetq_lane_s8(x1, x, 0);
+
86  x = vsetq_lane_s8(x2, x, 1);
+
87  x = vsetq_lane_s8(x3, x, 2);
+
88  x = vsetq_lane_s8(x4, x, 3);
+
89  x = vsetq_lane_s8(x5, x, 4);
+
90  x = vsetq_lane_s8(x6, x, 5);
+
91  x = vsetq_lane_s8(x7, x, 6);
+
92  x = vsetq_lane_s8(x8, x, 7);
+
93  x = vsetq_lane_s8(x9, x, 8);
+
94  x = vsetq_lane_s8(x10, x, 9);
+
95  x = vsetq_lane_s8(x11, x, 10);
+
96  x = vsetq_lane_s8(x12, x, 11);
+
97  x = vsetq_lane_s8(x13, x, 12);
+
98  x = vsetq_lane_s8(x14, x, 13);
+
99  x = vsetq_lane_s8(x15, x, 14);
+
100  x = vsetq_lane_s8(x16, x, 15);
+
101  return x;
+
102 }
+
103 
+
104 // End of private section with Visual Studio workaround
+
105 } // namespace
+
106 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
+
107 
+
108 
+
109  template<typename T>
+
110  struct simd8;
+
111 
+
112  //
+
113  // Base class of simd8<uint8_t> and simd8<bool>, both of which use uint8x16_t internally.
+
114  //
+
115  template<typename T, typename Mask=simd8<bool>>
+
116  struct base_u8 {
+
117  uint8x16_t value;
+
118  static const int SIZE = sizeof(value);
+
119 
+
120  // Conversion from/to SIMD register
+
121  simdjson_inline base_u8(const uint8x16_t _value) : value(_value) {}
+
122  simdjson_inline operator const uint8x16_t&() const { return this->value; }
+
123  simdjson_inline operator uint8x16_t&() { return this->value; }
+
124 
+
125  // Bit operations
+
126  simdjson_inline simd8<T> operator|(const simd8<T> other) const { return vorrq_u8(*this, other); }
+
127  simdjson_inline simd8<T> operator&(const simd8<T> other) const { return vandq_u8(*this, other); }
+
128  simdjson_inline simd8<T> operator^(const simd8<T> other) const { return veorq_u8(*this, other); }
+
129  simdjson_inline simd8<T> bit_andnot(const simd8<T> other) const { return vbicq_u8(*this, other); }
+
130  simdjson_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
+
131  simdjson_inline simd8<T>& operator|=(const simd8<T> other) { auto this_cast = static_cast<simd8<T>*>(this); *this_cast = *this_cast | other; return *this_cast; }
+
132  simdjson_inline simd8<T>& operator&=(const simd8<T> other) { auto this_cast = static_cast<simd8<T>*>(this); *this_cast = *this_cast & other; return *this_cast; }
+
133  simdjson_inline simd8<T>& operator^=(const simd8<T> other) { auto this_cast = static_cast<simd8<T>*>(this); *this_cast = *this_cast ^ other; return *this_cast; }
+
134 
+
135  friend simdjson_inline Mask operator==(const simd8<T> lhs, const simd8<T> rhs) { return vceqq_u8(lhs, rhs); }
+
136 
+
137  template<int N=1>
+
138  simdjson_inline simd8<T> prev(const simd8<T> prev_chunk) const {
+
139  return vextq_u8(prev_chunk, *this, 16 - N);
+
140  }
+
141  };
+
142 
+
143  // SIMD byte mask type (returned by things like eq and gt)
+
144  template<>
+
145  struct simd8<bool>: base_u8<bool> {
+
146  typedef uint16_t bitmask_t;
+
147  typedef uint32_t bitmask2_t;
+
148 
+
149  static simdjson_inline simd8<bool> splat(bool _value) { return vmovq_n_u8(uint8_t(-(!!_value))); }
+
150 
+
151  simdjson_inline simd8(const uint8x16_t _value) : base_u8<bool>(_value) {}
+
152  // False constructor
+
153  simdjson_inline simd8() : simd8(vdupq_n_u8(0)) {}
+
154  // Splat constructor
+
155  simdjson_inline simd8(bool _value) : simd8(splat(_value)) {}
+
156 
+
157  // We return uint32_t instead of uint16_t because that seems to be more efficient for most
+
158  // purposes (cutting it down to uint16_t costs performance in some compilers).
+
159  simdjson_inline uint32_t to_bitmask() const {
+
160 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
161  const uint8x16_t bit_mask = make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
+
162  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80);
+
163 #else
+
164  const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
+
165  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
+
166 #endif
+
167  auto minput = *this & bit_mask;
+
168  uint8x16_t tmp = vpaddq_u8(minput, minput);
+
169  tmp = vpaddq_u8(tmp, tmp);
+
170  tmp = vpaddq_u8(tmp, tmp);
+
171  return vgetq_lane_u16(vreinterpretq_u16_u8(tmp), 0);
+
172  }
+
173  simdjson_inline bool any() const { return vmaxvq_u8(*this) != 0; }
+
174  };
+
175 
+
176  // Unsigned bytes
+
177  template<>
+
178  struct simd8<uint8_t>: base_u8<uint8_t> {
+
179  static simdjson_inline uint8x16_t splat(uint8_t _value) { return vmovq_n_u8(_value); }
+
180  static simdjson_inline uint8x16_t zero() { return vdupq_n_u8(0); }
+
181  static simdjson_inline uint8x16_t load(const uint8_t* values) { return vld1q_u8(values); }
+
182 
+
183  simdjson_inline simd8(const uint8x16_t _value) : base_u8<uint8_t>(_value) {}
+
184  // Zero constructor
+
185  simdjson_inline simd8() : simd8(zero()) {}
+
186  // Array constructor
+
187  simdjson_inline simd8(const uint8_t values[16]) : simd8(load(values)) {}
+
188  // Splat constructor
+
189  simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
+
190  // Member-by-member initialization
+
191 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
192  simdjson_inline simd8(
+
193  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
194  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+
195  ) : simd8(make_uint8x16_t(
+
196  v0, v1, v2, v3, v4, v5, v6, v7,
+
197  v8, v9, v10,v11,v12,v13,v14,v15
+
198  )) {}
+
199 #else
+
200  simdjson_inline simd8(
+
201  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
202  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+
203  ) : simd8(uint8x16_t{
+
204  v0, v1, v2, v3, v4, v5, v6, v7,
+
205  v8, v9, v10,v11,v12,v13,v14,v15
+
206  }) {}
+
207 #endif
+
208 
+
209  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
210  simdjson_inline static simd8<uint8_t> repeat_16(
+
211  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
212  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+
213  ) {
+
214  return simd8<uint8_t>(
+
215  v0, v1, v2, v3, v4, v5, v6, v7,
+
216  v8, v9, v10,v11,v12,v13,v14,v15
+
217  );
+
218  }
+
219 
+
220  // Store to array
+
221  simdjson_inline void store(uint8_t dst[16]) const { return vst1q_u8(dst, *this); }
+
222 
+
223  // Saturated math
+
224  simdjson_inline simd8<uint8_t> saturating_add(const simd8<uint8_t> other) const { return vqaddq_u8(*this, other); }
+
225  simdjson_inline simd8<uint8_t> saturating_sub(const simd8<uint8_t> other) const { return vqsubq_u8(*this, other); }
+
226 
+
227  // Addition/subtraction are the same for signed and unsigned
+
228  simdjson_inline simd8<uint8_t> operator+(const simd8<uint8_t> other) const { return vaddq_u8(*this, other); }
+
229  simdjson_inline simd8<uint8_t> operator-(const simd8<uint8_t> other) const { return vsubq_u8(*this, other); }
+
230  simdjson_inline simd8<uint8_t>& operator+=(const simd8<uint8_t> other) { *this = *this + other; return *this; }
+
231  simdjson_inline simd8<uint8_t>& operator-=(const simd8<uint8_t> other) { *this = *this - other; return *this; }
+
232 
+
233  // Order-specific operations
+
234  simdjson_inline uint8_t max_val() const { return vmaxvq_u8(*this); }
+
235  simdjson_inline uint8_t min_val() const { return vminvq_u8(*this); }
+
236  simdjson_inline simd8<uint8_t> max_val(const simd8<uint8_t> other) const { return vmaxq_u8(*this, other); }
+
237  simdjson_inline simd8<uint8_t> min_val(const simd8<uint8_t> other) const { return vminq_u8(*this, other); }
+
238  simdjson_inline simd8<bool> operator<=(const simd8<uint8_t> other) const { return vcleq_u8(*this, other); }
+
239  simdjson_inline simd8<bool> operator>=(const simd8<uint8_t> other) const { return vcgeq_u8(*this, other); }
+
240  simdjson_inline simd8<bool> operator<(const simd8<uint8_t> other) const { return vcltq_u8(*this, other); }
+
241  simdjson_inline simd8<bool> operator>(const simd8<uint8_t> other) const { return vcgtq_u8(*this, other); }
+
242  // Same as >, but instead of guaranteeing all 1's == true, false = 0 and true = nonzero. For ARM, returns all 1's.
+
243  simdjson_inline simd8<uint8_t> gt_bits(const simd8<uint8_t> other) const { return simd8<uint8_t>(*this > other); }
+
244  // Same as <, but instead of guaranteeing all 1's == true, false = 0 and true = nonzero. For ARM, returns all 1's.
+
245  simdjson_inline simd8<uint8_t> lt_bits(const simd8<uint8_t> other) const { return simd8<uint8_t>(*this < other); }
+
246 
+
247  // Bit-specific operations
+
248  simdjson_inline simd8<bool> any_bits_set(simd8<uint8_t> bits) const { return vtstq_u8(*this, bits); }
+
249  simdjson_inline bool any_bits_set_anywhere() const { return this->max_val() != 0; }
+
250  simdjson_inline bool any_bits_set_anywhere(simd8<uint8_t> bits) const { return (*this & bits).any_bits_set_anywhere(); }
+
251  template<int N>
+
252  simdjson_inline simd8<uint8_t> shr() const { return vshrq_n_u8(*this, N); }
+
253  template<int N>
+
254  simdjson_inline simd8<uint8_t> shl() const { return vshlq_n_u8(*this, N); }
+
255 
+
256  // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values)
+
257  template<typename L>
+
258  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
+
259  return lookup_table.apply_lookup_16_to(*this);
+
260  }
+
261 
+
262 
+
263  // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted as a bitset).
+
264  // Passing a 0 value for mask would be equivalent to writing out every byte to output.
+
265  // Only the first 16 - count_ones(mask) bytes of the result are significant but 16 bytes
+
266  // get written.
+
267  // Design consideration: it seems like a function with the
+
268  // signature simd8<L> compress(uint16_t mask) would be
+
269  // sensible, but the AVX ISA makes this kind of approach difficult.
+
270  template<typename L>
+
271  simdjson_inline void compress(uint16_t mask, L * output) const {
+
272  using internal::thintable_epi8;
+
273  using internal::BitsSetTable256mul2;
+
274  using internal::pshufb_combine_table;
+
275  // this particular implementation was inspired by work done by @animetosho
+
276  // we do it in two steps, first 8 bytes and then second 8 bytes
+
277  uint8_t mask1 = uint8_t(mask); // least significant 8 bits
+
278  uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits
+
279  // next line just loads the 64-bit values thintable_epi8[mask1] and
+
280  // thintable_epi8[mask2] into a 128-bit register, using only
+
281  // two instructions on most compilers.
+
282  uint64x2_t shufmask64 = {thintable_epi8[mask1], thintable_epi8[mask2]};
+
283  uint8x16_t shufmask = vreinterpretq_u8_u64(shufmask64);
+
284  // we increment by 0x08 the second half of the mask
+
285 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
286  uint8x16_t inc = make_uint8x16_t(0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08);
+
287 #else
+
288  uint8x16_t inc = {0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08};
+
289 #endif
+
290  shufmask = vaddq_u8(shufmask, inc);
+
291  // this is the version "nearly pruned"
+
292  uint8x16_t pruned = vqtbl1q_u8(*this, shufmask);
+
293  // we still need to put the two halves together.
+
294  // we compute the popcount of the first half:
+
295  int pop1 = BitsSetTable256mul2[mask1];
+
296  // then load the corresponding mask, what it does is to write
+
297  // only the first pop1 bytes from the first 8 bytes, and then
+
298  // it fills in with the bytes from the second 8 bytes + some filling
+
299  // at the end.
+
300  uint8x16_t compactmask = vld1q_u8(reinterpret_cast<const uint8_t *>(pshufb_combine_table + pop1 * 8));
+
301  uint8x16_t answer = vqtbl1q_u8(pruned, compactmask);
+
302  vst1q_u8(reinterpret_cast<uint8_t*>(output), answer);
+
303  }
+
304 
+
305  // Copies all bytes corresponding to a 0 in the low half of the mask (interpreted as a
+
306  // bitset) to output1, then those corresponding to a 0 in the high half to output2.
+
307  template<typename L>
+
308  simdjson_inline void compress_halves(uint16_t mask, L *output1, L *output2) const {
+
309  using internal::thintable_epi8;
+
310  uint8_t mask1 = uint8_t(mask); // least significant 8 bits
+
311  uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits
+
312  uint8x8_t compactmask1 = vcreate_u8(thintable_epi8[mask1]);
+
313  uint8x8_t compactmask2 = vcreate_u8(thintable_epi8[mask2]);
+
314  // we increment by 0x08 the second half of the mask
+
315 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
316  uint8x8_t inc = make_uint8x8_t(0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08);
+
317 #else
+
318  uint8x8_t inc = {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08};
+
319 #endif
+
320  compactmask2 = vadd_u8(compactmask2, inc);
+
321  // store each result (with the second store possibly overlapping the first)
+
322  vst1_u8((uint8_t*)output1, vqtbl1_u8(*this, compactmask1));
+
323  vst1_u8((uint8_t*)output2, vqtbl1_u8(*this, compactmask2));
+
324  }
+
325 
+
326  template<typename L>
+
327  simdjson_inline simd8<L> lookup_16(
+
328  L replace0, L replace1, L replace2, L replace3,
+
329  L replace4, L replace5, L replace6, L replace7,
+
330  L replace8, L replace9, L replace10, L replace11,
+
331  L replace12, L replace13, L replace14, L replace15) const {
+
332  return lookup_16(simd8<L>::repeat_16(
+
333  replace0, replace1, replace2, replace3,
+
334  replace4, replace5, replace6, replace7,
+
335  replace8, replace9, replace10, replace11,
+
336  replace12, replace13, replace14, replace15
+
337  ));
+
338  }
+
339 
+
340  template<typename T>
+
341  simdjson_inline simd8<uint8_t> apply_lookup_16_to(const simd8<T> original) {
+
342  return vqtbl1q_u8(*this, simd8<uint8_t>(original));
+
343  }
+
344  };
+
345 
+
346  // Signed bytes
+
347  template<>
+
348  struct simd8<int8_t> {
+
349  int8x16_t value;
+
350 
+
351  static simdjson_inline simd8<int8_t> splat(int8_t _value) { return vmovq_n_s8(_value); }
+
352  static simdjson_inline simd8<int8_t> zero() { return vdupq_n_s8(0); }
+
353  static simdjson_inline simd8<int8_t> load(const int8_t values[16]) { return vld1q_s8(values); }
+
354 
+
355  // Conversion from/to SIMD register
+
356  simdjson_inline simd8(const int8x16_t _value) : value{_value} {}
+
357  simdjson_inline operator const int8x16_t&() const { return this->value; }
+
358  simdjson_inline operator int8x16_t&() { return this->value; }
+
359 
+
360  // Zero constructor
+
361  simdjson_inline simd8() : simd8(zero()) {}
+
362  // Splat constructor
+
363  simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
+
364  // Array constructor
+
365  simdjson_inline simd8(const int8_t* values) : simd8(load(values)) {}
+
366  // Member-by-member initialization
+
367 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
368  simdjson_inline simd8(
+
369  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
370  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+
371  ) : simd8(make_int8x16_t(
+
372  v0, v1, v2, v3, v4, v5, v6, v7,
+
373  v8, v9, v10,v11,v12,v13,v14,v15
+
374  )) {}
+
375 #else
+
376  simdjson_inline simd8(
+
377  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
378  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+
379  ) : simd8(int8x16_t{
+
380  v0, v1, v2, v3, v4, v5, v6, v7,
+
381  v8, v9, v10,v11,v12,v13,v14,v15
+
382  }) {}
+
383 #endif
+
384  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
385  simdjson_inline static simd8<int8_t> repeat_16(
+
386  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
387  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+
388  ) {
+
389  return simd8<int8_t>(
+
390  v0, v1, v2, v3, v4, v5, v6, v7,
+
391  v8, v9, v10,v11,v12,v13,v14,v15
+
392  );
+
393  }
+
394 
+
395  // Store to array
+
396  simdjson_inline void store(int8_t dst[16]) const { return vst1q_s8(dst, *this); }
+
397 
+
398  // Explicit conversion to/from unsigned
+
399  //
+
400  // Under Visual Studio/ARM64 uint8x16_t and int8x16_t are apparently the same type.
+
401  // In theory, we could check this occurrence with std::same_as and std::enabled_if but it is C++14
+
402  // and relatively ugly and hard to read.
+
403 #ifndef SIMDJSON_REGULAR_VISUAL_STUDIO
+
404  simdjson_inline explicit simd8(const uint8x16_t other): simd8(vreinterpretq_s8_u8(other)) {}
+
405 #endif
+
406  simdjson_inline explicit operator simd8<uint8_t>() const { return vreinterpretq_u8_s8(this->value); }
+
407 
+
408  // Math
+
409  simdjson_inline simd8<int8_t> operator+(const simd8<int8_t> other) const { return vaddq_s8(*this, other); }
+
410  simdjson_inline simd8<int8_t> operator-(const simd8<int8_t> other) const { return vsubq_s8(*this, other); }
+
411  simdjson_inline simd8<int8_t>& operator+=(const simd8<int8_t> other) { *this = *this + other; return *this; }
+
412  simdjson_inline simd8<int8_t>& operator-=(const simd8<int8_t> other) { *this = *this - other; return *this; }
+
413 
+
414  // Order-sensitive comparisons
+
415  simdjson_inline simd8<int8_t> max_val(const simd8<int8_t> other) const { return vmaxq_s8(*this, other); }
+
416  simdjson_inline simd8<int8_t> min_val(const simd8<int8_t> other) const { return vminq_s8(*this, other); }
+
417  simdjson_inline simd8<bool> operator>(const simd8<int8_t> other) const { return vcgtq_s8(*this, other); }
+
418  simdjson_inline simd8<bool> operator<(const simd8<int8_t> other) const { return vcltq_s8(*this, other); }
+
419  simdjson_inline simd8<bool> operator==(const simd8<int8_t> other) const { return vceqq_s8(*this, other); }
+
420 
+
421  template<int N=1>
+
422  simdjson_inline simd8<int8_t> prev(const simd8<int8_t> prev_chunk) const {
+
423  return vextq_s8(prev_chunk, *this, 16 - N);
+
424  }
+
425 
+
426  // Perform a lookup assuming no value is larger than 16
+
427  template<typename L>
+
428  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
+
429  return lookup_table.apply_lookup_16_to(*this);
+
430  }
+
431  template<typename L>
+
432  simdjson_inline simd8<L> lookup_16(
+
433  L replace0, L replace1, L replace2, L replace3,
+
434  L replace4, L replace5, L replace6, L replace7,
+
435  L replace8, L replace9, L replace10, L replace11,
+
436  L replace12, L replace13, L replace14, L replace15) const {
+
437  return lookup_16(simd8<L>::repeat_16(
+
438  replace0, replace1, replace2, replace3,
+
439  replace4, replace5, replace6, replace7,
+
440  replace8, replace9, replace10, replace11,
+
441  replace12, replace13, replace14, replace15
+
442  ));
+
443  }
+
444 
+
445  template<typename T>
+
446  simdjson_inline simd8<int8_t> apply_lookup_16_to(const simd8<T> original) {
+
447  return vqtbl1q_s8(*this, simd8<uint8_t>(original));
+
448  }
+
449  };
+
450 
+
451  template<typename T>
+
452  struct simd8x64 {
+
453  static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
+
454  static_assert(NUM_CHUNKS == 4, "ARM kernel should use four registers per 64-byte block.");
+
455  const simd8<T> chunks[NUM_CHUNKS];
+
456 
+
457  simd8x64(const simd8x64<T>& o) = delete; // no copy allowed
+
458  simd8x64<T>& operator=(const simd8<T>& other) = delete; // no assignment allowed
+
459  simd8x64() = delete; // no default constructor allowed
+
460 
+
461  simdjson_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1, const simd8<T> chunk2, const simd8<T> chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {}
+
462  simdjson_inline simd8x64(const T ptr[64]) : chunks{simd8<T>::load(ptr), simd8<T>::load(ptr+16), simd8<T>::load(ptr+32), simd8<T>::load(ptr+48)} {}
+
463 
+
464  simdjson_inline void store(T ptr[64]) const {
+
465  this->chunks[0].store(ptr+sizeof(simd8<T>)*0);
+
466  this->chunks[1].store(ptr+sizeof(simd8<T>)*1);
+
467  this->chunks[2].store(ptr+sizeof(simd8<T>)*2);
+
468  this->chunks[3].store(ptr+sizeof(simd8<T>)*3);
+
469  }
+
470 
+
471  simdjson_inline simd8<T> reduce_or() const {
+
472  return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]);
+
473  }
+
474 
+
475 
+
476  simdjson_inline uint64_t compress(uint64_t mask, T * output) const {
+
477  uint64_t popcounts = vget_lane_u64(vreinterpret_u64_u8(vcnt_u8(vcreate_u8(~mask))), 0);
+
478  // compute the prefix sum of the popcounts of each byte
+
479  uint64_t offsets = popcounts * 0x0101010101010101;
+
480  this->chunks[0].compress_halves(uint16_t(mask), output, &output[popcounts & 0xFF]);
+
481  this->chunks[1].compress_halves(uint16_t(mask >> 16), &output[(offsets >> 8) & 0xFF], &output[(offsets >> 16) & 0xFF]);
+
482  this->chunks[2].compress_halves(uint16_t(mask >> 32), &output[(offsets >> 24) & 0xFF], &output[(offsets >> 32) & 0xFF]);
+
483  this->chunks[3].compress_halves(uint16_t(mask >> 48), &output[(offsets >> 40) & 0xFF], &output[(offsets >> 48) & 0xFF]);
+
484  return offsets >> 56;
+
485  }
+
486 
+
487  simdjson_inline uint64_t to_bitmask() const {
+
488 #ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
+
489  const uint8x16_t bit_mask = make_uint8x16_t(
+
490  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
+
491  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80
+
492  );
+
493 #else
+
494  const uint8x16_t bit_mask = {
+
495  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
+
496  0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80
+
497  };
+
498 #endif
+
499  // Add each of the elements next to each other, successively, to stuff each 8 byte mask into one.
+
500  uint8x16_t sum0 = vpaddq_u8(this->chunks[0] & bit_mask, this->chunks[1] & bit_mask);
+
501  uint8x16_t sum1 = vpaddq_u8(this->chunks[2] & bit_mask, this->chunks[3] & bit_mask);
+
502  sum0 = vpaddq_u8(sum0, sum1);
+
503  sum0 = vpaddq_u8(sum0, sum0);
+
504  return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0);
+
505  }
+
506 
+
507  simdjson_inline uint64_t eq(const T m) const {
+
508  const simd8<T> mask = simd8<T>::splat(m);
+
509  return simd8x64<bool>(
+
510  this->chunks[0] == mask,
+
511  this->chunks[1] == mask,
+
512  this->chunks[2] == mask,
+
513  this->chunks[3] == mask
+
514  ).to_bitmask();
+
515  }
+
516 
+
517  simdjson_inline uint64_t lteq(const T m) const {
+
518  const simd8<T> mask = simd8<T>::splat(m);
+
519  return simd8x64<bool>(
+
520  this->chunks[0] <= mask,
+
521  this->chunks[1] <= mask,
+
522  this->chunks[2] <= mask,
+
523  this->chunks[3] <= mask
+
524  ).to_bitmask();
+
525  }
+
526  }; // struct simd8x64<T>
+
527 
+
528 } // namespace simd
+
529 } // unnamed namespace
+
530 } // namespace SIMDJSON_IMPLEMENTATION
+
531 } // namespace simdjson
+
532 
+
533 #endif // SIMDJSON_ARM64_SIMD_H
+
simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/arm64_2stringparsing_8h_source.html b/arm64_2stringparsing_8h_source.html new file mode 100644 index 000000000..f456b7516 --- /dev/null +++ b/arm64_2stringparsing_8h_source.html @@ -0,0 +1,156 @@ + + + + + + + +simdjson: include/simdjson/arm64/stringparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
stringparsing.h
+
+
+
1 #ifndef SIMDJSON_ARM64_STRINGPARSING_H
+
2 #define SIMDJSON_ARM64_STRINGPARSING_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include "simdjson/arm64/simd.h"
+
6 #include "simdjson/arm64/bitmanipulation.h"
+
7 
+
8 namespace simdjson {
+
9 namespace SIMDJSON_IMPLEMENTATION {
+
10 namespace {
+
11 
+
12 using namespace simd;
+
13 
+
14 // Holds backslashes and quotes locations.
+
15 struct backslash_and_quote {
+
16 public:
+
17  static constexpr uint32_t BYTES_PROCESSED = 32;
+
18  simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
+
19 
+
20  simdjson_inline bool has_quote_first() { return ((bs_bits - 1) & quote_bits) != 0; }
+
21  simdjson_inline bool has_backslash() { return bs_bits != 0; }
+
22  simdjson_inline int quote_index() { return trailing_zeroes(quote_bits); }
+
23  simdjson_inline int backslash_index() { return trailing_zeroes(bs_bits); }
+
24 
+
25  uint32_t bs_bits;
+
26  uint32_t quote_bits;
+
27 }; // struct backslash_and_quote
+
28 
+
29 simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
+
30  // this can read up to 31 bytes beyond the buffer size, but we require
+
31  // SIMDJSON_PADDING of padding
+
32  static_assert(SIMDJSON_PADDING >= (BYTES_PROCESSED - 1), "backslash and quote finder must process fewer than SIMDJSON_PADDING bytes");
+
33  simd8<uint8_t> v0(src);
+
34  simd8<uint8_t> v1(src + sizeof(v0));
+
35  v0.store(dst);
+
36  v1.store(dst + sizeof(v0));
+
37 
+
38  // Getting a 64-bit bitmask is much cheaper than multiple 16-bit bitmasks on ARM; therefore, we
+
39  // smash them together into a 64-byte mask and get the bitmask from there.
+
40  uint64_t bs_and_quote = simd8x64<bool>(v0 == '\\', v1 == '\\', v0 == '"', v1 == '"').to_bitmask();
+
41  return {
+
42  uint32_t(bs_and_quote), // bs_bits
+
43  uint32_t(bs_and_quote >> 32) // quote_bits
+
44  };
+
45 }
+
46 
+
47 } // unnamed namespace
+
48 } // namespace SIMDJSON_IMPLEMENTATION
+
49 } // namespace simdjson
+
50 
+
51 #endif // SIMDJSON_ARM64_STRINGPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/arm64_8h_source.html b/arm64_8h_source.html new file mode 100644 index 000000000..039c9f1f7 --- /dev/null +++ b/arm64_8h_source.html @@ -0,0 +1,136 @@ + + + + + + + +simdjson: include/simdjson/arm64.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
arm64.h
+
+
+
1 #ifndef SIMDJSON_ARM64_H
+
2 #define SIMDJSON_ARM64_H
+
3 
+ +
5 
+
6 #if SIMDJSON_IMPLEMENTATION_ARM64
+
7 
+
8 namespace simdjson {
+
12 namespace arm64 {
+
13 } // namespace arm64
+
14 } // namespace simdjson
+
15 
+
16 #include "simdjson/arm64/implementation.h"
+
17 
+
18 #include "simdjson/arm64/begin.h"
+
19 
+
20 // Declarations
+
21 #include "simdjson/generic/dom_parser_implementation.h"
+
22 #include "simdjson/arm64/intrinsics.h"
+
23 #include "simdjson/arm64/bitmanipulation.h"
+
24 #include "simdjson/arm64/bitmask.h"
+
25 #include "simdjson/arm64/simd.h"
+
26 #include "simdjson/generic/jsoncharutils.h"
+
27 #include "simdjson/generic/atomparsing.h"
+
28 #include "simdjson/arm64/stringparsing.h"
+
29 #include "simdjson/arm64/numberparsing.h"
+
30 #include "simdjson/arm64/end.h"
+
31 
+
32 #endif // SIMDJSON_IMPLEMENTATION_ARM64
+
33 
+
34 #endif // SIMDJSON_ARM64_H
+
Includes common stuff needed for implementations.
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/array__iterator-inl_8h_source.html b/array__iterator-inl_8h_source.html new file mode 100644 index 000000000..eca8db719 --- /dev/null +++ b/array__iterator-inl_8h_source.html @@ -0,0 +1,181 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/array_iterator-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array_iterator-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 simdjson_inline array_iterator::array_iterator(const value_iterator &_iter) noexcept
+
6  : iter{_iter}
+
7 {}
+
8 
+ +
10  if (iter.error()) { iter.abandon(); return iter.error(); }
+
11  return value(iter.child());
+
12 }
+
13 simdjson_inline bool array_iterator::operator==(const array_iterator &other) const noexcept {
+
14  return !(*this != other);
+
15 }
+
16 simdjson_inline bool array_iterator::operator!=(const array_iterator &) const noexcept {
+
17  return iter.is_open();
+
18 }
+
19 simdjson_inline array_iterator &array_iterator::operator++() noexcept {
+
20  error_code error;
+
21  // PERF NOTE this is a safety rail ... users should exit loops as soon as they receive an error, so we'll never get here.
+
22  // However, it does not seem to make a perf difference, so we add it out of an abundance of caution.
+
23  if (( error = iter.error() )) { return *this; }
+
24  if (( error = iter.skip_child() )) { return *this; }
+
25  if (( error = iter.has_next_element().error() )) { return *this; }
+
26  return *this;
+
27 }
+
28 
+
29 } // namespace ondemand
+
30 } // namespace SIMDJSON_IMPLEMENTATION
+
31 } // namespace simdjson
+
32 
+
33 namespace simdjson {
+
34 
+
35 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::simdjson_result(
+
36  SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value
+
37 ) noexcept
+
38  : SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>(value))
+
39 {
+
40  first.iter.assert_is_valid();
+
41 }
+
42 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::simdjson_result(error_code error) noexcept
+
43  : SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>({}, error)
+
44 {
+
45 }
+
46 
+
47 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::operator*() noexcept {
+
48  if (error()) { return error(); }
+
49  return *first;
+
50 }
+
51 simdjson_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::operator==(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &other) const noexcept {
+
52  if (!first.iter.is_valid()) { return !error(); }
+
53  return first == other.first;
+
54 }
+
55 simdjson_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::operator!=(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &other) const noexcept {
+
56  if (!first.iter.is_valid()) { return error(); }
+
57  return first != other.first;
+
58 }
+
59 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator>::operator++() noexcept {
+
60  // Clear the error if there is one, so we don't yield it twice
+
61  if (error()) { second = SUCCESS; return *this; }
+
62  ++(first);
+
63  return *this;
+
64 }
+
65 
+
66 } // namespace simdjson
+ +
simdjson_inline simdjson_result< value > operator*() noexcept
Get the current element.
+
simdjson_inline bool operator==(const array_iterator &) const noexcept
Check if we are at the end of the JSON.
+
simdjson_inline array_iterator & operator++() noexcept
Move to the next element.
+
simdjson_inline array_iterator() noexcept=default
Create a new, invalid array iterator.
+
simdjson_inline bool operator!=(const array_iterator &) const noexcept
Check if there are more elements in the JSON array.
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/array__iterator_8h_source.html b/array__iterator_8h_source.html new file mode 100644 index 000000000..3c80f74c5 --- /dev/null +++ b/array__iterator_8h_source.html @@ -0,0 +1,173 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/array_iterator.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array_iterator.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
7 class array;
+
8 class value;
+
9 class document;
+
10 
+ +
20 public:
+
22  simdjson_inline array_iterator() noexcept = default;
+
23 
+
24  //
+
25  // Iterator interface
+
26  //
+
27 
+
33  simdjson_inline simdjson_result<value> operator*() noexcept; // MUST ONLY BE CALLED ONCE PER ITERATION.
+
41  simdjson_inline bool operator==(const array_iterator &) const noexcept;
+
49  simdjson_inline bool operator!=(const array_iterator &) const noexcept;
+
55  simdjson_inline array_iterator &operator++() noexcept;
+
56 
+
57 private:
+
58  value_iterator iter{};
+
59 
+
60  simdjson_inline array_iterator(const value_iterator &iter) noexcept;
+
61 
+
62  friend class array;
+
63  friend class value;
+
64  friend struct simdjson_result<array_iterator>;
+
65 };
+
66 
+
67 } // namespace ondemand
+
68 } // namespace SIMDJSON_IMPLEMENTATION
+
69 } // namespace simdjson
+
70 
+
71 namespace simdjson {
+
72 
+
73 template<>
+
74 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> {
+
75 public:
+ +
77  simdjson_inline simdjson_result(error_code error) noexcept;
+
78  simdjson_inline simdjson_result() noexcept = default;
+
79 
+
80  //
+
81  // Iterator interface
+
82  //
+
83 
+
84  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator*() noexcept; // MUST ONLY BE CALLED ONCE PER ITERATION.
+
85  simdjson_inline bool operator==(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &) const noexcept;
+
86  simdjson_inline bool operator!=(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &) const noexcept;
+
87  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> &operator++() noexcept;
+
88 };
+
89 
+
90 } // namespace simdjson
+ +
simdjson_inline array_iterator() noexcept=default
Create a new, invalid array iterator.
+ +
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ + + +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/atomparsing_8h_source.html b/atomparsing_8h_source.html new file mode 100644 index 000000000..cc77bac29 --- /dev/null +++ b/atomparsing_8h_source.html @@ -0,0 +1,169 @@ + + + + + + + +simdjson: include/simdjson/generic/atomparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
atomparsing.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace {
+
5 namespace atomparsing {
+
6 
+
7 // The string_to_uint32 is exclusively used to map literal strings to 32-bit values.
+
8 // We use memcpy instead of a pointer cast to avoid undefined behaviors since we cannot
+
9 // be certain that the character pointer will be properly aligned.
+
10 // You might think that using memcpy makes this function expensive, but you'd be wrong.
+
11 // All decent optimizing compilers (GCC, clang, Visual Studio) will compile string_to_uint32("false");
+
12 // to the compile-time constant 1936482662.
+
13 simdjson_inline uint32_t string_to_uint32(const char* str) { uint32_t val; std::memcpy(&val, str, sizeof(uint32_t)); return val; }
+
14 
+
15 
+
16 // Again in str4ncmp we use a memcpy to avoid undefined behavior. The memcpy may appear expensive.
+
17 // Yet all decent optimizing compilers will compile memcpy to a single instruction, just about.
+
18 simdjson_warn_unused
+
19 simdjson_inline uint32_t str4ncmp(const uint8_t *src, const char* atom) {
+
20  uint32_t srcval; // we want to avoid unaligned 32-bit loads (undefined in C/C++)
+
21  static_assert(sizeof(uint32_t) <= SIMDJSON_PADDING, "SIMDJSON_PADDING must be larger than 4 bytes");
+
22  std::memcpy(&srcval, src, sizeof(uint32_t));
+
23  return srcval ^ string_to_uint32(atom);
+
24 }
+
25 
+
26 simdjson_warn_unused
+
27 simdjson_inline bool is_valid_true_atom(const uint8_t *src) {
+
28  return (str4ncmp(src, "true") | jsoncharutils::is_not_structural_or_whitespace(src[4])) == 0;
+
29 }
+
30 
+
31 simdjson_warn_unused
+
32 simdjson_inline bool is_valid_true_atom(const uint8_t *src, size_t len) {
+
33  if (len > 4) { return is_valid_true_atom(src); }
+
34  else if (len == 4) { return !str4ncmp(src, "true"); }
+
35  else { return false; }
+
36 }
+
37 
+
38 simdjson_warn_unused
+
39 simdjson_inline bool is_valid_false_atom(const uint8_t *src) {
+
40  return (str4ncmp(src+1, "alse") | jsoncharutils::is_not_structural_or_whitespace(src[5])) == 0;
+
41 }
+
42 
+
43 simdjson_warn_unused
+
44 simdjson_inline bool is_valid_false_atom(const uint8_t *src, size_t len) {
+
45  if (len > 5) { return is_valid_false_atom(src); }
+
46  else if (len == 5) { return !str4ncmp(src+1, "alse"); }
+
47  else { return false; }
+
48 }
+
49 
+
50 simdjson_warn_unused
+
51 simdjson_inline bool is_valid_null_atom(const uint8_t *src) {
+
52  return (str4ncmp(src, "null") | jsoncharutils::is_not_structural_or_whitespace(src[4])) == 0;
+
53 }
+
54 
+
55 simdjson_warn_unused
+
56 simdjson_inline bool is_valid_null_atom(const uint8_t *src, size_t len) {
+
57  if (len > 4) { return is_valid_null_atom(src); }
+
58  else if (len == 4) { return !str4ncmp(src, "null"); }
+
59  else { return false; }
+
60 }
+
61 
+
62 } // namespace atomparsing
+
63 } // unnamed namespace
+
64 } // namespace SIMDJSON_IMPLEMENTATION
+
65 } // namespace simdjson
+
We want to support argument-dependent lookup (ADL).
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/base_8h_source.html b/base_8h_source.html new file mode 100644 index 000000000..37e0062cd --- /dev/null +++ b/base_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: include/simdjson/base.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
base.h
+
+
+
1 #ifndef SIMDJSON_BASE_H
+
2 #define SIMDJSON_BASE_H
+
3 
+
4 #include "simdjson/compiler_check.h"
+
5 #include "simdjson/common_defs.h"
+
6 #include "simdjson/portability.h"
+
7 
+
8 SIMDJSON_PUSH_DISABLE_WARNINGS
+
9 SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
10 
+
11 // Public API
+
12 #include "simdjson/simdjson_version.h"
+
13 #include "simdjson/error.h"
+
14 #include "simdjson/minify.h"
+
15 #include "simdjson/padded_string.h"
+
16 #include "simdjson/padded_string_view.h"
+
17 #include "simdjson/implementation.h"
+
18 
+
19 // Inline functions
+
20 #include "simdjson/error-inl.h"
+
21 #include "simdjson/padded_string-inl.h"
+
22 #include "simdjson/padded_string_view-inl.h"
+
23 
+
24 SIMDJSON_POP_DISABLE_WARNINGS
+
25 
+
26 #endif // SIMDJSON_BASE_H
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +simdjson: include/simdjson/builtin.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
builtin.h
+
+
+
1 #ifndef SIMDJSON_BUILTIN_H
+
2 #define SIMDJSON_BUILTIN_H
+
3 
+
4 #include "simdjson/implementations.h"
+
5 
+
6 // Determine the best builtin implementation
+
7 #ifndef SIMDJSON_BUILTIN_IMPLEMENTATION
+
8 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE
+
9 #define SIMDJSON_BUILTIN_IMPLEMENTATION icelake
+
10 #elif SIMDJSON_CAN_ALWAYS_RUN_HASWELL
+
11 #define SIMDJSON_BUILTIN_IMPLEMENTATION haswell
+
12 #elif SIMDJSON_CAN_ALWAYS_RUN_WESTMERE
+
13 #define SIMDJSON_BUILTIN_IMPLEMENTATION westmere
+
14 #elif SIMDJSON_CAN_ALWAYS_RUN_ARM64
+
15 #define SIMDJSON_BUILTIN_IMPLEMENTATION arm64
+
16 #elif SIMDJSON_CAN_ALWAYS_RUN_PPC64
+
17 #define SIMDJSON_BUILTIN_IMPLEMENTATION ppc64
+
18 #elif SIMDJSON_CAN_ALWAYS_RUN_FALLBACK
+
19 #define SIMDJSON_BUILTIN_IMPLEMENTATION fallback
+
20 #else
+
21 #error "All possible implementations (including fallback) have been disabled! simdjson will not run."
+
22 #endif
+
23 #endif // SIMDJSON_BUILTIN_IMPLEMENTATION
+
24 
+
25 #define SIMDJSON_IMPLEMENTATION SIMDJSON_BUILTIN_IMPLEMENTATION
+
26 
+
27 // ondemand is only compiled as part of the builtin implementation at present
+
28 
+
29 // Interface declarations
+
30 #include "simdjson/generic/implementation_simdjson_result_base.h"
+
31 #include "simdjson/generic/ondemand.h"
+
32 
+
33 // Inline definitions
+
34 #include "simdjson/generic/implementation_simdjson_result_base-inl.h"
+
35 #include "simdjson/generic/ondemand-inl.h"
+
36 
+
37 #undef SIMDJSON_IMPLEMENTATION
+
38 
+
39 namespace simdjson {
+
50  namespace builtin = SIMDJSON_BUILTIN_IMPLEMENTATION;
+
54  namespace ondemand = SIMDJSON_BUILTIN_IMPLEMENTATION::ondemand;
+ +
62 } // namespace simdjson
+
63 
+
64 #endif // SIMDJSON_BUILTIN_H
+
An implementation of simdjson for a particular CPU architecture.
+
We want to support argument-dependent lookup (ADL).
+
const implementation * builtin_implementation()
Represents the best statically linked simdjson implementation that can be used by the compiling progr...
+
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 000000000..846875037 --- /dev/null +++ b/classes.html @@ -0,0 +1,141 @@ + + + + + + + +simdjson: Class Index + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | D | E | F | I | K | N | O | P | R | S | V
+
+
+
A
+
array (simdjson::dom)
array (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
array_iterator (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
D
+
document (simdjson::dom)
document (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
document_reference (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
document_stream (simdjson::dom)
document_stream (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
dom_parser_implementation (simdjson::SIMDJSON_IMPLEMENTATION)
+
+
E
+
element (simdjson::dom)
+
+
F
+
field (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
I
+
implementation (simdjson)
implementation_simdjson_result_base (simdjson::SIMDJSON_IMPLEMENTATION)
array::iterator (simdjson::dom)
document_stream::iterator (simdjson::dom)
object::iterator (simdjson::dom)
document_stream::iterator (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
K
+
key_value_pair (simdjson::dom)
+
+
N
+
number (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
O
+
object (simdjson::dom)
object (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
object_iterator (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
open_container (simdjson::SIMDJSON_IMPLEMENTATION)
+
+
P
+
padded_string (simdjson)
padded_string_view (simdjson)
parser (simdjson::dom)
parser (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
R
+
raw_json_string (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
S
+
simdjson_error (simdjson)
simdjson_result (simdjson)
simdjson_result< dom::array > (simdjson)
simdjson_result< dom::document_stream > (simdjson)
simdjson_result< dom::element > (simdjson)
simdjson_result< dom::object > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > (simdjson)
simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator > (simdjson)
+
+
V
+
value (simdjson::SIMDJSON_IMPLEMENTATION::ondemand)
+
+
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation-members.html new file mode 100644 index 000000000..33f799fe6 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation-members.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
bufsimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
docsimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
dom_parser_implementation() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementationinline
dom_parser_implementation(dom_parser_implementation &&other) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementationinline
dom_parser_implementation(const dom_parser_implementation &)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
is_arraysimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
lensimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
open_containerssimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
operator=(dom_parser_implementation &&other) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementationinline
operator=(const dom_parser_implementation &)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
parse(const uint8_t *buf, size_t len, dom::document &doc) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
parse_string(const uint8_t *src, uint8_t *dst) const noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
set_capacity(size_t capacity) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementationinline
set_max_depth(size_t max_depth) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementationinline
stage1(const uint8_t *buf, size_t len, stage1_mode partial) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
stage2(dom::document &doc) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
stage2_next(dom::document &doc) noexcept final (defined in simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation)simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html new file mode 100644 index 000000000..0509eb456 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html @@ -0,0 +1,179 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation Class Referencefinal
+
+
+
+Inheritance diagram for simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

dom_parser_implementation (dom_parser_implementation &&other) noexcept
 
+dom_parser_implementationoperator= (dom_parser_implementation &&other) noexcept
 
dom_parser_implementation (const dom_parser_implementation &)=delete
 
+dom_parser_implementationoperator= (const dom_parser_implementation &)=delete
 
+simdjson_warn_unused error_code parse (const uint8_t *buf, size_t len, dom::document &doc) noexcept final
 
+simdjson_warn_unused error_code stage1 (const uint8_t *buf, size_t len, stage1_mode partial) noexcept final
 
+simdjson_warn_unused error_code stage2 (dom::document &doc) noexcept final
 
+simdjson_warn_unused error_code stage2_next (dom::document &doc) noexcept final
 
+simdjson_warn_unused uint8_t * parse_string (const uint8_t *src, uint8_t *dst) const noexcept final
 
+simdjson_warn_unused error_code set_capacity (size_t capacity) noexcept final
 
+simdjson_warn_unused error_code set_max_depth (size_t max_depth) noexcept final
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

+std::unique_ptr< open_container[]> open_containers {}
 Tape location of each open { or [.
 
+std::unique_ptr< bool[]> is_array {}
 Whether each open container is a [ or {.
 
+const uint8_t * buf {}
 Buffer passed to stage 1.
 
+size_t len {0}
 Length passed to stage 1.
 
+dom::documentdoc {}
 Document passed to stage 2.
 
+

Detailed Description

+
+

Definition at line 15 of file dom_parser_implementation.h.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.js new file mode 100644 index 000000000..16bf00194 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.js @@ -0,0 +1,20 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation = +[ + [ "dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a16d6277f8deeeae553505b2c4056dea7", null ], + [ "dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a403c396b3c28815786eaa70bbbbd505a", null ], + [ "dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a2b9fab70b6f9846d16aca7dc1aeb7251", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a0ed9fe2a61acbdeb9b7a337e362dda2b", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a4bdd98e83c105a18882ede9cd7cd0525", null ], + [ "parse", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a2667a623246d69262e685124020fcbb1", null ], + [ "parse_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#aecfcdd437419319dcee518adab3a8d15", null ], + [ "set_capacity", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a228ebe3ee63b409a21949f27a0db034e", null ], + [ "set_max_depth", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a63068d5e284fab7c458727a1f2c074c7", null ], + [ "stage1", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#af4e2f7842cf7307636ac00b3dbb188d0", null ], + [ "stage2", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a016ecd16f2dc440d6e9bb5642c5c9a03", null ], + [ "stage2_next", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#ae08bd3dd4f8343db8d5adf805cb00a8d", null ], + [ "buf", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a961b4870710d5ee1da938c4923d6f68d", null ], + [ "doc", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a4089d6265ec845fd85acd2db0973b858", null ], + [ "is_array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9b82f3273bb2f2f83b8e085b7d9c6613", null ], + [ "len", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a132a95e1147b80c2533d1632185a6a09", null ], + [ "open_containers", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9c67c6c782f1296319a58ec1586f2329", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.png b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.png new file mode 100644 index 0000000000000000000000000000000000000000..51426aea1ad318970241b3f3b596f90409db4a35 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0y~yV4MYH2XHV0N%1?*=0Hj!z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opxJ$R(f`>M_UBfBqpTw1aos8RmX>Wep) z@2obH)hw01DgXX`-u~ND)?VNIesg{OcHbS*7HP8gc~kMt)?R@|7^YOEFg&OhQX`fTOU6YH-lQS;Pcx^tRHbm|IoRzk2w$^FZr%!CSzwL5D zzjK_cFjK$EOVcXbS*AUQFW;D7RL=Qe!ONKMW^S(!-~M<}_pP?ivU`3?``4J)@2XJo zynpq)Y{tQ3?Kff;{QNWfV-EX?>lb*+zAZgI(c2_<@6P+Non9K|QYWW9^Ln;&)y$$h z%U@5^QT|UcSsJp;3IW=I{y}i-t$TQYFjoRiuzVvHPvOMLU8{6&koZ0 zm;UBNGMU|7`rD@7?C!twX1iCe%=+bYyu0w_=T$GQXY>5FeP6xjeEdDHOW9w3G5bym z+nYW$U-#=VU9U^de-%x>pRV#x@!WOEaQlTlSKqFZ^3?LY#J>_0`l3>vUMroHJvBo! zR5X|7Wt=(Vm6mprJzSg*AKmXm`2Ybv)iXTbbXz#0g?b6NmkEtfMacX;;^Zmwq zav^6Ii}Fo>fAQAi8}4^c>0XmwU0VJ6JNv9@Y;|qhFRS&($LjquGGUm!uZ=As(Eak} z{jAGv-}$`_u5$h1GLPxHv&oq(W#`Zu_Fn$FmS;&9YabMxc70i}IW*?>Ba275{0}>M z`aj;z`uC%7^WJ>huiJU$pMBHVvaM%pLFsX3lf!GcO)h_DoK@M%;A>vpnD(W#;I#$A zah4Z}^9~uPX7oo1tXDj~nA5T3y2{~#+zP4R>)2wq&Ry_w^E1~Zll1c5`48XPG#}G_ z^_R2k$)xPagP{^``RWtnuSIWrx>y>R4xc328%u4tmp0|#Tw{ru>z)4B<|NK7jQJ+} z*mBlOi7KYEGgNO+K0lk=B>3BxI{xesCvB+>OLtnhXR!TOHd)-ceZj|&xQ4V<6HANx z&q?*%+w<^)LwCM!^G?a0w~VtSU2n+CrI`e8WY0Jxd3>wPV$0Z)UD;_S-Qla}E6%#S zTE&aC=iWT~3&(C}f7iN^A}w?OYw*(Ao9Ab1wuEPV>-z3~u;jXq#%cy+P5!G1;k>u;|QeU)E)bCbRB-(>gmZ!~ZH zmA?4Lzx!Eu2(JU@gR>ZEOFVdQ&MBb@0Byu- A1poj5 literal 0 HcmV?d00001 diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array-members.html new file mode 100644 index 000000000..609c83078 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array-members.html @@ -0,0 +1,120 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html new file mode 100644 index 000000000..d6759f218 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html @@ -0,0 +1,642 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array Class Reference
+
+
+ +

A forward-only JSON array. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline array () noexcept=default
 Create a new invalid array. More...
 
simdjson_inline simdjson_result< array_iteratorbegin () noexcept
 Begin array iteration. More...
 
simdjson_inline simdjson_result< array_iteratorend () noexcept
 Sentinel representing the end of the array. More...
 
simdjson_inline simdjson_result< size_t > count_elements () &noexcept
 This method scans the array and counts the number of elements. More...
 
simdjson_inline simdjson_result< bool > is_empty () &noexcept
 This method scans the beginning of the array and checks whether the array is empty. More...
 
simdjson_result< bool > reset () &noexcept
 Reset the iterator so that we are pointing back at the beginning of the array. More...
 
simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_inline simdjson_result< std::string_view > raw_json () noexcept
 Consumes the array and returns a string_view instance corresponding to the array as represented in JSON. More...
 
simdjson_inline simdjson_result< valueat (size_t index) noexcept
 Get the value at the given index. More...
 
+ + + + + + + +

+Protected Member Functions

+simdjson_inline error_code consume () noexcept
 Go to the end of the array, no matter where you are right now.
 
simdjson_inline array (const value_iterator &iter) noexcept
 Create an array at the given Internal array creation. More...
 
+ + + + + + + + + + +

+Static Protected Member Functions

static simdjson_inline simdjson_result< arraystart (value_iterator &iter) noexcept
 Begin array iteration. More...
 
static simdjson_inline simdjson_result< arraystart_root (value_iterator &iter) noexcept
 Begin array iteration from the root. More...
 
static simdjson_inline simdjson_result< arraystarted (value_iterator &iter) noexcept
 Begin array iteration. More...
 
+ + + + +

+Protected Attributes

value_iterator iter {}
 Iterator marking current position. More...
 
+

Detailed Description

+

A forward-only JSON array.

+ +

Definition at line 13 of file array.h.

+

Constructor & Destructor Documentation

+ +

◆ array() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array ()
+
+defaultnoexcept
+
+ +

Create a new invalid array.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+ +

◆ array() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array (const value_iterator & iter)
+
+protectednoexcept
+
+ +

Create an array at the given Internal array creation.

+

Call array::start() or array::started() instead of this.

+
Parameters
+ + +
iterThe iterator. Must either be at the start of the first element with iter.is_alive() == true, or past the [] with is_alive() == false if the array is empty. Will be moved into the resulting array.
+
+
+ +

Definition at line 43 of file array-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ at()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at (size_t index)
+
+noexcept
+
+ +

Get the value at the given index.

+

This function has linear-time complexity. This function should only be called once on an array instance since the array iterator is not reset between each call.

+
Returns
The value at the given index, or:
    +
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length
  • +
+
+ +

Definition at line 154 of file array-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at_pointer (std::string_view json_pointer)
+
+inlinenoexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard, interpreting the current node as the root of its own JSON document.

+

ondemand::parser parser; auto json = R"([ { "foo": { "a": [ 10, 20, 30 ] }} ])"_padded; auto doc = parser.iterate(json); doc.at_pointer("/0/foo/a/1") == 20

+

Note that at_pointer() called on the document automatically calls the document's rewind method between each call. It invalidates all previously accessed arrays, objects and values that have not been consumed. Yet it is not the case when calling at_pointer on an array instance: there is no rewind and no invalidation.

+

You may only call at_pointer on an array after it has been created, but before it has been first accessed. When calling at_pointer on an array, the pointer is advanced to the location indicated by the JSON pointer (in case of success). It is no longer possible to call at_pointer on the same array.

+

Also note that at_pointer() relies on find_field() which implies that we do not unescape keys when matching.

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 118 of file array-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::begin ()
+
+noexcept
+
+ +

Begin array iteration.

+

Part of the std::iterable interface.

+ +

Definition at line 66 of file array-inl.h.

+ +
+
+ +

◆ count_elements()

+ +
+
+ + + + + +
+ + + + + + + +
SIMDJSON_PUSH_DISABLE_WARNINGS SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::count_elements () &
+
+noexcept
+
+ +

This method scans the array and counts the number of elements.

+

The count_elements method should always be called before you have begun iterating through the array: it is expected that you are pointing at the beginning of the array. The runtime complexity is linear in the size of the array. After calling this function, if successful, the array is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+

To check that an array is empty, it is more performant to use the is_empty() method.

+ +

Definition at line 94 of file array-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::end ()
+
+noexcept
+
+ +

Sentinel representing the end of the array.

+

Part of the std::iterable interface.

+ +

Definition at line 72 of file array-inl.h.

+ +
+
+ +

◆ is_empty()

+ +
+
+ + + + + +
+ + + + + + + +
SIMDJSON_POP_DISABLE_WARNINGS simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::is_empty () &
+
+noexcept
+
+ +

This method scans the beginning of the array and checks whether the array is empty.

+

The runtime complexity is constant time. After calling this function, if successful, the array is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+ +

Definition at line 107 of file array-inl.h.

+ +
+
+ +

◆ raw_json()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::raw_json ()
+
+noexcept
+
+ +

Consumes the array and returns a string_view instance corresponding to the array as represented in JSON.

+

It points inside the original document.

+ +

Definition at line 81 of file array-inl.h.

+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::reset () &
+
+inlinenoexcept
+
+ +

Reset the iterator so that we are pointing back at the beginning of the array.

+

You should still consume values only once even if you can iterate through the array more than once. If you unescape a string within the array more than once, you have unsafe code. Note that rewinding an array means that you may need to reparse it anew: it is not a free operation.

+
Returns
true if the array contains some elements (not empty)
+ +

Definition at line 114 of file array-inl.h.

+ +
+
+ +

◆ start()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::start (value_iterator & iter)
+
+staticprotectednoexcept
+
+ +

Begin array iteration.

+
Parameters
+ + +
iterThe iterator. Must be where the initial [ is expected. Will be moved into the resulting array. @error INCORRECT_TYPE if the iterator is not at [.
+
+
+ +

Definition at line 48 of file array-inl.h.

+ +
+
+ +

◆ start_root()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::start_root (value_iterator & iter)
+
+staticprotectednoexcept
+
+ +

Begin array iteration from the root.

+
Parameters
+ + +
iterThe iterator. Must be where the initial [ is expected. Will be moved into the resulting array. @error INCORRECT_TYPE if the iterator is not at [. @error TAPE_ERROR if there is no closing ] at the end of the document.
+
+
+ +

Definition at line 55 of file array-inl.h.

+ +
+
+ +

◆ started()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::started (value_iterator & iter)
+
+staticprotectednoexcept
+
+ +

Begin array iteration.

+

This version of the method should be called after the initial [ has been verified, and is intended for use by switch statements that check the type of a value.

+
Parameters
+ + +
iterThe iterator. Must be after the initial [. Will be moved into the resulting array.
+
+
+ +

Definition at line 60 of file array-inl.h.

+ +
+
+

Member Data Documentation

+ +

◆ iter

+ +
+
+ + + + + +
+ + + + +
value_iterator simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::iter {}
+
+protected
+
+ +

Iterator marking current position.

+

iter.is_alive() == false indicates iteration is complete.

+ +

Definition at line 160 of file array.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • include/simdjson/generic/ondemand/array.h
  • +
  • include/simdjson/generic/ondemand/array-inl.h
  • +
+
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.js new file mode 100644 index 000000000..5cf9bc489 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.js @@ -0,0 +1,20 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array = +[ + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cc89dada9999c2ecc319954cc3fc90a", null ], + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a240a8118a5b6f76962425134cc284764", null ], + [ "at", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a1c97143f7637414d737d58daeec2eb84", null ], + [ "at_pointer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a73c2fc4db0c0b4083fafe706412d3b26", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cb4bf0ca1890a4a3c86f69be40f17f2", null ], + [ "consume", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a96aeba1fb4eac299260937b78e346ee8", null ], + [ "count_elements", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a9f23e6ab13ad93c43e705ce7fe6134c9", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae482e8f5fa3233babbcb9ccc29db5a15", null ], + [ "is_empty", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a371cf8909f04019606063e8538fd7109", null ], + [ "raw_json", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ad8a7f0b418fae60160e403f71a5a8088", null ], + [ "reset", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae7248918b09cb4cb1d866605c641679d", null ], + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#aec7be9f74f64c08fae57eaf36044f7a9", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "simdjson_result< array >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ad294ba09879c3b42b87298bbc334439b", null ], + [ "simdjson_result< value >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a9ad87deba0e08e8188b26485164889fb", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae5cda98fa74051d037c0c444c67efb15", null ], + [ "iter", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a2d84851f9e4fc07b3e518ea957e2d9b6", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator-members.html new file mode 100644 index 000000000..c1bd25efd --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator-members.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator Member List
+
+ +
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html new file mode 100644 index 000000000..14c47db66 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html @@ -0,0 +1,267 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator Class Reference
+
+
+ +

A forward-only JSON array. + More...

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline array_iterator () noexcept=default
 Create a new, invalid array iterator.
 
simdjson_inline simdjson_result< valueoperator* () noexcept
 Get the current element. More...
 
simdjson_inline bool operator== (const array_iterator &) const noexcept
 Check if we are at the end of the JSON. More...
 
simdjson_inline bool operator!= (const array_iterator &) const noexcept
 Check if there are more elements in the JSON array. More...
 
simdjson_inline array_iteratoroperator++ () noexcept
 Move to the next element. More...
 
+

Detailed Description

+

A forward-only JSON array.

+

This is an input_iterator, meaning:

    +
  • It is forward-only
  • +
  • * must be called exactly once per element.
  • +
  • ++ must be called exactly once in between each * (*, ++, *, ++, * ...)
  • +
+ +

Definition at line 19 of file array_iterator.h.

+

Member Function Documentation

+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator!= (const array_iterator) const
+
+noexcept
+
+ +

Check if there are more elements in the JSON array.

+

Part of the std::iterator interface.

+
Returns
true if there are more elements in the JSON array.
+ +

Definition at line 16 of file array_iterator-inl.h.

+ +
+
+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator* ()
+
+noexcept
+
+ +

Get the current element.

+

Part of the std::iterator interface.

+ +

Definition at line 9 of file array_iterator-inl.h.

+ +
+
+ +

◆ operator++()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline array_iterator & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator++ ()
+
+noexcept
+
+ +

Move to the next element.

+

Part of the std::iterator interface.

+ +

Definition at line 19 of file array_iterator-inl.h.

+ +
+
+ +

◆ operator==()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator== (const array_iteratorother) const
+
+noexcept
+
+ +

Check if we are at the end of the JSON.

+

Part of the std::iterator interface.

+
Returns
true if there are no more elements in the JSON array.
+ +

Definition at line 13 of file array_iterator-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.js new file mode 100644 index 000000000..b4b00803a --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.js @@ -0,0 +1,11 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator = +[ + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#aa330b23feb572f33d77516431572b643", null ], + [ "operator!=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#abbca17b48bd6c2b045b659076f1f64ce", null ], + [ "operator*", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a1577fb5a95f92a4a1aaa8eee6440d572", null ], + [ "operator++", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a55e0ae33e5e5835c841fd082edab5937", null ], + [ "operator==", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a20cd55e63cf5bdc1561f771b4db1ac1b", null ], + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a96cd9e5da7256c58b4af1227e9f61afb", null ], + [ "simdjson_result< array_iterator >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a7fbfbfc14133ece3a42d26db9e720840", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#ae5cda98fa74051d037c0c444c67efb15", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document-members.html new file mode 100644 index 000000000..7efc67a57 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document-members.html @@ -0,0 +1,174 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
at(size_t index) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
at_pointer(std::string_view json_pointer) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
begin() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
consume() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
count_elements() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
count_fields() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
current_depth() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
current_location() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
document() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
document(const document &other) noexcept=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
document(document &&other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
document(ondemand::json_iterator &&iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
DOCUMENT_DEPTHsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotectedstatic
end() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
find_field(std::string_view key) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
find_field(const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
find_field_unordered(std::string_view key) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
find_field_unordered(const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
get() &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
get(T &out) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get(T &out) &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get() &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get(T &out) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get(T &out) &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_array() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_bool() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_double() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_double_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_int64() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_int64_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_number() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_number_type() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_object() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_raw_json_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_root_value_iterator() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
get_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_uint64() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_uint64_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
get_value() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
is_alive() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
is_integer() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
is_negative() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
is_null() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
is_scalar() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
itersimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
operator array() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator bool() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator double() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator int64_t() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator object() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator raw_json_string() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator std::string_view() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator uint64_t() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator value() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator=(const document &other) noexcept=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator=(document &&other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator[](std::string_view key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
operator[](const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
raw_json() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
raw_json_token() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
resume_value_iterator() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
rewind() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
start(ondemand::json_iterator &&iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotectedstatic
start_or_resume_object() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
text(uint32_t idx) const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentprotected
to_debug_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentinline
type() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html new file mode 100644 index 000000000..510d3b2cc --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html @@ -0,0 +1,1859 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document Class Reference
+
+
+ +

A JSON document. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline document () noexcept=default
 Create a new invalid document. More...
 
+simdjson_inline document (const document &other) noexcept=delete
 
+simdjson_inline document (document &&other) noexcept=default
 
+simdjson_inline documentoperator= (const document &other) noexcept=delete
 
+simdjson_inline documentoperator= (document &&other) noexcept=default
 
simdjson_inline simdjson_result< arrayget_array () &noexcept
 Cast this JSON value to an array. More...
 
simdjson_inline simdjson_result< objectget_object () &noexcept
 Cast this JSON value to an object. More...
 
simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
 Cast this JSON value to an unsigned integer. More...
 
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
 Cast this JSON value (inside string) to an unsigned integer. More...
 
simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
 Cast this JSON value to a signed integer. More...
 
simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
 Cast this JSON value (inside string) to a signed integer. More...
 
simdjson_inline simdjson_result< double > get_double () noexcept
 Cast this JSON value to a double. More...
 
simdjson_inline simdjson_result< double > get_double_in_string () noexcept
 Cast this JSON value (inside string) to a double. More...
 
simdjson_inline simdjson_result< std::string_view > get_string () noexcept
 Cast this JSON value to a string. More...
 
simdjson_inline simdjson_result< raw_json_stringget_raw_json_string () noexcept
 Cast this JSON value to a raw_json_string. More...
 
simdjson_inline simdjson_result< bool > get_bool () noexcept
 Cast this JSON value to a bool. More...
 
simdjson_inline simdjson_result< valueget_value () noexcept
 Cast this JSON value to a value when the document is an object or an array. More...
 
simdjson_inline simdjson_result< bool > is_null () noexcept
 Checks if this JSON value is null. More...
 
template<typename T >
simdjson_inline simdjson_result< T > get () &noexcept
 Get this value as the given type. More...
 
+template<typename T >
simdjson_inline simdjson_result< T > get () &&noexcept
 
template<typename T >
simdjson_inline error_code get (T &out) &noexcept
 Get this value as the given type. More...
 
+template<typename T >
simdjson_inline error_code get (T &out) &&noexcept
 
simdjson_inline operator array () &noexcept(false)
 Cast this JSON value to an array. More...
 
simdjson_inline operator object () &noexcept(false)
 Cast this JSON value to an object. More...
 
simdjson_inline operator uint64_t () noexcept(false)
 Cast this JSON value to an unsigned integer. More...
 
simdjson_inline operator int64_t () noexcept(false)
 Cast this JSON value to a signed integer. More...
 
simdjson_inline operator double () noexcept(false)
 Cast this JSON value to a double. More...
 
simdjson_inline operator std::string_view () noexcept(false)
 Cast this JSON value to a string. More...
 
simdjson_inline operator raw_json_string () noexcept(false)
 Cast this JSON value to a raw_json_string. More...
 
simdjson_inline operator bool () noexcept(false)
 Cast this JSON value to a bool. More...
 
simdjson_inline operator value () noexcept(false)
 Cast this JSON value to a value. More...
 
simdjson_inline simdjson_result< size_t > count_elements () &noexcept
 This method scans the array and counts the number of elements. More...
 
simdjson_inline simdjson_result< size_t > count_fields () &noexcept
 This method scans the object and counts the number of key-value pairs. More...
 
simdjson_inline simdjson_result< valueat (size_t index) &noexcept
 Get the value at the given index in the array. More...
 
simdjson_inline simdjson_result< array_iteratorbegin () &noexcept
 Begin array iteration. More...
 
simdjson_inline simdjson_result< array_iteratorend () &noexcept
 Sentinel representing the end of the array. More...
 
simdjson_inline simdjson_result< valuefind_field (std::string_view key) &noexcept
 Look up a field by name on an object (order-sensitive). More...
 
+simdjson_inline simdjson_result< valuefind_field (const char *key) &noexcept
 
simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) &noexcept
 Look up a field by name on an object, without regard to key order. More...
 
+simdjson_inline simdjson_result< valuefind_field_unordered (const char *key) &noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (std::string_view key) &noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (const char *key) &noexcept
 
simdjson_inline simdjson_result< json_typetype () noexcept
 Get the type of this JSON value. More...
 
simdjson_inline simdjson_result< bool > is_scalar () noexcept
 Checks whether the document is a scalar (string, number, null, Boolean). More...
 
simdjson_inline bool is_negative () noexcept
 Checks whether the document is a negative number. More...
 
simdjson_inline simdjson_result< bool > is_integer () noexcept
 Checks whether the document is an integer number. More...
 
simdjson_inline simdjson_result< number_typeget_number_type () noexcept
 Determine the number type (integer or floating-point number) as quickly as possible. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< numberget_number () noexcept
 Attempt to parse an ondemand::number. More...
 
simdjson_inline simdjson_result< std::string_view > raw_json_token () noexcept
 Get the raw JSON for this token. More...
 
void rewind () noexcept
 Reset the iterator inside the document instance so we are pointing back at the beginning of the document, as if it had just been created. More...
 
+std::string to_debug_string () noexcept
 Returns debugging information.
 
bool is_alive () noexcept
 Some unrecoverable error conditions may render the document instance unusable. More...
 
+simdjson_result< const char * > current_location () noexcept
 Returns the current location in the document if in bounds.
 
simdjson_inline int32_t current_depth () const noexcept
 Returns the current depth in the document if in bounds. More...
 
simdjson_inline simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_inline simdjson_result< std::string_view > raw_json () noexcept
 Consumes the document and returns a string_view instance corresponding to the document as represented in JSON. More...
 
+template<>
simdjson_inline simdjson_result< arrayget () &noexcept
 
+template<>
simdjson_inline simdjson_result< raw_json_stringget () &&noexcept
 
+template<typename T >
simdjson_inline error_code get (T &out) &noexcept
 
+template<typename T >
simdjson_inline error_code get (T &out) &&noexcept
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

+simdjson_inline error_code consume () noexcept
 Consumes the document.
 
+simdjson_inline document (ondemand::json_iterator &&iter) noexcept
 
+simdjson_inline const uint8_t * text (uint32_t idx) const noexcept
 
+simdjson_inline value_iterator resume_value_iterator () noexcept
 
+simdjson_inline value_iterator get_root_value_iterator () noexcept
 
+simdjson_inline simdjson_result< objectstart_or_resume_object () noexcept
 
+ + + +

+Static Protected Member Functions

+static simdjson_inline document start (ondemand::json_iterator &&iter) noexcept
 
+ + + + +

+Protected Attributes

+json_iterator iter {}
 Current position in the document.
 
+ + + + +

+Static Protected Attributes

+static constexpr depth_t DOCUMENT_DEPTH = 0
 document depth is always 0
 
+

Detailed Description

+

A JSON document.

+

It holds a json_iterator instance.

+

Used by tokens to get text, and string buffer location.

+

You must keep the document around during iteration.

+ +

Definition at line 22 of file document.h.

+

Constructor & Destructor Documentation

+ +

◆ document()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::document ()
+
+defaultnoexcept
+
+ +

Create a new invalid document.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+

Member Function Documentation

+ +

◆ at()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at (size_t index) &
+
+noexcept
+
+ +

Get the value at the given index in the array.

+

This function has linear-time complexity. This function should only be called once on an array instance since the array iterator is not reset between each call.

+
Returns
The value at the given index, or:
    +
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length
  • +
+
+ +

Definition at line 161 of file document-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at_pointer (std::string_view json_pointer)
+
+noexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard.

+

ondemand::parser parser; auto json = R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("/foo/a/1") == 20

+

It is allowed for a key to be the empty string:

+

ondemand::parser parser; auto json = R"({ "": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("//a/1") == 20

+

Note that at_pointer() automatically calls rewind between each call. Thus all values, objects and arrays that you have created so far (including unescaped strings) are invalidated. After calling at_pointer, you need to consume the result: string values should be stored in your own variables, arrays should be decoded and stored in your own array-like structures and so forth.

+

Also note that at_pointer() relies on find_field() which implies that we do not unescape keys when matching

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
  • SCALAR_DOCUMENT_AS_VALUE if the json_pointer is empty and the document is not a scalar (see is_scalar() function).
  • +
+
+ +

Definition at line 242 of file document-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::begin () &
+
+noexcept
+
+ +

Begin array iteration.

+

Part of the std::iterable interface.

+ +

Definition at line 165 of file document-inl.h.

+ +
+
+ +

◆ count_elements()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_elements () &
+
+noexcept
+
+ +

This method scans the array and counts the number of elements.

+

The count_elements method should always be called before you have begun iterating through the array: it is expected that you are pointing at the beginning of the array. The runtime complexity is linear in the size of the array. After calling this function, if successful, the array is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+ +

Definition at line 147 of file document-inl.h.

+ +
+
+ +

◆ count_fields()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_fields () &
+
+noexcept
+
+ +

This method scans the object and counts the number of key-value pairs.

+

The count_fields method should always be called before you have begun iterating through the object: it is expected that you are pointing at the beginning of the object. The runtime complexity is linear in the size of the object. After calling this function, if successful, the object is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+

To check that an object is empty, it is more performant to use the is_empty() method.

+ +

Definition at line 154 of file document-inl.h.

+ +
+
+ +

◆ current_depth()

+ +
+
+ + + + + +
+ + + + + + + +
int32_t simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::current_depth () const
+
+inlinenoexcept
+
+ +

Returns the current depth in the document if in bounds.

+

E.g., 0 = finished with document 1 = document root value (could be [ or {, not yet known) 2 = , or } inside root array/object 3 = key or value inside root array/object.

+ +

Definition at line 27 of file document-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::end () &
+
+noexcept
+
+ +

Sentinel representing the end of the array.

+

Part of the std::iterable interface.

+ +

Definition at line 168 of file document-inl.h.

+ +
+
+ +

◆ find_field()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field (std::string_view key) &
+
+noexcept
+
+ +

Look up a field by name on an object (order-sensitive).

+

The following code reads z, then y, then x, and thus will not retrieve x or y if fed the JSON { "x": 1, "y": 2, "z": 3 }:

+
{c++}
+
simdjson::ondemand::parser parser;
+
auto obj = parser.parse(R"( { "x": 1, "y": 2, "z": 3 } )"_padded);
+
double z = obj.find_field("z");
+
double y = obj.find_field("y");
+
double x = obj.find_field("x");
+

Raw Keys: The lookup will be done against the raw key, and will not unescape keys. e.g. object["a"] will match { "a": 1 }, but will not match { "\u0061": 1 }.

+

You must consume the fields on an object one at a time. A request for a new key invalidates previous field values: it makes them unsafe. E.g., the array given by content["bids"].get_array() should not be accessed after you have called content["asks"].get_array(). You can detect such mistakes by first compiling and running the code in Debug mode (or with the macro SIMDJSON_DEVELOPMENT_CHECKS set to 1): an OUT_OF_ORDER_ITERATION error is generated.

+

You are expected to access keys only once. You should access the value corresponding to a key a single time. Doing object["mykey"].to_string()and then again object["mykey"].to_string() is an error.

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+ +

Definition at line 172 of file document-inl.h.

+ +
+
+ +

◆ find_field_unordered()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field_unordered (std::string_view key) &
+
+noexcept
+
+ +

Look up a field by name on an object, without regard to key order.

+

Performance Notes: This is a bit less performant than find_field(), though its effect varies and often appears negligible. It starts out normally, starting out at the last field; but if the field is not found, it scans from the beginning of the object to see if it missed it. That missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object in question is large. The fact that the extra code is there also bumps the executable size.

+

It is the default, however, because it would be highly surprising (and hard to debug) if the default behavior failed to look up a field just because it was in the wrong order–and many APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.

+

Use find_field() if you are sure fields will be in order (or are willing to treat it as if the field wasn't there when they aren't).

+

You must consume the fields on an object one at a time. A request for a new key invalidates previous field values: it makes them unsafe. E.g., the array given by content["bids"].get_array() should not be accessed after you have called content["asks"].get_array(). You can detect such mistakes by first compiling and running the code in Debug mode (or with the macro SIMDJSON_DEVELOPMENT_CHECKS set to 1): an OUT_OF_ORDER_ITERATION error is generated.

+

You are expected to access keys only once. You should access the value corresponding to a key a single time. Doing object["mykey"].to_string() and then again object["mykey"].to_string() is an error.

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+ +

Definition at line 178 of file document-inl.h.

+ +
+
+ +

◆ get() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result<T> simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get () &
+
+inlinenoexcept
+
+ +

Get this value as the given type.

+

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool

+

You may use get_double(), get_bool(), get_uint64(), get_int64(), get_object(), get_array(), get_raw_json_string(), or get_string() instead.

+
Returns
A value of the given type, parsed from the JSON.
+
+INCORRECT_TYPE If the JSON value is not the given type.
+ +

Definition at line 149 of file document.h.

+ +
+
+ +

◆ get() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get (T & out) &
+
+noexcept
+
+ +

Get this value as the given type.

+

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool, value

+

Be mindful that the document instance must remain in scope while you are accessing object, array and value instances.

+
Parameters
+ + +
outThis is set to a value of the given type, parsed from the JSON. If there is an error, this may not be initialized.
+
+
+
Returns
INCORRECT_TYPE If the JSON value is not an object.
+
+SUCCESS If the parse succeeded and the out parameter was set to the value.
+ +
+
+ +

◆ get_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_array () &
+
+noexcept
+
+ +

Cast this JSON value to an array.

+
Returns
An object that can be used to iterate the array.
+
+INCORRECT_TYPE If the JSON value is not an array.
+ +

Definition at line 62 of file document-inl.h.

+ +
+
+ +

◆ get_bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_bool ()
+
+noexcept
+
+ +

Cast this JSON value to a bool.

+
Returns
A bool value.
+
+INCORRECT_TYPE if the JSON value is not true or false.
+ +

Definition at line 103 of file document-inl.h.

+ +
+
+ +

◆ get_double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double ()
+
+noexcept
+
+ +

Cast this JSON value to a double.

+
Returns
A double.
+
+INCORRECT_TYPE If the JSON value is not a valid floating-point number.
+ +

Definition at line 91 of file document-inl.h.

+ +
+
+ +

◆ get_double_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to a double.

+
Returns
A double.
+
+INCORRECT_TYPE If the JSON value is not a valid floating-point number.
+ +

Definition at line 94 of file document-inl.h.

+ +
+
+ +

◆ get_int64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64 ()
+
+noexcept
+
+ +

Cast this JSON value to a signed integer.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit integer.
+ +

Definition at line 85 of file document-inl.h.

+ +
+
+ +

◆ get_int64_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to a signed integer.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit integer.
+ +

Definition at line 88 of file document-inl.h.

+ +
+
+ +

◆ get_number()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< number > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number ()
+
+noexcept
+
+ +

Attempt to parse an ondemand::number.

+

An ondemand::number may contain an integer value or a floating-point value, the simdjson library will autodetect the type. Thus it is a dynamically typed number. Before accessing the value, you must determine the detected type.

+

number.get_number_type() is number_type::signed_integer if we have an integer in [-9223372036854775808,9223372036854775808) You can recover the value by calling number.get_int64() and you have that number.is_int64() is true.

+

number.get_number_type() is number_type::unsigned_integer if we have an integer in [9223372036854775808,18446744073709551616) You can recover the value by calling number.get_uint64() and you have that number.is_uint64() is true.

+

Otherwise, number.get_number_type() has value number_type::floating_point_number and we have a binary64 number. You can recover the value by calling number.get_double() and you have that number.is_double() is true.

+

You must check the type before accessing the value: it is an error to call "get_int64()" when number.get_number_type() is not number_type::signed_integer and when number.is_int64() is false.

+ +

Definition at line 232 of file document-inl.h.

+ +
+
+ +

◆ get_number_type()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< number_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number_type ()
+
+noexcept
+
+ +

Determine the number type (integer or floating-point number) as quickly as possible.

+

This function does not fully validate the input. It is useful when you only need to classify the numbers, without parsing them.

+

If you are planning to retrieve the value or you need full validation, consider using the get_number() method instead: it will fully parse and validate the input, and give you access to the type: get_number().get_number_type().

+

get_number_type() is number_type::unsigned_integer if we have an integer greater or equal to 9223372036854775808 get_number_type() is number_type::signed_integer if we have an integer that is less than 9223372036854775808 Otherwise, get_number_type() has value number_type::floating_point_number

+

This function requires processing the number string, but it is expected to be faster than get_number().get_number_type() because it is does not parse the number value.

+
Returns
the type of the number
+ +

Definition at line 228 of file document-inl.h.

+ +
+
+ +

◆ get_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< object > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_object () &
+
+noexcept
+
+ +

Cast this JSON value to an object.

+
Returns
An object that can be used to look up or iterate fields.
+
+INCORRECT_TYPE If the JSON value is not an object.
+ +

Definition at line 66 of file document-inl.h.

+ +
+
+ +

◆ get_raw_json_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< raw_json_string > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_raw_json_string ()
+
+noexcept
+
+ +

Cast this JSON value to a raw_json_string.

+

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
+).

+
Returns
A pointer to the raw JSON for the given string.
+
+INCORRECT_TYPE if the JSON value is not a string.
+ +

Definition at line 100 of file document-inl.h.

+ +
+
+ +

◆ get_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_string ()
+
+noexcept
+
+ +

Cast this JSON value to a string.

+

The string is guaranteed to be valid UTF-8.

+

Important: Calling get_string() twice on the same document is an error.

+
Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
+
+INCORRECT_TYPE if the JSON value is not a string.
+ +

Definition at line 97 of file document-inl.h.

+ +
+
+ +

◆ get_uint64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64 ()
+
+noexcept
+
+ +

Cast this JSON value to an unsigned integer.

+

We decided that calling 'get_double()' on the JSON document '1.233 blabla' should give an error, so we check for trailing content.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.
+

We want to disallow trailing content. Thus, in several implementations below, we pass a 'true' parameter value to a get_root_value_iterator() method: this indicates that we disallow trailing content.

+ +

Definition at line 79 of file document-inl.h.

+ +
+
+ +

◆ get_uint64_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to an unsigned integer.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.
+ +

Definition at line 82 of file document-inl.h.

+ +
+
+ +

◆ get_value()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_value ()
+
+noexcept
+
+ +

Cast this JSON value to a value when the document is an object or an array.

+
Returns
A value if a JSON array or object cannot be found.
+
+SCALAR_DOCUMENT_AS_VALUE error is the document is a scalar (see is_scalar() function).
+ +

Definition at line 47 of file document-inl.h.

+ +
+
+ +

◆ is_alive()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_alive ()
+
+inlinenoexcept
+
+ +

Some unrecoverable error conditions may render the document instance unusable.

+

The is_alive() method returns true when the document is still suitable.

+ +

Definition at line 31 of file document-inl.h.

+ +
+
+ +

◆ is_integer()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_integer ()
+
+noexcept
+
+ +

Checks whether the document is an integer number.

+

Note that this requires to partially parse the number string. If the value is determined to be an integer, it may still not parse properly as an integer in subsequent steps (e.g., it might overflow).

+
Returns
true if the number if negative.
+ +

Definition at line 224 of file document-inl.h.

+ +
+
+ +

◆ is_negative()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_negative ()
+
+noexcept
+
+ +

Checks whether the document is a negative number.

+
Returns
true if the number if negative.
+ +

Definition at line 220 of file document-inl.h.

+ +
+
+ +

◆ is_null()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_null ()
+
+noexcept
+
+ +

Checks if this JSON value is null.

+

If and only if the value is null, then it is consumed (we advance). If we find a token that begins with 'n' but is not 'null', then an error is returned.

+
Returns
Whether the value is null.
+
+INCORRECT_TYPE If the JSON value begins with 'n' and is not 'null'.
+ +

Definition at line 106 of file document-inl.h.

+ +
+
+ +

◆ is_scalar()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_scalar ()
+
+noexcept
+
+ +

Checks whether the document is a scalar (string, number, null, Boolean).

+

Returns false when there it is an array or object.

+
Returns
true if the type is string, number, null, Boolean @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".
+ +

Definition at line 213 of file document-inl.h.

+ +
+
+ +

◆ operator array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator array () &
+
+noexcept
+
+ +

Cast this JSON value to an array.

+
Returns
An object that can be used to iterate the array.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not an array.
+
+
+ +

Definition at line 136 of file document-inl.h.

+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator bool ()
+
+noexcept
+
+ +

Cast this JSON value to a bool.

+
Returns
A bool value.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not true or false.
+
+
+ +

Definition at line 143 of file document-inl.h.

+ +
+
+ +

◆ operator double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator double ()
+
+noexcept
+
+ +

Cast this JSON value to a double.

+
Returns
A double.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a valid floating-point number.
+
+
+ +

Definition at line 140 of file document-inl.h.

+ +
+
+ +

◆ operator int64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator int64_t ()
+
+noexcept
+
+ +

Cast this JSON value to a signed integer.

+
Returns
A signed 64-bit integer.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit integer.
+
+
+ +

Definition at line 139 of file document-inl.h.

+ +
+
+ +

◆ operator object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator object () &
+
+noexcept
+
+ +

Cast this JSON value to an object.

+
Returns
An object that can be used to look up or iterate fields.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not an object.
+
+
+ +

Definition at line 137 of file document-inl.h.

+ +
+
+ +

◆ operator raw_json_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator raw_json_string ()
+
+noexcept
+
+ +

Cast this JSON value to a raw_json_string.

+

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
+).

+
Returns
A pointer to the raw JSON for the given string.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.
+
+
+ +

Definition at line 142 of file document-inl.h.

+ +
+
+ +

◆ operator std::string_view()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator std::string_view ()
+
+noexcept
+
+ +

Cast this JSON value to a string.

+

The string is guaranteed to be valid UTF-8.

+
Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.
+
+
+ +

Definition at line 141 of file document-inl.h.

+ +
+
+ +

◆ operator uint64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator uint64_t ()
+
+noexcept
+
+ +

Cast this JSON value to an unsigned integer.

+
Returns
A signed 64-bit integer.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit unsigned integer.
+
+
+ +

Definition at line 138 of file document-inl.h.

+ +
+
+ +

◆ operator value()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator value ()
+
+noexcept
+
+ +

Cast this JSON value to a value.

+
Returns
A value value.
+
Exceptions
+ + +
ifa JSON value cannot be found
+
+
+ +

Definition at line 144 of file document-inl.h.

+ +
+
+ +

◆ raw_json()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json ()
+
+noexcept
+
+ +

Consumes the document and returns a string_view instance corresponding to the document as represented in JSON.

+

It points inside the original byte array containing the JSON document.

+ +

Definition at line 197 of file document-inl.h.

+ +
+
+ +

◆ raw_json_token()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json_token ()
+
+noexcept
+
+ +

Get the raw JSON for this token.

+

The string_view will always point into the input buffer.

+

The string_view will start at the beginning of the token, and include the entire token as well as all spaces until the next token (or EOF). This means, for example, that a string token always begins with a " and is always terminated by the final ", possibly followed by a number of spaces.

+

The string_view is not null-terminated. If this is a scalar (string, number, boolean, or null), the character after the end of the string_view may be the padded buffer.

+

Tokens include:

    +
  • {
  • +
  • [
  • +
  • "a string (possibly with UTF-8 or backslashed characters like \\\")".
  • +
  • -1.2e-100
  • +
  • true
  • +
  • false
  • +
  • null
  • +
+ +

Definition at line 237 of file document-inl.h.

+ +
+
+ +

◆ rewind()

+ +
+
+ + + + + +
+ + + + + + + +
void simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::rewind ()
+
+inlinenoexcept
+
+ +

Reset the iterator inside the document instance so we are pointing back at the beginning of the document, as if it had just been created.

+

It invalidates all values, objects and arrays that you have created so far (including unescaped strings).

+ +

Definition at line 15 of file document-inl.h.

+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< json_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::type ()
+
+noexcept
+
+ +

Get the type of this JSON value.

+

It does not validate or consume the value. E.g., you must still call "is_null()" to check that a value is null even if "type()" returns json_type::null.

+

NOTE: If you're only expecting a value to be one type (a typical case), it's generally better to just call .get_double, .get_string, etc. and check for INCORRECT_TYPE (or just let it throw an exception).

+

@error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".

+ +

Definition at line 209 of file document-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.js new file mode 100644 index 000000000..7c1edf5ec --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.js @@ -0,0 +1,79 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document = +[ + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a54cd729a715a09bc9e706b7640233427", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2b80aa5b6842cffbfda3443353deef9d", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aad9a78e414f27d9dbdce321939df6480", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a8df43e73a52118b91681a13fc897d098", null ], + [ "at", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a01c6bde0574654dc22ea219c3b3dbf51", null ], + [ "at_pointer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a74484485f4a3d8dce5943b0cb60ac815", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1a450826deb3ba982c9f0ec6208cb246", null ], + [ "consume", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac16e0e51de3ce97fbd3fd0b1f947d552", null ], + [ "count_elements", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab408c2ea4be8874e3514b389c70a5667", null ], + [ "count_fields", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a24fd6a8aa158b80d851e3a57c9fef642", null ], + [ "current_depth", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1919a4ca6418c94ed54f026fbbda6f1d", null ], + [ "current_location", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a55603828cddcd2b6cfec1a487f0cd137", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7a79c0e85c9d40b53f0d4daeeb24111a", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a0256ad407d9babf298b8345804a0e80d", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab919032e611f7f4a1e8cc9eb47ad4dea", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae517777c3fe348036e27a357812599ef", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa89d66d993d0bffcbb85e303ad3950c2", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af6bd49bdc5649d5790412e7cbc3bda67", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a8b5ff9d9b350c3111dbfa39d080d3e7a", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a95786ae7a3190b8229358893476561f9", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7fe39fb73b6a4d9b1c97742dc2ae7b98", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2bbfe68b06975a98c12f46bcfbe7189d", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2bbfe68b06975a98c12f46bcfbe7189d", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af0af8707b5623e17c3bc9a329b7c4fa3", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af0af8707b5623e17c3bc9a329b7c4fa3", null ], + [ "get_array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aea545f106413a9bc01cd19e6630a580d", null ], + [ "get_bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a41eaac87582a465b4c9f9834701a837d", null ], + [ "get_double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9909be358c78a64bc9ab7e11e3f2a47b", null ], + [ "get_double_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a85e4b5250e316cc602b1b05bd097f771", null ], + [ "get_int64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6abc08fb48868bdc5104c885c46ced82", null ], + [ "get_int64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aac4a4837e66c8f1243722ab04ce45436", null ], + [ "get_number", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2b04a9cd8c4ff9b591dc3f2db95c69cf", null ], + [ "get_number_type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#abb3a7cc6f2391d26f27a28c16ca38c9c", null ], + [ "get_object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4620d364a637031ef38661f9fb215ebc", null ], + [ "get_raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#afa3370b930da937911cf61ec9b047c56", null ], + [ "get_root_value_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac8cfa8a237aa1297ecdff4bd1b02a7c1", null ], + [ "get_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#addfd2bc654d13906456ce44168d2ab68", null ], + [ "get_uint64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4d221850d045f1e7ada4dfaaee0e145c", null ], + [ "get_uint64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5cb63d14a99509d751f4be45063fec95", null ], + [ "get_value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab89eda435b4a68be578fcb5c3da73980", null ], + [ "is_alive", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a3170300bc331577a1435bb238cf3faff", null ], + [ "is_integer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af47e11e9925fd5d3d8a43cf0f7773992", null ], + [ "is_negative", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5083f65b71d7540ea785ec2b52604267", null ], + [ "is_null", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5ed59f01a0d4ad253f0e1c1f995ed0a7", null ], + [ "is_scalar", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac2ea8f4340d02d9062f81419da47500b", null ], + [ "operator array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a08307c0a5552cf8cb06613ed1de48eac", null ], + [ "operator bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7df7ba140c9d6398fef2c6963da82230", null ], + [ "operator double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae052e098bfbfde398845060a8d4f572f", null ], + [ "operator int64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5d50aa0d396fc49855d3c0c571b07a25", null ], + [ "operator object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6cd27fe6dc9062b5380db757d49c3f7b", null ], + [ "operator raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a78411bf36298e3468ac83f3562b75d83", null ], + [ "operator std::string_view", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a30e8df60ace82837a17e52d5e457ac52", null ], + [ "operator uint64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a847db7139319155ef5fa2d4af7063163", null ], + [ "operator value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ad12185e1993ebcad73eb5ce82f5de8f7", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a674f0683b36df385b61f03175743e840", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae5604a7f239d8acb6db8c100330f0d9d", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a361d226087a5153d5fcee19e128c764c", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1d52c7414c906bcb4a617e8473abe806", null ], + [ "raw_json", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa3a27654a19c386ad0c775cff258cf0c", null ], + [ "raw_json_token", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a58802e77b6fb25a3d2ec8a4d2482f9bf", null ], + [ "resume_value_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4bd4ffdde5ffcde60ec4b63e66746b5c", null ], + [ "rewind", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9cc053001e8246e6e65bbcbf3db035c4", null ], + [ "start_or_resume_object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2900a7dbf657a1f322e7926d136e3e63", null ], + [ "text", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#abe64d01448a884f15d0855a38ec40066", null ], + [ "to_debug_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9afdfb30ac2aacabce09a5c9d7fd375a", null ], + [ "type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a77bdebf4d2105efdd123cbf0a4906b1e", null ], + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a96cd9e5da7256c58b4af1227e9f61afb", null ], + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aec7be9f74f64c08fae57eaf36044f7a9", null ], + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ad4cca6de25737030e609419001f39186", null ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a403473bb5329fca6defc6299fb45b780", null ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#acd53905ae10cba58b4337aefe648aec6", null ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "ondemand::parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#afa9e1aecb407dd3e5fb179e3293c74ec", null ], + [ "token", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ad1520136c41afff5cd24bf19d9bf76e5", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae5cda98fa74051d037c0c444c67efb15", null ], + [ "iter", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a969e1000319391cd2bee3aed88481500", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference-members.html new file mode 100644 index 000000000..ff8c6f50a --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference-members.html @@ -0,0 +1,155 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
at(size_t index) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
begin() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
count_elements() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
count_fields() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
current_depth() const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
current_location() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
document_reference() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
document_reference(document &d) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
document_reference(const document_reference &other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
end() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
find_field(std::string_view key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
find_field(const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
find_field_unordered(std::string_view key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
find_field_unordered(const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_array() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_bool() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_double() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_double_in_string() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_int64() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_int64_in_string() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_number() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_number_type() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_object() &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_raw_json_string() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_string() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_uint64() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_uint64_in_string() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
get_value() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
is_integer() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
is_negative() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
is_null() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
is_scalar() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator array() &noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator bool() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator document &() const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator double() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator int64_t() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator object() &noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator raw_json_string() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator std::string_view() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator uint64_t() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator value() noexcept(false) (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator=(const document_reference &other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator[](std::string_view key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
operator[](const char *key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
raw_json() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
raw_json_token() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
rewind() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
type() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html new file mode 100644 index 000000000..338246490 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html @@ -0,0 +1,301 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference Class Reference
+
+
+ +

A document_reference is a thin wrapper around a document reference instance. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline document_reference (document &d) noexcept
 
+simdjson_inline document_reference (const document_reference &other) noexcept=default
 
+simdjson_inline document_referenceoperator= (const document_reference &other) noexcept=default
 
+simdjson_inline void rewind () noexcept
 
+simdjson_inline simdjson_result< arrayget_array () &noexcept
 
+simdjson_inline simdjson_result< objectget_object () &noexcept
 
simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
 The document_reference instances are used primarily/solely for streams of JSON documents. More...
 
+simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
 
+simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
 
+simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
 
+simdjson_inline simdjson_result< double > get_double () noexcept
 
+simdjson_inline simdjson_result< double > get_double_in_string () noexcept
 
+simdjson_inline simdjson_result< std::string_view > get_string () noexcept
 
+simdjson_inline simdjson_result< raw_json_stringget_raw_json_string () noexcept
 
+simdjson_inline simdjson_result< bool > get_bool () noexcept
 
+simdjson_inline simdjson_result< valueget_value () noexcept
 
+simdjson_inline simdjson_result< bool > is_null () noexcept
 
+simdjson_inline simdjson_result< std::string_view > raw_json () noexcept
 
+simdjson_inline operator document & () const noexcept
 
+simdjson_inline operator array () &noexcept(false)
 
+simdjson_inline operator object () &noexcept(false)
 
+simdjson_inline operator uint64_t () noexcept(false)
 
+simdjson_inline operator int64_t () noexcept(false)
 
+simdjson_inline operator double () noexcept(false)
 
+simdjson_inline operator std::string_view () noexcept(false)
 
+simdjson_inline operator raw_json_string () noexcept(false)
 
+simdjson_inline operator bool () noexcept(false)
 
+simdjson_inline operator value () noexcept(false)
 
+simdjson_inline simdjson_result< size_t > count_elements () &noexcept
 
+simdjson_inline simdjson_result< size_t > count_fields () &noexcept
 
+simdjson_inline simdjson_result< valueat (size_t index) &noexcept
 
+simdjson_inline simdjson_result< array_iteratorbegin () &noexcept
 
+simdjson_inline simdjson_result< array_iteratorend () &noexcept
 
+simdjson_inline simdjson_result< valuefind_field (std::string_view key) &noexcept
 
+simdjson_inline simdjson_result< valuefind_field (const char *key) &noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (std::string_view key) &noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (const char *key) &noexcept
 
+simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) &noexcept
 
+simdjson_inline simdjson_result< valuefind_field_unordered (const char *key) &noexcept
 
+simdjson_inline simdjson_result< json_typetype () noexcept
 
+simdjson_inline simdjson_result< bool > is_scalar () noexcept
 
+simdjson_inline simdjson_result< const char * > current_location () noexcept
 
+simdjson_inline int32_t current_depth () const noexcept
 
+simdjson_inline bool is_negative () noexcept
 
+simdjson_inline simdjson_result< bool > is_integer () noexcept
 
+simdjson_inline simdjson_result< number_typeget_number_type () noexcept
 
+simdjson_inline simdjson_result< numberget_number () noexcept
 
+simdjson_inline simdjson_result< std::string_view > raw_json_token () noexcept
 
+simdjson_inline simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 
+

Detailed Description

+

A document_reference is a thin wrapper around a document reference instance.

+ +

Definition at line 587 of file document.h.

+

Member Function Documentation

+ +

◆ get_uint64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference::get_uint64 ()
+
+noexcept
+
+ +

The document_reference instances are used primarily/solely for streams of JSON documents.

+

We decided that calling 'get_double()' on the JSON document '1.233 blabla' should give an error, so we check for trailing content.

+

However, for streams of JSON documents, we want to be able to start from "321" "321" "321" and parse it successfully as a stream of JSON documents, calling get_uint64_in_string() successfully each time.

+

To achieve this result, we pass a 'false' to a get_root_value_iterator() method: this indicates that we allow trailing content.

+ +

Definition at line 535 of file document-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.js new file mode 100644 index 000000000..777ab59e2 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.js @@ -0,0 +1,53 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference = +[ + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#af7ac8c3602f1562a4b135d76ebfd3cdb", null ], + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9d1ddeb339540ee9c6f00b9061f5e908", null ], + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a15bc891896726595062910787cd83ca0", null ], + [ "at", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ae7397a55b94d369ace8aff2913ed2467", null ], + [ "at_pointer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a8645c724ff217f11d09a69a3eb32355b", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ab6b572642eb8d84f12a32d881499011d", null ], + [ "count_elements", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ac18dc949283225dd5ae7e0a6e74b4563", null ], + [ "count_fields", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a28976d7c111d73aa8854e29d8ce9ae4f", null ], + [ "current_depth", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a1323b5ff763435dac92308f3d7fbbb79", null ], + [ "current_location", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a20ff7e15fb47ebcddb22caa4d95e8bee", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9143df905cf4360434f13f51e7888bb6", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ae75d7a3c0304784f8fd7a606a1502481", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a5368cab93ab6e2101cc79f821b347e38", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a977a06bd5c952970ec1d75bf6867a06f", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a1e103fd39e8b03b2800520a35ff87067", null ], + [ "get_array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#adde79c6a65389798d45d189f4580a4ea", null ], + [ "get_bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#aebe8ba5478ce02ef3703ab2ec1c20491", null ], + [ "get_double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a111e40e80bdb1d1668e5dcd2104df0fd", null ], + [ "get_double_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#aef16a749859e032b4c21cf6d399ee9d3", null ], + [ "get_int64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ab3a04fe9744d604964f4e782225dfb30", null ], + [ "get_int64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#adeed306c0ddd988d89f2d8488dcab0e4", null ], + [ "get_number", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a927085d5ba40b9b2965264977244ab11", null ], + [ "get_number_type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ab0058006c986910b2bb2c49cd6a420e5", null ], + [ "get_object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a8b5aa3ba538a00b6994e08c73aa3cd7b", null ], + [ "get_raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a90173c5537066e30269ad866bf405f9e", null ], + [ "get_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9090f793b7825131d0ee091e42c5dfd4", null ], + [ "get_uint64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a47b30548f71aca4317bdc4c6955cd719", null ], + [ "get_uint64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ade1e70006d43416bb0322c409947e57d", null ], + [ "get_value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a70388310dda561543af00fda3686fdf8", null ], + [ "is_integer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a7bfebc3db33cd306ce47e0914e45f311", null ], + [ "is_negative", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ac735941fc906d1eaf1c825bf715eda2f", null ], + [ "is_null", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#af737df31cc6466027676bdf70b60542d", null ], + [ "is_scalar", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#ae2f02ac7a3753b5ec51af17d3f0a7ba6", null ], + [ "operator array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#aa5a025095c9d89e777fe00b003ec09d2", null ], + [ "operator bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#aea2acb45845d4cc400f302f6082a0b07", null ], + [ "operator document &", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a40d89015165021b282f1dced6ac4fef2", null ], + [ "operator double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a46b1be5c6c28cc6ce325dde7aef333c5", null ], + [ "operator int64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9b781ec894d5f53f6e5c3a86e8a7e5e4", null ], + [ "operator object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a475c294822e53601cfa81ff988e312f7", null ], + [ "operator raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#adf841c95ea88ad247d3cdd3d74303523", null ], + [ "operator std::string_view", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a3643d42beba9c8395fc8678f61d4abd1", null ], + [ "operator uint64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9b8084a06fd6c8b0662d378e4f8f8760", null ], + [ "operator value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a779798aa7b1ac3485b7f99c9dd7b2277", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9166cac415950ee5b49c6b7fe9848b37", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a77cae667cb6d51f068934a0fa7fc8a48", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a06a16c1552dba29c05e9c04a04f048c4", null ], + [ "raw_json", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#adec459feebebf8af6c5b999b9489b420", null ], + [ "raw_json_token", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a3992b4034cae481a6327f306bcb95fd3", null ], + [ "rewind", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a9f1a96015a210b1b349ccd5cd37af7f5", null ], + [ "type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a063bffcae0c43b9bbfc5fbad1e3d5ce7", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream-members.html new file mode 100644 index 000000000..d16c16249 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream-members.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html new file mode 100644 index 000000000..1e45e1376 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html @@ -0,0 +1,221 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream Class Reference
+
+
+ +

A forward-only stream of documents. + More...

+ + + + +

+Classes

class  iterator
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline document_stream () noexcept
 Construct an uninitialized document_stream. More...
 
+simdjson_inline document_stream (document_stream &&other) noexcept=default
 Move one document_stream to another.
 
+simdjson_inline document_streamoperator= (document_stream &&other) noexcept=default
 Move one document_stream to another.
 
+size_t size_in_bytes () const noexcept
 Returns the input size in bytes.
 
size_t truncated_bytes () const noexcept
 After iterating through the stream, this method returns the number of bytes that were not parsed at the end of the stream. More...
 
+simdjson_inline iterator begin () noexcept
 Start iterating the documents in the stream.
 
+simdjson_inline iterator end () noexcept
 The end of the stream, for iterator comparison purposes.
 
+

Detailed Description

+

A forward-only stream of documents.

+

Produced by parser::iterate_many.

+ +

Definition at line 74 of file document_stream.h.

+

Constructor & Destructor Documentation

+ +

◆ document_stream()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::document_stream ()
+
+noexcept
+
+ +

Construct an uninitialized document_stream.

+
{c++}
+ +
auto error = parser.iterate_many(json).get(docs);
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+
+

Definition at line 105 of file document_stream-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ truncated_bytes()

+ +
+
+ + + + + +
+ + + + + + + +
size_t simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::truncated_bytes () const
+
+inlinenoexcept
+
+ +

After iterating through the stream, this method returns the number of bytes that were not parsed at the end of the stream.

+

If truncated_bytes() differs from zero, then the input was truncated maybe because incomplete JSON documents were found at the end of the stream. You may need to process the bytes in the interval [size_in_bytes()-truncated_bytes(), size_in_bytes()).

+

You should only call truncated_bytes() after streaming through all documents, like so:

+

document_stream stream = parser.iterate_many(json,window); for(auto & doc : stream) { // do something with doc } size_t truncated = stream.truncated_bytes();

+ +

Definition at line 128 of file document_stream-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.js new file mode 100644 index 000000000..79afdc678 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.js @@ -0,0 +1,17 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream = +[ + [ "iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator" ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#af12dc14d4d16b9f4f4602c738678cb0c", null ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0ac2a6ad0393eb4330b440c8c09290f2", null ], + [ "~document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a9b47c7cebf184d423c6f093009c42efb", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ae88253d9f6cef0dfc0bd05c45cdfc06f", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0a0d40ed80767c01232a6aacb6258b2b", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ac3c10596a0934f4f5375b986a35f90db", null ], + [ "size_in_bytes", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a43723c86c43ee3533a3278b5cd2fe2d0", null ], + [ "truncated_bytes", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#acd3fd372dfd30fcce1d6a103c6682d0e", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "internal::simdjson_result_base< ondemand::document_stream >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a5eb1bad4cef7c21b752fd352338c76ef", null ], + [ "json_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a7a0d2e5fad4f195a866b6baa15846d39", null ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a8de78aa991dff0fc519d5c721ea49733", null ], + [ "simdjson_result< ondemand::document_stream >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a56a55f81b4b5c13d81e811266c2d1f8f", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator-members.html new file mode 100644 index 000000000..3ddd21436 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator-members.html @@ -0,0 +1,114 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html new file mode 100644 index 000000000..a5eeb60e6 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html @@ -0,0 +1,189 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator Class Reference
+
+
+ + + + + + + + + + +

+Public Types

+using value_type = simdjson_result< document >
 
+using reference = value_type
 
+using difference_type = std::ptrdiff_t
 
+using iterator_category = std::input_iterator_tag
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline iterator () noexcept
 Default constructor.
 
+simdjson_inline simdjson_result< ondemand::document_reference > operator* () noexcept
 Get the current document (or error).
 
+iteratoroperator++ () noexcept
 Advance to the next document (prefix).
 
simdjson_inline bool operator!= (const iterator &other) const noexcept
 Check if we're at the end yet. More...
 
+error_code error () const noexcept
 Returns error of the stream (if any).
 
+

Detailed Description

+
+

Definition at line 117 of file document_stream.h.

+

Member Function Documentation

+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator!= (const iteratorother) const
+
+noexcept
+
+ +

Check if we're at the end yet.

+
Parameters
+ + +
otherthe end iterator to compare to.
+
+
+ +

Definition at line 173 of file document_stream-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.js new file mode 100644 index 000000000..b416f4238 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.js @@ -0,0 +1,15 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator = +[ + [ "difference_type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#adee0c974b66f734b3b67f5600bbe594f", null ], + [ "iterator_category", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#aafaa3ab05db7276e461c4da811aa821c", null ], + [ "reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#acc70c0658a48285f116ff0e43fdb9167", null ], + [ "value_type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a3e884d6b05a6d7004c054024c14f42d5", null ], + [ "iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a3b0ac5e3e64e53167a011afdd0b77345", null ], + [ "error", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a4111757108422ffaf647024319205d5c", null ], + [ "operator!=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a05396b8e8322363b523b3bf9730a31f1", null ], + [ "operator*", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a5fe3ce985cc1921d5917667d6b25841b", null ], + [ "operator++", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a03e0c8d93b86a18b10370d51b99548ef", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a403473bb5329fca6defc6299fb45b780", null ], + [ "json_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a7a0d2e5fad4f195a866b6baa15846d39", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field-members.html new file mode 100644 index 000000000..5a8d8a7f8 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field-members.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field Member List
+
+ +
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html new file mode 100644 index 000000000..9dc477977 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html @@ -0,0 +1,255 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field Class Reference
+
+
+ +

A JSON field (key/value pair) in an object. + More...

+
+Inheritance diagram for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field:
+
+
+ +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline field () noexcept
 Create a new invalid field. More...
 
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > unescaped_key () noexcept
 Get the key as a string_view (for higher speed, consider raw_key). More...
 
simdjson_inline raw_json_string key () const noexcept
 Get the key as a raw_json_string. More...
 
+simdjson_inline ondemand::value & value () &noexcept
 Get the field value.
 
+simdjson_inline ondemand::value value () &&noexcept
 
+ + + +

+Protected Member Functions

+simdjson_inline field (raw_json_string key, ondemand::value &&value) noexcept
 
+ + + + + +

+Static Protected Member Functions

+static simdjson_inline simdjson_result< fieldstart (value_iterator &parent_iter) noexcept
 
+static simdjson_inline simdjson_result< fieldstart (const value_iterator &parent_iter, raw_json_string key) noexcept
 
+

Detailed Description

+

A JSON field (key/value pair) in an object.

+

Returned from object iteration.

+

Extends from std::pair<raw_json_string, value> so you can use C++ algorithms that rely on pairs.

+ +

Definition at line 14 of file field.h.

+

Constructor & Destructor Documentation

+ +

◆ field()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::field ()
+
+noexcept
+
+ +

Create a new invalid field.

+

Exists so you can declare a variable and later assign to it before use.

+ +

Definition at line 6 of file field-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ key()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline raw_json_string simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::key () const
+
+noexcept
+
+ +

Get the key as a raw_json_string.

+

Can be used for direct comparison with an unescaped C string: e.g., key() == "test".

+ +

Definition at line 31 of file field-inl.h.

+ +
+
+ +

◆ unescaped_key()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::unescaped_key ()
+
+noexcept
+
+ +

Get the key as a string_view (for higher speed, consider raw_key).

+

We deliberately use a more cumbersome name (unescaped_key) to force users to think twice about using it.

+

This consumes the key: once you have called unescaped_key(), you cannot call it again nor can you call key().

+ +

Definition at line 24 of file field-inl.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • include/simdjson/generic/ondemand/field.h
  • +
  • include/simdjson/generic/ondemand/field-inl.h
  • +
+
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.js new file mode 100644 index 000000000..b4113dfe9 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.js @@ -0,0 +1,11 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field = +[ + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a9415aecf3526ad6081be495c9be61b43", null ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a7d565f0d79dec8bf19c307e464452650", null ], + [ "key", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a4f49d8e89feb3ca69cf85ce2aea80c0f", null ], + [ "unescaped_key", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a49425afaaf0874b07c1f8e4ed1d86cf0", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a73a389f50a576d2a5eb315dbd8abced7", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#ad5f688629f86f80dff49cab2270b1967", null ], + [ "object_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a56fd10d90f6366433ca435a221830af7", null ], + [ "simdjson_result< field >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#ac91f0ec4a1944cba079924b366424f89", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.png b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.png new file mode 100644 index 0000000000000000000000000000000000000000..43bf9ccf4abc15371574dbdc1c933672ae9161da GIT binary patch literal 1130 zcmeAS@N?(olHy`uVBq!ia0y~yUGIt+I6W2Ctx9aK@#La_`LI z_DjE!{C)XZSJe%V1 z;Q0N0(>mHGr@cus+5TLnrddT*TX41KU(S2C?&~JS2eL~getq13edTu7!o>77fAbf; zUasu9UQ7J7)$NbTZ=}KvMUL;wGFM?SEX^%wE$-N>+H_WrDSFNH&(9|39lG@^ea+ci zhMYIMn!m2GPVQO!LC4f}Qe61EsZZ7RS~e7J+xBmc!(QatxX!wIX5`5;I)M!PUE>*48+=5=8ggoDMZ+6X zK&;pmV&M%jK$iK61x!m;Z=fxHZJuaqtUYsPDi^Z`d~@IV>5sL$jC<^7_3bX*nBhC!bq=rlhmy0F(dh}F&cI*a~|7@qGu`I~2NJY;j^*4k$ZhSy?qzlz;E zZyXVOf%P=k$+_Dr-(Kvfc2&61JMEcv*oJ>+ZVOzwaqwhK>d%iG+pj*_Gvk-on~i;r z$@4y!eO+DHUMeFP8_9P0vBcY$`vCTJQXT=;c8hI|UNw8n)d( ze7dJ}R%V0g7Kywc46n^zRCP2f2}r%|J`farUCBT!w_I~wddjg&{z=j|&%fC6r#hnl z^VRb+yC0lBEB0EdWbdKhrgrO||9K~#y#LJc#>w3;RhZUPUEvR4I`*7Dd2j07`uyi| zNo!MBf2@;B*LL81Ag#5A;UzNOl>m-V)mQQyx6X + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
at_pointer(std::string_view json_pointer) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectinline
begin() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
consume() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotected
count_fields() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
end() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
find_field(std::string_view key) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
find_field(std::string_view key) &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
find_field_raw(const std::string_view key) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotected
find_field_unordered(std::string_view key) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
find_field_unordered(std::string_view key) &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
is_empty() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectinline
iter (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotected
object() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
object(const value_iterator &iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotected
operator[](std::string_view key) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
operator[](std::string_view key) &&noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
raw_json() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object
reset() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectinline
resume(const value_iterator &iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotectedstatic
start(value_iterator &iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotectedstatic
start_root(value_iterator &iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotectedstatic
started(value_iterator &iter) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectprotectedstatic
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html new file mode 100644 index 000000000..7a05bb85d --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html @@ -0,0 +1,518 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object Class Reference
+
+
+ +

A forward-only JSON object field iterator. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline object () noexcept=default
 Create a new invalid object. More...
 
+simdjson_inline simdjson_result< object_iteratorbegin () noexcept
 
+simdjson_inline simdjson_result< object_iteratorend () noexcept
 
simdjson_inline simdjson_result< valuefind_field (std::string_view key) &noexcept
 Look up a field by name on an object (order-sensitive). More...
 
+simdjson_inline simdjson_result< valuefind_field (std::string_view key) &&noexcept
 
simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) &noexcept
 Look up a field by name on an object, without regard to key order. More...
 
+simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) &&noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (std::string_view key) &noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (std::string_view key) &&noexcept
 
simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_result< bool > reset () &noexcept
 Reset the iterator so that we are pointing back at the beginning of the object. More...
 
simdjson_result< bool > is_empty () &noexcept
 This method scans the beginning of the object and checks whether the object is empty. More...
 
simdjson_inline simdjson_result< size_t > count_fields () &noexcept
 This method scans the object and counts the number of key-value pairs. More...
 
simdjson_inline simdjson_result< std::string_view > raw_json () noexcept
 Consumes the object and returns a string_view instance corresponding to the object as represented in JSON. More...
 
+ + + + + + + + +

+Protected Member Functions

simdjson_inline error_code consume () noexcept
 Go to the end of the object, no matter where you are right now. More...
 
+simdjson_inline object (const value_iterator &iter) noexcept
 
+simdjson_warn_unused simdjson_inline error_code find_field_raw (const std::string_view key) noexcept
 
+ + + + + + + + + +

+Static Protected Member Functions

+static simdjson_inline simdjson_result< objectstart (value_iterator &iter) noexcept
 
+static simdjson_inline simdjson_result< objectstart_root (value_iterator &iter) noexcept
 
+static simdjson_inline simdjson_result< objectstarted (value_iterator &iter) noexcept
 
+static simdjson_inline object resume (const value_iterator &iter) noexcept
 
+ + + +

+Protected Attributes

+value_iterator iter {}
 
+

Detailed Description

+

A forward-only JSON object field iterator.

+ +

Definition at line 10 of file object.h.

+

Constructor & Destructor Documentation

+ +

◆ object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::object ()
+
+defaultnoexcept
+
+ +

Create a new invalid object.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+

Member Function Documentation

+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::at_pointer (std::string_view json_pointer)
+
+inlinenoexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard, interpreting the current node as the root of its own JSON document.

+

ondemand::parser parser; auto json = R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("/foo/a/1") == 20

+

It is allowed for a key to be the empty string:

+

ondemand::parser parser; auto json = R"({ "": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("//a/1") == 20

+

Note that at_pointer() called on the document automatically calls the document's rewind method between each call. It invalidates all previously accessed arrays, objects and values that have not been consumed. Yet it is not the case when calling at_pointer on an object instance: there is no rewind and no invalidation.

+

You may call at_pointer more than once on an object, but each time the pointer is advanced to be within the value matched by the key indicated by the JSON pointer query. Thus any preceding key (as well as the current key) can no longer be used with following JSON pointer calls.

+

Also note that at_pointer() relies on find_field() which implies that we do not unescape keys when matching.

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 102 of file object-inl.h.

+ +
+
+ +

◆ consume()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::consume ()
+
+protectednoexcept
+
+ +

Go to the end of the object, no matter where you are right now.

+

whenever you are pointing at a key, calling skip_child() is unsafe because you will hit a string and you will assume that it is string value, and this mistake will lead you to make bad depth computation.

+

We want to 'consume' the key. We could really just do _json_iter->return_current_and_advance(); at this point, but, for clarity, we will use the high-level API to eat the key. We assume that the compiler optimizes away most of the work.

+ +

Definition at line 44 of file object-inl.h.

+ +
+
+ +

◆ count_fields()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::count_fields () &
+
+noexcept
+
+ +

This method scans the object and counts the number of key-value pairs.

+

The count_fields method should always be called before you have begun iterating through the object: it is expected that you are pointing at the beginning of the object. The runtime complexity is linear in the size of the object. After calling this function, if successful, the object is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+

To check that an object is empty, it is more performant to use the is_empty() method.

+

Performance hint: You should only call count_fields() as a last resort as it may require scanning the document twice or more.

+ +

Definition at line 142 of file object-inl.h.

+ +
+
+ +

◆ find_field()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field (std::string_view key) &
+
+noexcept
+
+ +

Look up a field by name on an object (order-sensitive).

+

The following code reads z, then y, then x, and thus will not retrieve x or y if fed the JSON { "x": 1, "y": 2, "z": 3 }:

+
{c++}
+
simdjson::ondemand::parser parser;
+
auto obj = parser.parse(R"( { "x": 1, "y": 2, "z": 3 } )"_padded);
+
double z = obj.find_field("z");
+
double y = obj.find_field("y");
+
double x = obj.find_field("x");
+

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

+

Raw Keys: The lookup will be done against the raw key, and will not unescape keys. e.g. object["a"] will match { "a": 1 }, but will not match { "\u0061": 1 }.

+

You must consume the fields on an object one at a time. A request for a new key invalidates previous field values: it makes them unsafe. The value instance you get from content["bids"] becomes invalid when you call content["asks"]. The array given by content["bids"].get_array() should not be accessed after you have called content["asks"].get_array(). You can detect such mistakes by first compiling and running the code in Debug mode (or with the macro SIMDJSON_DEVELOPMENT_CHECKS set to 1): an OUT_OF_ORDER_ITERATION error is generated.

+

You are expected to access keys only once. You should access the value corresponding to a key a single time. Doing object["mykey"].to_string() and then again object["mykey"].to_string() is an error.

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+ +

Definition at line 23 of file object-inl.h.

+ +
+
+ +

◆ find_field_unordered()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field_unordered (std::string_view key) &
+
+noexcept
+
+ +

Look up a field by name on an object, without regard to key order.

+

Performance Notes: This is a bit less performant than find_field(), though its effect varies and often appears negligible. It starts out normally, starting out at the last field; but if the field is not found, it scans from the beginning of the object to see if it missed it. That missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object in question is large. The fact that the extra code is there also bumps the executable size.

+

It is the default, however, because it would be highly surprising (and hard to debug) if the default behavior failed to look up a field just because it was in the wrong order–and many APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.

+

Use find_field() if you are sure fields will be in order (or are willing to treat it as if the field wasn't there when they aren't).

+

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

+

You must consume the fields on an object one at a time. A request for a new key invalidates previous field values: it makes them unsafe. The value instance you get from content["bids"] becomes invalid when you call content["asks"]. The array given by content["bids"].get_array() should not be accessed after you have called content["asks"].get_array(). You can detect such mistakes by first compiling and running the code in Debug mode (or with the macro SIMDJSON_DEVELOPMENT_CHECKS set to 1): an OUT_OF_ORDER_ITERATION error is generated.

+

You are expected to access keys only once. You should access the value corresponding to a key a single time. Doing object["mykey"].to_string() and then again object["mykey"].to_string() is an error.

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+ +

Definition at line 5 of file object-inl.h.

+ +
+
+ +

◆ is_empty()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::is_empty () &
+
+inlinenoexcept
+
+ +

This method scans the beginning of the object and checks whether the object is empty.

+

The runtime complexity is constant time. After calling this function, if successful, the object is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+ +

Definition at line 154 of file object-inl.h.

+ +
+
+ +

◆ raw_json()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::raw_json ()
+
+noexcept
+
+ +

Consumes the object and returns a string_view instance corresponding to the object as represented in JSON.

+

It points inside the original byte array containing the JSON document.

+ +

Definition at line 70 of file object-inl.h.

+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::reset () &
+
+inlinenoexcept
+
+ +

Reset the iterator so that we are pointing back at the beginning of the object.

+

You should still consume values only once even if you can iterate through the object more than once. If you unescape a string within the object more than once, you have unsafe code. Note that rewinding an object means that you may need to reparse it anew: it is not a free operation.

+
Returns
true if the object contains some elements (not empty)
+ +

Definition at line 161 of file object-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.js new file mode 100644 index 000000000..901d8667d --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.js @@ -0,0 +1,24 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object = +[ + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a034b27d7ff75832a574c2069af267111", null ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a6724eb440d3fb40018a9a47c715352ed", null ], + [ "at_pointer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae3d80f8e7f31c319fe6ee09c0860df83", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aeb4a70edd1808f36210460ed410e8dae", null ], + [ "consume", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#add102ee85423a75e22e4d7ca9a3eaacd", null ], + [ "count_fields", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aef6872e07743217fe2e2abe790a21d4c", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ad742392a9223e096f1be16b7bbf20ca8", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ab6b2e9769ce75fc625aa91504f26d82b", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aa25020165cc5a191026a243a10da6558", null ], + [ "find_field_raw", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#affa38e7fd0778672e7dd02916a97ad21", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#adbe7322f665109b9816c5bcb9c10a9cb", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a55d8bd31e2f5e6b10986af2f48a544fc", null ], + [ "is_empty", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ad210f9115679a625ada433add55eff51", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a60ad1270b86c6a0c27c03b685aec9666", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a9f1cd920980a8bc0330d2c7f1f0be74b", null ], + [ "raw_json", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a71600033791f9c6bbc9f40fb2f82fdc8", null ], + [ "reset", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae0bc6b9803e0c989e9defaf3edcaaae4", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "simdjson_result< object >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aa14649f261616070b04829c9ba6b28da", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae5cda98fa74051d037c0c444c67efb15", null ], + [ "iter", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a62b96abab9d1338d5f5e513f90f8d7d0", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator-members.html new file mode 100644 index 000000000..25cf20fec --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator-members.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator Member List
+
+ +
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html new file mode 100644 index 000000000..d23e0743d --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html @@ -0,0 +1,161 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator Class Reference
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline object_iterator () noexcept=default
 Create a new invalid object_iterator. More...
 
+simdjson_inline simdjson_result< fieldoperator* () noexcept
 
+simdjson_inline bool operator== (const object_iterator &) const noexcept
 
+simdjson_inline bool operator!= (const object_iterator &) const noexcept
 
+simdjson_inline object_iteratoroperator++ () noexcept
 
+

Detailed Description

+
+

Definition at line 9 of file object_iterator.h.

+

Constructor & Destructor Documentation

+ +

◆ object_iterator()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator::object_iterator ()
+
+defaultnoexcept
+
+ +

Create a new invalid object_iterator.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.js new file mode 100644 index 000000000..448d101e6 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.js @@ -0,0 +1,10 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator = +[ + [ "object_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a9fce67dabeb5dcccd16fa531febec666", null ], + [ "operator!=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#aabb56f8e0f6199b91f500be3735091b0", null ], + [ "operator*", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a84bc50aa1d7219483cd2e91819152875", null ], + [ "operator++", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a968c571432f10eeda2a2b63433957e1e", null ], + [ "operator==", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#ad7ddcd7b99fb41c8efe932daf2d216a3", null ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "simdjson_result< object_iterator >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a4bda7b73aebddb2b5a66670d70110bc5", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser-members.html new file mode 100644 index 000000000..7ac51895e --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser-members.html @@ -0,0 +1,131 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
capacity() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(padded_string_view json) &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(const char *json, size_t len, size_t capacity) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(const uint8_t *json, size_t len, size_t capacity) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(std::string_view json, size_t capacity) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(const std::string &json) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(const simdjson_result< padded_string > &json) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(const simdjson_result< padded_string_view > &json) &noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate(padded_string &&json) &noexcept=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
iterate_many(const uint8_t *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
iterate_many(const char *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
iterate_many(const std::string &s, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
iterate_many(const std::string &&s, size_t batch_size)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
iterate_many(const padded_string &s, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
iterate_many(const padded_string &&s, size_t batch_size)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
max_capacity() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
max_depth() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
operator=(const parser &other)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
operator=(parser &&other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinlineexplicit
parser(parser &&other) noexcept=default (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
parser(const parser &other)=delete (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
set_max_capacity(size_t max_capacity) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
unescape(raw_json_string in, uint8_t *&dst) const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser
~parser() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserinline
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html new file mode 100644 index 000000000..9ce8d5d22 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html @@ -0,0 +1,510 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser Class Reference
+
+
+ +

A JSON fragment iterator. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 parser (size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
 Create a JSON parser. More...
 
parser (parser &&other) noexcept=default
 
+simdjson_inline parser (const parser &other)=delete
 
+simdjson_inline parseroperator= (const parser &other)=delete
 
+simdjson_inline parseroperator= (parser &&other) noexcept=default
 
~parser () noexcept=default
 Deallocate the JSON parser.
 
simdjson_warn_unused simdjson_result< documentiterate (padded_string_view json) &noexcept
 Start iterating an on-demand JSON document. More...
 
+simdjson_warn_unused simdjson_result< documentiterate (const char *json, size_t len, size_t capacity) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (const uint8_t *json, size_t len, size_t capacity) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (std::string_view json, size_t capacity) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (const std::string &json) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (const simdjson_result< padded_string > &json) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (const simdjson_result< padded_string_view > &json) &noexcept
 
+simdjson_warn_unused simdjson_result< documentiterate (padded_string &&json) &noexcept=delete
 
simdjson_result< document_streamiterate_many (const uint8_t *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
 Parse a buffer containing many JSON documents. More...
 
+simdjson_result< document_streamiterate_many (const char *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamiterate_many (const std::string &s, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamiterate_many (const std::string &&s, size_t batch_size)=delete
 
+simdjson_result< document_streamiterate_many (const padded_string &s, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamiterate_many (const padded_string &&s, size_t batch_size)=delete
 
+simdjson_inline size_t capacity () const noexcept
 The capacity of this parser (the largest document it can process).
 
+simdjson_inline size_t max_capacity () const noexcept
 The maximum capacity of this parser (the largest document it is allowed to process).
 
+simdjson_inline void set_max_capacity (size_t max_capacity) noexcept
 
simdjson_inline size_t max_depth () const noexcept
 The maximum depth of this parser (the most deeply nested objects and arrays it can process). More...
 
simdjson_warn_unused error_code allocate (size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
 Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max_depth depth. More...
 
simdjson_inline simdjson_result< std::string_view > unescape (raw_json_string in, uint8_t *&dst) const noexcept
 Unescape this JSON string, replacing \ with \,
+ with newline, etc. More...
 
+

Detailed Description

+

A JSON fragment iterator.

+

This holds the actual iterator as well as the buffer for writing strings.

+ +

Definition at line 34 of file parser.h.

+

Constructor & Destructor Documentation

+ +

◆ parser()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::parser (size_t max_capacity = SIMDJSON_MAXSIZE_BYTES)
+
+inlineexplicitnoexcept
+
+ +

Create a JSON parser.

+

The new parser will have zero capacity.

+ +

Definition at line 5 of file parser-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ allocate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::allocate (size_t capacity,
size_t max_depth = DEFAULT_MAX_DEPTH 
)
+
+noexcept
+
+ +

Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max_depth depth.

+

The max_depth parameter is only relevant when the macro SIMDJSON_DEVELOPMENT_CHECKS is set to true. The document's instance current_depth() method should be used to monitor the parsing depth and limit it if desired.

+
Parameters
+ + + +
capacityThe new capacity.
max_depthThe new max_depth. Defaults to DEFAULT_MAX_DEPTH.
+
+
+
Returns
The error, if there is one.
+ +

Definition at line 9 of file parser-inl.h.

+ +
+
+ +

◆ iterate()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< document > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::iterate (padded_string_view json) &
+
+noexcept
+
+ +

Start iterating an on-demand JSON document.

+

ondemand::parser parser; document doc = parser.iterate(json);

+

It is expected that the content is a valid UTF-8 file, containing a valid JSON document. Otherwise the iterate method may return an error. In particular, the whole input should be valid: we do not attempt to tolerate incorrect content either before or after a JSON document.

+

+IMPORTANT: Validate what you use

+

Calling iterate on an invalid JSON document may not immediately trigger an error. The call to iterate does not parse and validate the whole document.

+

+IMPORTANT: Buffer Lifetime

+

Because parsing is done while you iterate, you must keep the JSON buffer around at least as long as the document iteration.

+

+IMPORTANT: Document Lifetime

+

Only one iteration at a time can happen per parser, and the parser must be kept alive during iteration to ensure intermediate buffers can be accessed. Any document must be destroyed before you call parse() again or destroy the parser.

+

+REQUIRED: Buffer Padding

+

The buffer must have at least SIMDJSON_PADDING extra allocated bytes. It does not matter what those bytes are initialized to, as long as they are allocated.

+
Parameters
+ + + + +
jsonThe JSON to parse.
lenThe length of the JSON.
capacityThe number of bytes allocated in the JSON (must be at least len+SIMDJSON_PADDING).
+
+
+
Returns
The document, or an error:
    +
  • INSUFFICIENT_PADDING if the input has less than SIMDJSON_PADDING extra bytes.
  • +
  • MEMALLOC if realloc_if_needed the parser does not have enough capacity, and memory allocation fails.
  • +
  • EMPTY if the document is all whitespace.
  • +
  • UTF8_ERROR if the document is not valid UTF-8.
  • +
  • UNESCAPED_CHARS if a string contains control characters that must be escaped
  • +
  • UNCLOSED_STRING if there is an unclosed string in the document.
  • +
+
+ +

Definition at line 31 of file parser-inl.h.

+ +
+
+ +

◆ iterate_many()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
simdjson_result< document_stream > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::iterate_many (const uint8_t * buf,
size_t len,
size_t batch_size = DEFAULT_BATCH_SIZE 
)
+
+inlinenoexcept
+
+ +

Parse a buffer containing many JSON documents.

+

auto json = R"({ "foo": 1 } { "foo": 2 } { "foo": 3 } )"_padded; ondemand::parser parser; ondemand::document_stream docs = parser.iterate_many(json); for (auto & doc : docs) { std::cout << doc["foo"] << std::endl; } // Prints 1 2 3

+

No copy of the input buffer is made.

+

The function is lazy: it may be that no more than one JSON document at a time is parsed.

+

The caller is responsabile to ensure that the input string data remains unchanged and is not deleted during the loop.

+

+Format

+

The buffer must contain a series of one or more JSON documents, concatenated into a single buffer, separated by ASCII whitespace. It effectively parses until it has a fully valid document, then starts parsing the next document at that point. (It does this with more parallelism and lookahead than you might think, though.)

+

documents that consist of an object or array may omit the whitespace between them, concatenating with no separator. Documents that consist of a single primitive (i.e. documents that are not arrays or objects) MUST be separated with ASCII whitespace.

+

The characters inside a JSON document, and between JSON documents, must be valid Unicode (UTF-8).

+

The documents must not exceed batch_size bytes (by default 1MB) or they will fail to parse. Setting batch_size to excessively large or excessively small values may impact negatively the performance.

+

+REQUIRED: Buffer Padding

+

The buffer must have at least SIMDJSON_PADDING extra allocated bytes. It does not matter what those bytes are initialized to, as long as they are allocated.

+

+Threads

+

When compiled with SIMDJSON_THREADS_ENABLED, this method will use a single thread under the hood to do some lookahead.

+

+Parser Capacity

+

If the parser's current capacity is less than batch_size, it will allocate enough capacity to handle it (up to max_capacity).

+
Parameters
+ + + + +
bufThe concatenated JSON to parse.
lenThe length of the concatenated JSON.
batch_sizeThe batch size to use. MUST be larger than the largest document. The sweet spot is cache-related: small enough to fit in cache, yet big enough to parse as many documents as possible in one tight loop. Defaults to 10MB, which has been a reasonable sweet spot in our tests.
+
+
+
Returns
The stream, or an error. An empty input will yield 0 documents rather than an EMPTY error. Errors:
    +
  • MEMALLOC if the parser does not have enough capacity and memory allocation fails
  • +
  • CAPACITY if the parser does not have enough capacity and batch_size > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+ +

Definition at line 87 of file parser-inl.h.

+ +
+
+ +

◆ max_depth()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline size_t simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::max_depth () const
+
+noexcept
+
+ +

The maximum depth of this parser (the most deeply nested objects and arrays it can process).

+

This parameter is only relevant when the macro SIMDJSON_DEVELOPMENT_CHECKS is set to true. The document's instance current_depth() method should be used to monitor the parsing depth and limit it if desired.

+ +

Definition at line 107 of file parser-inl.h.

+ +
+
+ +

◆ unescape()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::unescape (raw_json_string in,
uint8_t *& dst 
) const
+
+noexcept
+
+ +

Unescape this JSON string, replacing \ with \,
+ with newline, etc.

+

to a user-provided buffer. The provided pointer is advanced to the end of the string by reference, and a string_view instance is returned. You can ensure that your buffer is large enough by allocating a block of memory at least as large as the input JSON plus SIMDJSON_PADDING and then unescape all strings to this one buffer.

+

This unescape function is a low-level function. If you want a more user-friendly approach, you should avoid raw_json_string instances (e.g., by calling unescaped_key() instead of key() or get_string() instead of get_raw_json_string()).

+

+IMPORTANT: string_view lifetime

+

The string_view is only valid as long as the bytes in dst.

+
Parameters
+ + + +
raw_json_stringinput
dstA pointer to a buffer at least large enough to write this string as well as an additional SIMDJSON_PADDING bytes.
+
+
+
Returns
A string_view pointing at the unescaped string in dst @error STRING_ERROR if escapes are incorrect.
+ +

Definition at line 119 of file parser-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.js new file mode 100644 index 000000000..55cc1a2ed --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.js @@ -0,0 +1,31 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser = +[ + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a76abd4d78f0c26d80d3bf436ce212e00", null ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#aa99bf33b4b552e718ac579deb289e07d", null ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a5100063860f3d57d03366d4967aaac02", null ], + [ "~parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a4a144d96ad06a2295137dd0e5b7dcc1d", null ], + [ "allocate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ab6201f2eab41026e722a237d280b8fe1", null ], + [ "capacity", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#aec2c883af898053ab8e5eca8e9e870ae", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a483fec1e0bf7f96ecf91cdbf8ac7948d", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a8043fd848a5655b8f6d09a0edf2df5d7", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a792ec7912794a7a657a0b3b5e88fd0cf", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a19fbf3f319c3c4c18ec56e7b14341684", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a4befd18e2d838ff3abf06725f5ad04fb", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a527e037a32c56e9093fdcd34d47dd46a", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a0da712132ca4180a84907f2ca4ffbc5b", null ], + [ "iterate", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a33a8602b990e1f5ef44600c2b57a4e9d", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#afca7657cdcad3b96c40cb92be572d939", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a39b026c659b2082f017dccf9423d7fd3", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ab6d7a29db94911b348780e51b7568e8b", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a1bbd95fc94265d49d901abe0fb43a828", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a649b3a768b347d8d1b7ebb2295ba3670", null ], + [ "iterate_many", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a8f2dee06242abddb70eb7c07b50cef0b", null ], + [ "max_capacity", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a006ad62e81d1ffa0fa898b586095208b", null ], + [ "max_depth", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a9dd8dfaa40f0faec56e31f976e4c2c94", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a615e14840aadad3ddb703d40140e6a46", null ], + [ "operator=", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a1df3e757ec1e2206da217b3165fcbded", null ], + [ "set_max_capacity", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a1fea49ba6513317ea94d87926b6f085d", null ], + [ "unescape", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ac69b3aef12e3490c9fbd0a580004e015", null ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a403473bb5329fca6defc6299fb45b780", null ], + [ "json_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a7a0d2e5fad4f195a866b6baa15846d39", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string-members.html new file mode 100644 index 000000000..451e69af0 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string-members.html @@ -0,0 +1,115 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string Member List
+
+ +
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html new file mode 100644 index 000000000..b7a68393a --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html @@ -0,0 +1,395 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string Class Reference
+
+
+ +

A string escaped per JSON rules, terminated with quote ("). + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline raw_json_string () noexcept=default
 Create a new invalid raw_json_string. More...
 
simdjson_inline raw_json_string (const uint8_t *_buf) noexcept
 Create a new invalid raw_json_string pointed at the given location in the JSON. More...
 
simdjson_inline const char * raw () const noexcept
 Get the raw pointer to the beginning of the string in the JSON (just after the "). More...
 
simdjson_inline bool unsafe_is_equal (size_t length, std::string_view target) const noexcept
 This compares the current instance to the std::string_view target: returns true if they are byte-by-byte equal (no escaping is done) on target.size() characters, and if the raw_json_string instance has a quote character at byte index target.size(). More...
 
simdjson_inline bool unsafe_is_equal (std::string_view target) const noexcept
 This compares the current instance to the std::string_view target: returns true if they are byte-by-byte equal (no escaping is done). More...
 
simdjson_inline bool unsafe_is_equal (const char *target) const noexcept
 This compares the current instance to the C string target: returns true if they are byte-by-byte equal (no escaping is done). More...
 
+simdjson_inline bool is_equal (std::string_view target) const noexcept
 This compares the current instance to the std::string_view target: returns true if they are byte-by-byte equal (no escaping is done).
 
+simdjson_inline bool is_equal (const char *target) const noexcept
 This compares the current instance to the C string target: returns true if they are byte-by-byte equal (no escaping is done).
 
+ + + + + + +

+Static Public Member Functions

static simdjson_inline bool is_free_from_unescaped_quote (std::string_view target) noexcept
 Returns true if target is free from unescaped quote. More...
 
+static simdjson_inline bool is_free_from_unescaped_quote (const char *target) noexcept
 
+

Detailed Description

+

A string escaped per JSON rules, terminated with quote (").

+

They are used to represent unescaped keys inside JSON documents.

+

(In other words, a pointer to the beginning of a string, just after the start quote, inside a JSON file.)

+

This class is deliberately simplistic and has little functionality. You can compare a raw_json_string instance with an unescaped C string, but that is nearly all you can do.

+

The raw_json_string is unescaped. If you wish to write an unescaped version of it to your own buffer, you may do so using the parser.unescape(string, buff) method, using an ondemand::parser instance. Doing so requires you to have a sufficiently large buffer.

+

The raw_json_string instances originate typically from field instance which in turn represent key-value pairs from object instances. From a field instance, you get the raw_json_string instance by calling key(). You can, if you want a more usable string_view instance, call the unescaped_key() method on the field instance. You may also create a raw_json_string from any other string value, with the value.get_raw_json_string() method. Again, you can get a more usable string_view instance by calling get_string().

+ +

Definition at line 34 of file raw_json_string.h.

+

Constructor & Destructor Documentation

+ +

◆ raw_json_string() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string ()
+
+defaultnoexcept
+
+ +

Create a new invalid raw_json_string.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+ +

◆ raw_json_string() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string (const uint8_t * _buf)
+
+noexcept
+
+ +

Create a new invalid raw_json_string pointed at the given location in the JSON.

+

The given location must be just after the beginning quote (") in the JSON file.

+

It must be terminated by a ", and be a valid JSON string.

+ +

Definition at line 6 of file raw_json_string-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ is_free_from_unescaped_quote()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::is_free_from_unescaped_quote (std::string_view target)
+
+staticnoexcept
+
+ +

Returns true if target is free from unescaped quote.

+

If target is known at compile-time, we might expect the computation to happen at compile time with many compilers (not all!).

+ +

Definition at line 11 of file raw_json_string-inl.h.

+ +
+
+ +

◆ raw()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline const char * simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw () const
+
+noexcept
+
+ +

Get the raw pointer to the beginning of the string in the JSON (just after the ").

+

It is possible for this function to return a null pointer if the instance has outlived its existence.

+ +

Definition at line 8 of file raw_json_string-inl.h.

+ +
+
+ +

◆ unsafe_is_equal() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal (const char * target) const
+
+noexcept
+
+ +

This compares the current instance to the C string target: returns true if they are byte-by-byte equal (no escaping is done).

+

The provided C string should not contain an unescaped quote character: the caller is responsible for this check. See is_free_from_unescaped_quote.

+

If target is a compile-time constant, and your compiler likes you, you should be able to do the following without performance penalty...

+

static_assert(raw_json_string::is_free_from_unescaped_quote(target), ""); s.unsafe_is_equal(target);

+ +

Definition at line 92 of file raw_json_string-inl.h.

+ +
+
+ +

◆ unsafe_is_equal() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal (size_t length,
std::string_view target 
) const
+
+noexcept
+
+ +

This compares the current instance to the std::string_view target: returns true if they are byte-by-byte equal (no escaping is done) on target.size() characters, and if the raw_json_string instance has a quote character at byte index target.size().

+

We never read more than length + 1 bytes in the raw_json_string instance. If length is smaller than target.size(), this will return false.

+

The std::string_view instance may contain any characters. However, the caller is responsible for setting length so that length bytes may be read in the raw_json_string.

+

Performance: the comparison may be done using memcmp which may be efficient for long strings.

+ +

Definition at line 48 of file raw_json_string-inl.h.

+ +
+
+ +

◆ unsafe_is_equal() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal (std::string_view target) const
+
+noexcept
+
+ +

This compares the current instance to the std::string_view target: returns true if they are byte-by-byte equal (no escaping is done).

+

The std::string_view instance should not contain unescaped quote characters: the caller is responsible for this check. See is_free_from_unescaped_quote.

+

Performance: the comparison is done byte-by-byte which might be inefficient for long strings.

+

If target is a compile-time constant, and your compiler likes you, you should be able to do the following without performance penalty...

+

static_assert(raw_json_string::is_free_from_unescaped_quote(target), ""); s.unsafe_is_equal(target);

+ +

Definition at line 53 of file raw_json_string-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.js new file mode 100644 index 000000000..371567d9f --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.js @@ -0,0 +1,15 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string = +[ + [ "raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a78b420ddb8a0570ee973cdfbccd31c9a", null ], + [ "raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#acf64001cc9961cd01712211b778e760b", null ], + [ "is_equal", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#aa3165ea813c4c15fb9cb282e67abe6af", null ], + [ "is_equal", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a0ddac0ab1c69022610d8051b989b5c95", null ], + [ "raw", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a8736f5e397a3e0a55090aadee0596214", null ], + [ "unsafe_is_equal", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a3d8f15d3b004acd695b6fff5ba94b515", null ], + [ "unsafe_is_equal", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#affa14023a66c65f906ee3e673443d943", null ], + [ "unsafe_is_equal", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a11bccba8ede5e7dff56e2737fcb853c7", null ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#acd53905ae10cba58b4337aefe648aec6", null ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a8de78aa991dff0fc519d5c721ea49733", null ], + [ "simdjson_result< raw_json_string >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#aab1989049cf0c8cd84839c50da1f3de4", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value-members.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value-members.html new file mode 100644 index 000000000..09eea4527 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value-members.html @@ -0,0 +1,156 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value Member List
+
+
+ +

This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
at(size_t index) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
at_pointer(std::string_view json_pointer) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
begin() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
count_elements() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
count_fields() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
current_depth() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
current_location() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
end() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
find_field(std::string_view key) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
find_field(const char *key) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
find_field_unordered(std::string_view key) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
find_field_unordered(const char *key) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueinline
get(T &out) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get() noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_array() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_bool() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_double() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_double_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_int64() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_int64_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_number() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_number_type() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_object() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_raw_json_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_uint64() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
get_uint64_in_string() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
is_integer() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
is_negative() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
is_null() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
is_scalar() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
iter (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotected
operator array() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator bool() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator double() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator int64_t() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator object() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator raw_json_string() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator std::string_view() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator uint64_t() noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator[](std::string_view key) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
operator[](const char *key) noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
raw_json_token() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
resume(const value_iterator &iter) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotectedstatic
skip() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotected
start(const value_iterator &iter) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotectedstatic
start_or_resume_object() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotected
type() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
value() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value
value(const value_iterator &iter) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueprotected
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html new file mode 100644 index 000000000..ffd2fd312 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html @@ -0,0 +1,1675 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value Class Reference
+
+
+ +

An ephemeral JSON value returned during iteration. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline value () noexcept=default
 Create a new invalid value. More...
 
template<typename T >
simdjson_inline simdjson_result< T > get () noexcept
 Get this value as the given type. More...
 
template<typename T >
simdjson_inline error_code get (T &out) noexcept
 Get this value as the given type. More...
 
simdjson_inline simdjson_result< arrayget_array () noexcept
 Cast this JSON value to an array. More...
 
simdjson_inline simdjson_result< objectget_object () noexcept
 Cast this JSON value to an object. More...
 
simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
 Cast this JSON value to an unsigned integer. More...
 
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
 Cast this JSON value (inside string) to a unsigned integer. More...
 
simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
 Cast this JSON value to a signed integer. More...
 
simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
 Cast this JSON value (inside string) to a signed integer. More...
 
simdjson_inline simdjson_result< double > get_double () noexcept
 Cast this JSON value to a double. More...
 
simdjson_inline simdjson_result< double > get_double_in_string () noexcept
 Cast this JSON value (inside string) to a double. More...
 
simdjson_inline simdjson_result< std::string_view > get_string () noexcept
 Cast this JSON value to a string. More...
 
simdjson_inline simdjson_result< raw_json_stringget_raw_json_string () noexcept
 Cast this JSON value to a raw_json_string. More...
 
simdjson_inline simdjson_result< bool > get_bool () noexcept
 Cast this JSON value to a bool. More...
 
simdjson_inline simdjson_result< bool > is_null () noexcept
 Checks if this JSON value is null. More...
 
simdjson_inline operator array () noexcept(false)
 Cast this JSON value to an array. More...
 
simdjson_inline operator object () noexcept(false)
 Cast this JSON value to an object. More...
 
simdjson_inline operator uint64_t () noexcept(false)
 Cast this JSON value to an unsigned integer. More...
 
simdjson_inline operator int64_t () noexcept(false)
 Cast this JSON value to a signed integer. More...
 
simdjson_inline operator double () noexcept(false)
 Cast this JSON value to a double. More...
 
simdjson_inline operator std::string_view () noexcept(false)
 Cast this JSON value to a string. More...
 
simdjson_inline operator raw_json_string () noexcept(false)
 Cast this JSON value to a raw_json_string. More...
 
simdjson_inline operator bool () noexcept(false)
 Cast this JSON value to a bool. More...
 
simdjson_inline simdjson_result< array_iteratorbegin () &noexcept
 Begin array iteration. More...
 
simdjson_inline simdjson_result< array_iteratorend () &noexcept
 Sentinel representing the end of the array. More...
 
simdjson_inline simdjson_result< size_t > count_elements () &noexcept
 This method scans the array and counts the number of elements. More...
 
simdjson_inline simdjson_result< size_t > count_fields () &noexcept
 This method scans the object and counts the number of key-value pairs. More...
 
simdjson_inline simdjson_result< valueat (size_t index) noexcept
 Get the value at the given index in the array. More...
 
simdjson_inline simdjson_result< valuefind_field (std::string_view key) noexcept
 Look up a field by name on an object (order-sensitive). More...
 
+simdjson_inline simdjson_result< valuefind_field (const char *key) noexcept
 
simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) noexcept
 Look up a field by name on an object, without regard to key order. More...
 
+simdjson_inline simdjson_result< valuefind_field_unordered (const char *key) noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (std::string_view key) noexcept
 
+simdjson_inline simdjson_result< valueoperator[] (const char *key) noexcept
 
simdjson_inline simdjson_result< json_typetype () noexcept
 Get the type of this JSON value. More...
 
simdjson_inline simdjson_result< bool > is_scalar () noexcept
 Checks whether the value is a scalar (string, number, null, Boolean). More...
 
simdjson_inline bool is_negative () noexcept
 Checks whether the value is a negative number. More...
 
simdjson_inline simdjson_result< bool > is_integer () noexcept
 Checks whether the value is an integer number. More...
 
simdjson_inline simdjson_result< number_typeget_number_type () noexcept
 Determine the number type (integer or floating-point number) as quickly as possible. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< numberget_number () noexcept
 Attempt to parse an ondemand::number. More...
 
simdjson_inline std::string_view raw_json_token () noexcept
 Get the raw JSON for this token. More...
 
+simdjson_inline simdjson_result< const char * > current_location () noexcept
 Returns the current location in the document if in bounds.
 
simdjson_inline int32_t current_depth () const noexcept
 Returns the current depth in the document if in bounds. More...
 
simdjson_inline simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 Get the value associated with the given JSON pointer. More...
 
+template<>
simdjson_inline simdjson_result< arrayget () noexcept
 
+ + + + + + + + + + +

+Protected Member Functions

+simdjson_inline value (const value_iterator &iter) noexcept
 Create a value.
 
+simdjson_inline void skip () noexcept
 Skip this value, allowing iteration to continue.
 
+simdjson_inline simdjson_result< objectstart_or_resume_object () noexcept
 Get the object, starting or resuming it as necessary.
 
+ + + + + + + +

+Static Protected Member Functions

static simdjson_inline value start (const value_iterator &iter) noexcept
 Start a value at the current position. More...
 
+static simdjson_inline value resume (const value_iterator &iter) noexcept
 Resume a value.
 
+ + + +

+Protected Attributes

+value_iterator iter {}
 
+

Detailed Description

+

An ephemeral JSON value returned during iteration.

+

It is only valid for as long as you do not access more data in the JSON document.

+ +

Definition at line 17 of file value.h.

+

Constructor & Destructor Documentation

+ +

◆ value()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value ()
+
+defaultnoexcept
+
+ +

Create a new invalid value.

+

Exists so you can declare a variable and later assign to it before use.

+ +
+
+

Member Function Documentation

+ +

◆ at()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at (size_t index)
+
+noexcept
+
+ +

Get the value at the given index in the array.

+

This function has linear-time complexity. This function should only be called once on an array instance since the array iterator is not reset between each call.

+
Returns
The value at the given index, or:
    +
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length
  • +
+
+ +

Definition at line 124 of file value-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at_pointer (std::string_view json_pointer)
+
+noexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard.

+

ondemand::parser parser; auto json = R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("/foo/a/1") == 20

+

It is allowed for a key to be the empty string:

+

ondemand::parser parser; auto json = R"({ "": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("//a/1") == 20

+

Note that at_pointer() called on the document automatically calls the document's rewind method between each call. It invalidates all previously accessed arrays, objects and values that have not been consumed.

+

Calling at_pointer() on non-document instances (e.g., arrays and objects) is not standardized (by RFC 6901). We provide some experimental support for JSON pointers on non-document instances. Yet it is not the case when calling at_pointer on an array or an object instance: there is no rewind and no invalidation.

+

You may only call at_pointer on an array after it has been created, but before it has been first accessed. When calling at_pointer on an array, the pointer is advanced to the location indicated by the JSON pointer (in case of success). It is no longer possible to call at_pointer on the same array.

+

You may call at_pointer more than once on an object, but each time the pointer is advanced to be within the value matched by the key indicated by the JSON pointer query. Thus any preceding key (as well as the current key) can no longer be used with following JSON pointer calls.

+

Also note that at_pointer() relies on find_field() which implies that we do not unescape keys when matching

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 187 of file value-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::begin () &
+
+noexcept
+
+ +

Begin array iteration.

+

Part of the std::iterable interface.

+
Returns
INCORRECT_TYPE If the JSON value is not an array.
+ +

Definition at line 101 of file value-inl.h.

+ +
+
+ +

◆ count_elements()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_elements () &
+
+noexcept
+
+ +

This method scans the array and counts the number of elements.

+

The count_elements method should always be called before you have begun iterating through the array: it is expected that you are pointing at the beginning of the array. The runtime complexity is linear in the size of the array. After calling this function, if successful, the array is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+

Performance hint: You should only call count_elements() as a last resort as it may require scanning the document twice or more.

+ +

Definition at line 107 of file value-inl.h.

+ +
+
+ +

◆ count_fields()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_fields () &
+
+noexcept
+
+ +

This method scans the object and counts the number of key-value pairs.

+

The count_fields method should always be called before you have begun iterating through the object: it is expected that you are pointing at the beginning of the object. The runtime complexity is linear in the size of the object. After calling this function, if successful, the object is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

+

To check that an object is empty, it is more performant to use the is_empty() method on the object instance.

+

Performance hint: You should only call count_fields() as a last resort as it may require scanning the document twice or more.

+ +

Definition at line 117 of file value-inl.h.

+ +
+
+ +

◆ current_depth()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline int32_t simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_depth () const
+
+noexcept
+
+ +

Returns the current depth in the document if in bounds.

+

E.g., 0 = finished with document 1 = document root value (could be [ or {, not yet known) 2 = , or } inside root array/object 3 = key or value inside root array/object.

+ +

Definition at line 183 of file value-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::end () &
+
+noexcept
+
+ +

Sentinel representing the end of the array.

+

Part of the std::iterable interface.

+ +

Definition at line 104 of file value-inl.h.

+ +
+
+ +

◆ find_field()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field (std::string_view key)
+
+noexcept
+
+ +

Look up a field by name on an object (order-sensitive).

+

The following code reads z, then y, then x, and thus will not retrieve x or y if fed the JSON { "x": 1, "y": 2, "z": 3 }:

+
{c++}
+
simdjson::ondemand::parser parser;
+
auto obj = parser.parse(R"( { "x": 1, "y": 2, "z": 3 } )"_padded);
+
double z = obj.find_field("z");
+
double y = obj.find_field("y");
+
double x = obj.find_field("x");
+

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

+

Raw Keys: The lookup will be done against the raw key, and will not unescape keys. e.g. object["a"] will match { "a": 1 }, but will not match { "\u0061": 1 }.

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+ +

Definition at line 129 of file value-inl.h.

+ +
+
+ +

◆ find_field_unordered()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field_unordered (std::string_view key)
+
+noexcept
+
+ +

Look up a field by name on an object, without regard to key order.

+

Performance Notes: This is a bit less performant than find_field(), though its effect varies and often appears negligible. It starts out normally, starting out at the last field; but if the field is not found, it scans from the beginning of the object to see if it missed it. That missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object in question is large. The fact that the extra code is there also bumps the executable size.

+

It is the default, however, because it would be highly surprising (and hard to debug) if the default behavior failed to look up a field just because it was in the wrong order–and many APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.

+

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

+

Use find_field() if you are sure fields will be in order (or are willing to treat it as if the field wasn't there when they aren't).

+
Parameters
+ + +
keyThe key to look up.
+
+
+
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+ +

Definition at line 136 of file value-inl.h.

+ +
+
+ +

◆ get() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result<T> simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ()
+
+inlinenoexcept
+
+ +

Get this value as the given type.

+

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool

+

You may use get_double(), get_bool(), get_uint64(), get_int64(), get_object(), get_array(), get_raw_json_string(), or get_string() instead.

+
Returns
A value of the given type, parsed from the JSON.
+
+INCORRECT_TYPE If the JSON value is not the given type.
+ +

Definition at line 37 of file value.h.

+ +
+
+ +

◆ get() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get (T & out)
+
+noexcept
+
+ +

Get this value as the given type.

+

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool

+
Parameters
+ + +
outThis is set to a value of the given type, parsed from the JSON. If there is an error, this may not be initialized.
+
+
+
Returns
INCORRECT_TYPE If the JSON value is not an object.
+
+SUCCESS If the parse succeeded and the out parameter was set to the value.
+ +

Definition at line 70 of file value-inl.h.

+ +
+
+ +

◆ get_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_array ()
+
+noexcept
+
+ +

Cast this JSON value to an array.

+
Returns
An object that can be used to iterate the array.
+
+INCORRECT_TYPE If the JSON value is not an array.
+ +

Definition at line 16 of file value-inl.h.

+ +
+
+ +

◆ get_bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_bool ()
+
+noexcept
+
+ +

Cast this JSON value to a bool.

+
Returns
A bool value.
+
+INCORRECT_TYPE if the JSON value is not true or false.
+ +

Definition at line 54 of file value-inl.h.

+ +
+
+ +

◆ get_double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double ()
+
+noexcept
+
+ +

Cast this JSON value to a double.

+
Returns
A double.
+
+INCORRECT_TYPE If the JSON value is not a valid floating-point number.
+ +

Definition at line 36 of file value-inl.h.

+ +
+
+ +

◆ get_double_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to a double.

+
Returns
A double.
+
+INCORRECT_TYPE If the JSON value is not a valid floating-point number.
+ +

Definition at line 39 of file value-inl.h.

+ +
+
+ +

◆ get_int64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64 ()
+
+noexcept
+
+ +

Cast this JSON value to a signed integer.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit integer.
+ +

Definition at line 48 of file value-inl.h.

+ +
+
+ +

◆ get_int64_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to a signed integer.

+
Returns
A signed 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit integer.
+ +

Definition at line 51 of file value-inl.h.

+ +
+
+ +

◆ get_number()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< number > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number ()
+
+noexcept
+
+ +

Attempt to parse an ondemand::number.

+

An ondemand::number may contain an integer value or a floating-point value, the simdjson library will autodetect the type. Thus it is a dynamically typed number. Before accessing the value, you must determine the detected type.

+

number.get_number_type() is number_type::signed_integer if we have an integer in [-9223372036854775808,9223372036854775808) You can recover the value by calling number.get_int64() and you have that number.is_int64() is true.

+

number.get_number_type() is number_type::unsigned_integer if we have an integer in [9223372036854775808,18446744073709551616) You can recover the value by calling number.get_uint64() and you have that number.is_uint64() is true.

+

Otherwise, number.get_number_type() has value number_type::floating_point_number and we have a binary64 number. You can recover the value by calling number.get_double() and you have that number.is_double() is true.

+

You must check the type before accessing the value: it is an error to call "get_int64()" when number.get_number_type() is not number_type::signed_integer and when number.is_int64() is false.

+

Performance note: this is designed with performance in mind. When calling 'get_number()', you scan the number string only once, determining efficiently the type and storing it in an efficient manner.

+ +

Definition at line 171 of file value-inl.h.

+ +
+
+ +

◆ get_number_type()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< number_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number_type ()
+
+noexcept
+
+ +

Determine the number type (integer or floating-point number) as quickly as possible.

+

This function does not fully validate the input. It is useful when you only need to classify the numbers, without parsing them.

+

If you are planning to retrieve the value or you need full validation, consider using the get_number() method instead: it will fully parse and validate the input, and give you access to the type: get_number().get_number_type().

+

get_number_type() is number_type::unsigned_integer if we have an integer greater or equal to 9223372036854775808 get_number_type() is number_type::signed_integer if we have an integer that is less than 9223372036854775808 Otherwise, get_number_type() has value number_type::floating_point_number

+

This function requires processing the number string, but it is expected to be faster than get_number().get_number_type() because it is does not parse the number value.

+
Returns
the type of the number
+ +

Definition at line 168 of file value-inl.h.

+ +
+
+ +

◆ get_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< object > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_object ()
+
+noexcept
+
+ +

Cast this JSON value to an object.

+
Returns
An object that can be used to look up or iterate fields.
+
+INCORRECT_TYPE If the JSON value is not an object.
+ +

Definition at line 19 of file value-inl.h.

+ +
+
+ +

◆ get_raw_json_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< raw_json_string > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_raw_json_string ()
+
+noexcept
+
+ +

Cast this JSON value to a raw_json_string.

+

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
+).

+
Returns
A pointer to the raw JSON for the given string.
+
+INCORRECT_TYPE if the JSON value is not a string.
+ +

Definition at line 30 of file value-inl.h.

+ +
+
+ +

◆ get_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_string ()
+
+noexcept
+
+ +

Cast this JSON value to a string.

+

The string is guaranteed to be valid UTF-8.

+

Equivalent to get<std::string_view>().

+

Important: a value should be consumed once. Calling get_string() twice on the same value is an error.

+
Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
+
+INCORRECT_TYPE if the JSON value is not a string.
+ +

Definition at line 33 of file value-inl.h.

+ +
+
+ +

◆ get_uint64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64 ()
+
+noexcept
+
+ +

Cast this JSON value to an unsigned integer.

+
Returns
A unsigned 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.
+ +

Definition at line 42 of file value-inl.h.

+ +
+
+ +

◆ get_uint64_in_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64_in_string ()
+
+noexcept
+
+ +

Cast this JSON value (inside string) to a unsigned integer.

+
Returns
A unsigned 64-bit integer.
+
+INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.
+ +

Definition at line 45 of file value-inl.h.

+ +
+
+ +

◆ is_integer()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_integer ()
+
+noexcept
+
+ +

Checks whether the value is an integer number.

+

Note that this requires to partially parse the number string. If the value is determined to be an integer, it may still not parse properly as an integer in subsequent steps (e.g., it might overflow).

+

Performance note: if you call this function systematically before parsing a number, you may have fallen for a performance anti-pattern.

+
Returns
true if the number if negative.
+ +

Definition at line 165 of file value-inl.h.

+ +
+
+ +

◆ is_negative()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_negative ()
+
+noexcept
+
+ +

Checks whether the value is a negative number.

+
Returns
true if the number if negative.
+ +

Definition at line 161 of file value-inl.h.

+ +
+
+ +

◆ is_null()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_null ()
+
+noexcept
+
+ +

Checks if this JSON value is null.

+

If and only if the value is null, then it is consumed (we advance). If we find a token that begins with 'n' but is not 'null', then an error is returned.

+
Returns
Whether the value is null.
+
+INCORRECT_TYPE If the JSON value begins with 'n' and is not 'null'.
+ +

Definition at line 57 of file value-inl.h.

+ +
+
+ +

◆ is_scalar()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_scalar ()
+
+noexcept
+
+ +

Checks whether the value is a scalar (string, number, null, Boolean).

+

Returns false when there it is an array or object.

+
Returns
true if the type is string, number, null, Boolean @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".
+ +

Definition at line 154 of file value-inl.h.

+ +
+
+ +

◆ operator array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator array ()
+
+noexcept
+
+ +

Cast this JSON value to an array.

+
Returns
An object that can be used to iterate the array.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not an array.
+
+
+ +

Definition at line 75 of file value-inl.h.

+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator bool ()
+
+noexcept
+
+ +

Cast this JSON value to a bool.

+
Returns
A bool value.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not true or false.
+
+
+ +

Definition at line 96 of file value-inl.h.

+ +
+
+ +

◆ operator double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator double ()
+
+noexcept
+
+ +

Cast this JSON value to a double.

+
Returns
A double.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a valid floating-point number.
+
+
+ +

Definition at line 87 of file value-inl.h.

+ +
+
+ +

◆ operator int64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator int64_t ()
+
+noexcept
+
+ +

Cast this JSON value to a signed integer.

+
Returns
A signed 64-bit integer.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit integer.
+
+
+ +

Definition at line 84 of file value-inl.h.

+ +
+
+ +

◆ operator object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator object ()
+
+noexcept
+
+ +

Cast this JSON value to an object.

+
Returns
An object that can be used to look up or iterate fields.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not an object.
+
+
+ +

Definition at line 78 of file value-inl.h.

+ +
+
+ +

◆ operator raw_json_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator raw_json_string ()
+
+noexcept
+
+ +

Cast this JSON value to a raw_json_string.

+

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
+).

+
Returns
A pointer to the raw JSON for the given string.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.
+
+
+ +

Definition at line 93 of file value-inl.h.

+ +
+
+ +

◆ operator std::string_view()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator std::string_view ()
+
+noexcept
+
+ +

Cast this JSON value to a string.

+

The string is guaranteed to be valid UTF-8.

+

Equivalent to get<std::string_view>().

+
Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.
+
+
+ +

Definition at line 90 of file value-inl.h.

+ +
+
+ +

◆ operator uint64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator uint64_t ()
+
+noexcept
+
+ +

Cast this JSON value to an unsigned integer.

+
Returns
A signed 64-bit integer.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit unsigned integer.
+
+
+ +

Definition at line 81 of file value-inl.h.

+ +
+
+ +

◆ raw_json_token()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline std::string_view simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::raw_json_token ()
+
+noexcept
+
+ +

Get the raw JSON for this token.

+

The string_view will always point into the input buffer.

+

The string_view will start at the beginning of the token, and include the entire token as well as all spaces until the next token (or EOF). This means, for example, that a string token always begins with a " and is always terminated by the final ", possibly followed by a number of spaces.

+

The string_view is not null-terminated. However, if this is a scalar (string, number, boolean, or null), the character after the end of the string_view is guaranteed to be a non-space token.

+

Tokens include:

    +
  • {
  • +
  • [
  • +
  • "a string (possibly with UTF-8 or backslashed characters like \\\")".
  • +
  • -1.2e-100
  • +
  • true
  • +
  • false
  • +
  • null
  • +
+ +

Definition at line 175 of file value-inl.h.

+ +
+
+ +

◆ start()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline value simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::start (const value_iterator & iter)
+
+staticprotectednoexcept
+
+ +

Start a value at the current position.

+

(It should already be started; this is just a self-documentation method.)

+ +

Definition at line 9 of file value-inl.h.

+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson_result< json_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::type ()
+
+noexcept
+
+ +

Get the type of this JSON value.

+

It does not validate or consume the value. E.g., you must still call "is_null()" to check that a value is null even if "type()" returns json_type::null.

+

NOTE: If you're only expecting a value to be one type (a typical case), it's generally better to just call .get_double, .get_string, etc. and check for INCORRECT_TYPE (or just let it throw an exception).

+
Returns
The type of JSON value (json_type::array, json_type::object, json_type::string, json_type::number, json_type::boolean, or json_type::null). @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".
+ +

Definition at line 150 of file value-inl.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • include/simdjson/generic/ondemand/value.h
  • +
  • include/simdjson/generic/ondemand/value-inl.h
  • +
+
+
+ + + + diff --git a/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.js b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.js new file mode 100644 index 000000000..f19f1cfe7 --- /dev/null +++ b/classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.js @@ -0,0 +1,58 @@ +var classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value = +[ + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab96f6c19a1866863a110e8bcc93e0392", null ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a7188b9843c2b3b3050c54b52d5b6886f", null ], + [ "at", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acc369e813e7cf4a97564bb0d85f76db3", null ], + [ "at_pointer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aadd2f646a3231d407948bf5f3da46528", null ], + [ "begin", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a88d1cdc3124965d707754af4fcfae7f9", null ], + [ "count_elements", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a481e2b0b216d29038ddca3242a7047ad", null ], + [ "count_fields", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a55f04607ee4e718294a572f9b6ad94cc", null ], + [ "current_depth", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bcd64ae6b4d204c4b6b2a8420e0270c", null ], + [ "current_location", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a06258e49f2dbb910beeaf6814ff7e071", null ], + [ "end", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a6ed00f1588087b2d0de926c4599366d6", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9e6d45a591ea72658a5ce2508a851cd0", null ], + [ "find_field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a1588a173b15a20cacf77a24d07032d83", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9410649e14bebb51b38b8a2a520482a8", null ], + [ "find_field_unordered", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acb1514c00a87027c5eb3c81171a3b874", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac96ed29f08a2c948c1f02d99b88546c4", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8d50c7c494ab9acc4a644cc77dd058f9", null ], + [ "get", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a40af3c6af7d18241c1c4017df8557d86", null ], + [ "get_array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2fdcc51cac791c3a2f4c970764bc0155", null ], + [ "get_bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa0e07db099e651d3e5279872683cb7dd", null ], + [ "get_double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9a5ebeb4a79fa1d997f9f3478370a57e", null ], + [ "get_double_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac8b8d7d4bc7958363b7f0d380b248a4f", null ], + [ "get_int64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab7e4b28c0d9637cf1b04554d99c0e3b3", null ], + [ "get_int64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a547e99f2f430ca39bf4060d090f45ff7", null ], + [ "get_number", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa89c4aceb7e052a1f7ff7e4058b651f1", null ], + [ "get_number_type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2f46079741d1ba316de32bb9765c5082", null ], + [ "get_object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a3bde0795cb309f3e51b8388fbafc1fe4", null ], + [ "get_raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aca8b183c4e674a5b4ade8f6d2780f815", null ], + [ "get_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e96b60b036694be5ef43fb564ab8d1b", null ], + [ "get_uint64", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#adaa7bb2c9b3988476f3317ddda27e22d", null ], + [ "get_uint64_in_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bc2eb9eeeb7e2e0b82c23ed4d254933", null ], + [ "is_integer", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a5ab2c9c7d29a7a6c09f78930b0100836", null ], + [ "is_negative", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2701c283de019e56624e930e936e0df0", null ], + [ "is_null", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a04f1c591d93d834377a9cb916c90e09b", null ], + [ "is_scalar", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8c2618e57ec26501dd93ff8fd5cc2191", null ], + [ "operator array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a93756146a65e835b9358cc652dc53396", null ], + [ "operator bool", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#af7b51d9048d388235f3936c8fa30a2f7", null ], + [ "operator double", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a53f99cedf58e62c1382a4d5a585e05a0", null ], + [ "operator int64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a30f182e71d3c13d2656ba5983862be57", null ], + [ "operator object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a89519c599fd938a6a750262111fc5757", null ], + [ "operator raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a85d69a32b4b95f353abe6214ecc98619", null ], + [ "operator std::string_view", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e5f2ff46639e6c1cffb73d4e071e491", null ], + [ "operator uint64_t", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#afb7be23d4f1006d5eae234d8c8c8d286", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a930e15defdcb082793fb22fe5b161de5", null ], + [ "operator[]", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8af215f249821f44ee33eb3cf2dac53b", null ], + [ "raw_json_token", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a37427e768435aafef5af097b8cc3cfec", null ], + [ "skip", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ae75aa0d09a10682fd30dc4e8e25d0a73", null ], + [ "start_or_resume_object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a821e11bc3b6b3f16fa7d6b15c77c17d3", null ], + [ "type", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac39965b3006b8f19ed576ce99b7534c5", null ], + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aec7be9f74f64c08fae57eaf36044f7a9", null ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acd53905ae10cba58b4337aefe648aec6", null ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "simdjson_result< field >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac91f0ec4a1944cba079924b366424f89", null ], + [ "simdjson_result< value >", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9ad87deba0e08e8188b26485164889fb", null ], + [ "iter", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a1a77f08478a14ca724b3087050f39370", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1array-members.html b/classsimdjson_1_1dom_1_1array-members.html new file mode 100644 index 000000000..4b2f84715 --- /dev/null +++ b/classsimdjson_1_1dom_1_1array-members.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::array Member List
+
+
+ +

This is the complete list of members for simdjson::dom::array, including all inherited members.

+ + + + + + + + +
array() noexceptsimdjson::dom::array
at(size_t index) const noexceptsimdjson::dom::arrayinline
at_pointer(std::string_view json_pointer) const noexceptsimdjson::dom::arrayinline
begin() const noexceptsimdjson::dom::arrayinline
end() const noexceptsimdjson::dom::arrayinline
number_of_slots() const noexceptsimdjson::dom::arrayinline
size() const noexceptsimdjson::dom::arrayinline
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1array.html b/classsimdjson_1_1dom_1_1array.html new file mode 100644 index 000000000..e53b5f9f7 --- /dev/null +++ b/classsimdjson_1_1dom_1_1array.html @@ -0,0 +1,347 @@ + + + + + + + +simdjson: simdjson::dom::array Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::array Class Reference
+
+
+ +

JSON array. + More...

+ + + + +

+Classes

class  iterator
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline array () noexcept
 Create a new, invalid array.
 
iterator begin () const noexcept
 Return the first array element. More...
 
iterator end () const noexcept
 One past the last array element. More...
 
size_t size () const noexcept
 Get the size of the array (number of immediate children). More...
 
size_t number_of_slots () const noexcept
 Get the total number of slots used by this array on the tape. More...
 
simdjson_result< elementat_pointer (std::string_view json_pointer) const noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_result< elementat (size_t index) const noexcept
 Get the value at the given index. More...
 
+

Detailed Description

+

JSON array.

+ +

Definition at line 22 of file array.h.

+

Member Function Documentation

+ +

◆ at()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::array::at (size_t index) const
+
+inlinenoexcept
+
+ +

Get the value at the given index.

+

This function has linear-time complexity and is equivalent to the following:

+

size_t i=0; for (auto element : *this) { if (i == index) { return element; } i++; } return INDEX_OUT_OF_BOUNDS;

+

Avoid calling the at() function repeatedly.

+
Returns
The value at the given index, or:
    +
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length
  • +
+
+ +

Definition at line 112 of file array-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::array::at_pointer (std::string_view json_pointer) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard, interpreting the current node as the root of its own JSON document.

+

dom::parser parser; array a = parser.parse(R"([ { "foo": { "a": [ 10, 20, 30 ] }} ])"_padded); a.at_pointer("/0/foo/a/1") == 20 a.at_pointer("0")["foo"]["a"].at(1) == 20

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 71 of file array-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
array::iterator simdjson::dom::array::begin () const
+
+inlinenoexcept
+
+ +

Return the first array element.

+

Part of the std::iterable interface.

+ +

Definition at line 55 of file array-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
array::iterator simdjson::dom::array::end () const
+
+inlinenoexcept
+
+ +

One past the last array element.

+

Part of the std::iterable interface.

+ +

Definition at line 59 of file array-inl.h.

+ +
+
+ +

◆ number_of_slots()

+ +
+
+ + + + + +
+ + + + + + + +
size_t simdjson::dom::array::number_of_slots () const
+
+inlinenoexcept
+
+ +

Get the total number of slots used by this array on the tape.

+

Note that this is not the same thing as size(), which reports the number of actual elements within an array (not counting its children).

+

Since an element can use 1 or 2 slots on the tape, you can only use this to figure out the total size of an array (including its children, recursively) if you know its structure ahead of time.

+ +

Definition at line 67 of file array-inl.h.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
size_t simdjson::dom::array::size () const
+
+inlinenoexcept
+
+ +

Get the size of the array (number of immediate children).

+

It is a saturated value with a maximum of 0xFFFFFF: if the value is 0xFFFFFF then the size is 0xFFFFFF or greater.

+ +

Definition at line 63 of file array-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1array.js b/classsimdjson_1_1dom_1_1array.js new file mode 100644 index 000000000..1559256c8 --- /dev/null +++ b/classsimdjson_1_1dom_1_1array.js @@ -0,0 +1,13 @@ +var classsimdjson_1_1dom_1_1array = +[ + [ "iterator", "classsimdjson_1_1dom_1_1array_1_1iterator.html", "classsimdjson_1_1dom_1_1array_1_1iterator" ], + [ "array", "classsimdjson_1_1dom_1_1array.html#a8b3d6eaec52a2b44965e53d874e367e9", null ], + [ "at", "classsimdjson_1_1dom_1_1array.html#a6a6373cc1542a7137b79978680a93d18", null ], + [ "at_pointer", "classsimdjson_1_1dom_1_1array.html#a8141c7d98672bc3ab69fea7b63afcfb2", null ], + [ "begin", "classsimdjson_1_1dom_1_1array.html#aebd2b7ca5e1d87476ea2cd4fc9239a74", null ], + [ "end", "classsimdjson_1_1dom_1_1array.html#a378b3312cdf6f8fe04725b617b8cfcb9", null ], + [ "number_of_slots", "classsimdjson_1_1dom_1_1array.html#a26e66312190e016c22093292974490ff", null ], + [ "size", "classsimdjson_1_1dom_1_1array.html#a698f2f984d1a78a68962c06b2f047686", null ], + [ "element", "classsimdjson_1_1dom_1_1array.html#a0602f94f596fa800408eeb034b5850ab", null ], + [ "simdjson_result< element >", "classsimdjson_1_1dom_1_1array.html#a5db654c4e603254bd308a7c068d79c43", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1array_1_1iterator-members.html b/classsimdjson_1_1dom_1_1array_1_1iterator-members.html new file mode 100644 index 000000000..1eea137ae --- /dev/null +++ b/classsimdjson_1_1dom_1_1array_1_1iterator-members.html @@ -0,0 +1,119 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::array::iterator Member List
+
+
+ +

This is the complete list of members for simdjson::dom::array::iterator, including all inherited members.

+ + + + + + + + + + + + + + + +
difference_type typedef (defined in simdjson::dom::array::iterator)simdjson::dom::array::iterator
iterator() noexcept=default (defined in simdjson::dom::array::iterator)simdjson::dom::array::iterator
iterator(const iterator &) noexcept=default (defined in simdjson::dom::array::iterator)simdjson::dom::array::iterator
operator!=(const iterator &other) const noexceptsimdjson::dom::array::iteratorinline
operator*() const noexceptsimdjson::dom::array::iteratorinline
operator++() noexceptsimdjson::dom::array::iteratorinline
operator++(int) noexceptsimdjson::dom::array::iteratorinline
operator<(const iterator &other) const noexcept (defined in simdjson::dom::array::iterator)simdjson::dom::array::iteratorinline
operator<=(const iterator &other) const noexcept (defined in simdjson::dom::array::iterator)simdjson::dom::array::iteratorinline
operator=(const iterator &) noexcept=default (defined in simdjson::dom::array::iterator)simdjson::dom::array::iterator
operator==(const iterator &other) const noexcept (defined in simdjson::dom::array::iterator)simdjson::dom::array::iteratorinline
operator>(const iterator &other) const noexcept (defined in simdjson::dom::array::iterator)simdjson::dom::array::iteratorinline
operator>=(const iterator &other) const noexcept (defined in simdjson::dom::array::iterator)simdjson::dom::array::iteratorinline
value_type typedef (defined in simdjson::dom::array::iterator)simdjson::dom::array::iterator
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1array_1_1iterator.html b/classsimdjson_1_1dom_1_1array_1_1iterator.html new file mode 100644 index 000000000..dfd2b569e --- /dev/null +++ b/classsimdjson_1_1dom_1_1array_1_1iterator.html @@ -0,0 +1,254 @@ + + + + + + + +simdjson: simdjson::dom::array::iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::array::iterator Class Reference
+
+
+ + + + + + +

+Public Types

+using value_type = element
 
+using difference_type = std::ptrdiff_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+value_type operator* () const noexcept
 Get the actual value.
 
iteratoroperator++ () noexcept
 Get the next value. More...
 
iterator operator++ (int) noexcept
 Get the next value. More...
 
bool operator!= (const iterator &other) const noexcept
 Check if these values come from the same place in the JSON. More...
 
+bool operator== (const iterator &other) const noexcept
 
+bool operator< (const iterator &other) const noexcept
 
+bool operator<= (const iterator &other) const noexcept
 
+bool operator>= (const iterator &other) const noexcept
 
+bool operator> (const iterator &other) const noexcept
 
iterator (const iterator &) noexcept=default
 
+iteratoroperator= (const iterator &) noexcept=default
 
+

Detailed Description

+
+

Definition at line 27 of file array.h.

+

Member Function Documentation

+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool simdjson::dom::array::iterator::operator!= (const iteratorother) const
+
+inlinenoexcept
+
+ +

Check if these values come from the same place in the JSON.

+

Part of the std::iterator interface.

+ +

Definition at line 138 of file array-inl.h.

+ +
+
+ +

◆ operator++() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
array::iterator & simdjson::dom::array::iterator::operator++ ()
+
+inlinenoexcept
+
+ +

Get the next value.

+

Part of the std::iterator interface.

+ +

Definition at line 129 of file array-inl.h.

+ +
+
+ +

◆ operator++() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
array::iterator simdjson::dom::array::iterator::operator++ (int )
+
+inlinenoexcept
+
+ +

Get the next value.

+

Part of the std::iterator interface.

+ +

Definition at line 133 of file array-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1array_1_1iterator.js b/classsimdjson_1_1dom_1_1array_1_1iterator.js new file mode 100644 index 000000000..1490551f2 --- /dev/null +++ b/classsimdjson_1_1dom_1_1array_1_1iterator.js @@ -0,0 +1,18 @@ +var classsimdjson_1_1dom_1_1array_1_1iterator = +[ + [ "difference_type", "classsimdjson_1_1dom_1_1array_1_1iterator.html#ac80e4259b16f3a4e2b2ab64dbd15eb2f", null ], + [ "value_type", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a86b8e629aeed9d34a3580ab3906d71fc", null ], + [ "iterator", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a49f4f063fe5f652eb286e6db5f0c7985", null ], + [ "iterator", "classsimdjson_1_1dom_1_1array_1_1iterator.html#afede12d9a07418ca9f4ffd98ad033674", null ], + [ "operator!=", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a2680a46eeece638bc352bcf6a169bcf6", null ], + [ "operator*", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a90254656d4e7a8826246d1f931647eff", null ], + [ "operator++", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a6ec91111a2bcc9e378d30b47b613fac5", null ], + [ "operator++", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a46454681bd5e3a938c04eb89210e7966", null ], + [ "operator<", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a5c01e07f3df79180d0b6f6bea297a6aa", null ], + [ "operator<=", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a0605c48ee19b7a74c300b18d71c93fbd", null ], + [ "operator=", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a71838b501c398c7b180946a39a26f6e8", null ], + [ "operator==", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a42014632353c9ae4821838b728a0d329", null ], + [ "operator>", "classsimdjson_1_1dom_1_1array_1_1iterator.html#aeac6894aa764e1abf169474e7a709858", null ], + [ "operator>=", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a69e1adf3c99fc8db0aa88a2546189019", null ], + [ "array", "classsimdjson_1_1dom_1_1array_1_1iterator.html#a96cd9e5da7256c58b4af1227e9f61afb", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1document-members.html b/classsimdjson_1_1dom_1_1document-members.html new file mode 100644 index 000000000..7a7b96d3d --- /dev/null +++ b/classsimdjson_1_1dom_1_1document-members.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::document Member List
+
+
+ +

This is the complete list of members for simdjson::dom::document, including all inherited members.

+ + + + + + +
document() noexcept=defaultsimdjson::dom::document
document(document &&other) noexcept=defaultsimdjson::dom::document
operator=(document &&other) noexcept=defaultsimdjson::dom::document
root() const noexceptsimdjson::dom::documentinline
~document() noexcept=default (defined in simdjson::dom::document)simdjson::dom::document
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1document.html b/classsimdjson_1_1dom_1_1document.html new file mode 100644 index 000000000..92c66249a --- /dev/null +++ b/classsimdjson_1_1dom_1_1document.html @@ -0,0 +1,233 @@ + + + + + + + +simdjson: simdjson::dom::document Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::document Class Reference
+
+
+ +

A parsed JSON document. + More...

+ + + + + + + + + + + + + + +

+Public Member Functions

 document () noexcept=default
 Create a document container with zero capacity. More...
 
 document (document &&other) noexcept=default
 Take another document's buffers. More...
 
documentoperator= (document &&other) noexcept=default
 Take another document's buffers. More...
 
+element root () const noexcept
 Get the root element of this document as a JSON array.
 
+

Detailed Description

+

A parsed JSON document.

+

This class cannot be copied, only moved, to avoid unintended allocations.

+ +

Definition at line 18 of file document.h.

+

Constructor & Destructor Documentation

+ +

◆ document() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::document::document ()
+
+defaultnoexcept
+
+ +

Create a document container with zero capacity.

+

The parser will allocate capacity as needed.

+ +
+
+ +

◆ document() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson::dom::document::document (document && other)
+
+defaultnoexcept
+
+ +

Take another document's buffers.

+
Parameters
+ + +
otherThe document to take. Its capacity is zeroed and it is invalidated.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
document& simdjson::dom::document::operator= (document && other)
+
+defaultnoexcept
+
+ +

Take another document's buffers.

+
Parameters
+ + +
otherThe document to take. Its capacity is zeroed.
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1document.js b/classsimdjson_1_1dom_1_1document.js new file mode 100644 index 000000000..b8539016c --- /dev/null +++ b/classsimdjson_1_1dom_1_1document.js @@ -0,0 +1,9 @@ +var classsimdjson_1_1dom_1_1document = +[ + [ "document", "classsimdjson_1_1dom_1_1document.html#a6947c9d79453071ca73d06e398bcdd2a", null ], + [ "~document", "classsimdjson_1_1dom_1_1document.html#a1d0ed440a7597e9a17c3cbe7e4a58bd1", null ], + [ "document", "classsimdjson_1_1dom_1_1document.html#af34f108b46f82428bfe4ea33869358f0", null ], + [ "operator=", "classsimdjson_1_1dom_1_1document.html#a336814aa587d9ca605e1548b22b2b80c", null ], + [ "root", "classsimdjson_1_1dom_1_1document.html#ae19dced0eee5f63b9d1591ef51dcda4e", null ], + [ "parser", "classsimdjson_1_1dom_1_1document.html#a8de78aa991dff0fc519d5c721ea49733", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1document__stream-members.html b/classsimdjson_1_1dom_1_1document__stream-members.html new file mode 100644 index 000000000..a3dc92dc1 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream-members.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::document_stream Member List
+
+
+ +

This is the complete list of members for simdjson::dom::document_stream, including all inherited members.

+ + + + + + + + + +
begin() noexceptsimdjson::dom::document_stream
document_stream() noexceptsimdjson::dom::document_stream
document_stream(document_stream &&other) noexcept=defaultsimdjson::dom::document_stream
end() noexceptsimdjson::dom::document_stream
operator=(document_stream &&other) noexcept=defaultsimdjson::dom::document_stream
size_in_bytes() const noexceptsimdjson::dom::document_streaminline
truncated_bytes() const noexceptsimdjson::dom::document_streaminline
~document_stream() noexcept (defined in simdjson::dom::document_stream)simdjson::dom::document_stream
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1document__stream.html b/classsimdjson_1_1dom_1_1document__stream.html new file mode 100644 index 000000000..6c69d3b54 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream.html @@ -0,0 +1,223 @@ + + + + + + + +simdjson: simdjson::dom::document_stream Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::document_stream Class Reference
+
+
+ +

A forward-only stream of documents. + More...

+ + + + + +

+Classes

class  iterator
 An iterator through a forward-only stream of documents. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline document_stream () noexcept
 Construct an uninitialized document_stream. More...
 
+simdjson_inline document_stream (document_stream &&other) noexcept=default
 Move one document_stream to another.
 
+simdjson_inline document_streamoperator= (document_stream &&other) noexcept=default
 Move one document_stream to another.
 
+size_t size_in_bytes () const noexcept
 Returns the input size in bytes.
 
size_t truncated_bytes () const noexcept
 After iterating through the stream, this method returns the number of bytes that were not parsed at the end of the stream. More...
 
+simdjson_inline iterator begin () noexcept
 Start iterating the documents in the stream.
 
+simdjson_inline iterator end () noexcept
 The end of the stream, for iterator comparison purposes.
 
+

Detailed Description

+

A forward-only stream of documents.

+

Produced by parser::parse_many.

+ +

Definition at line 73 of file document_stream.h.

+

Constructor & Destructor Documentation

+ +

◆ document_stream()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline simdjson::dom::document_stream::document_stream ()
+
+noexcept
+
+ +

Construct an uninitialized document_stream.

+
{c++}
+ +
error = parser.parse_many(json).get(docs);
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+
simdjson_result< document_stream > parse_many(const uint8_t *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
Parse a buffer containing many JSON documents.
Definition: parser-inl.h:155
+
+

Definition at line 106 of file document_stream-inl.h.

+ +
+
+

Member Function Documentation

+ +

◆ truncated_bytes()

+ +
+
+ + + + + +
+ + + + + + + +
size_t simdjson::dom::document_stream::truncated_bytes () const
+
+inlinenoexcept
+
+ +

After iterating through the stream, this method returns the number of bytes that were not parsed at the end of the stream.

+

If truncated_bytes() differs from zero, then the input was truncated maybe because incomplete JSON documents were found at the end of the stream. You may need to process the bytes in the interval [size_in_bytes()-truncated_bytes(), size_in_bytes()).

+

You should only call truncated_bytes() after streaming through all documents, like so:

+

document_stream stream = parser.parse_many(json,window); for(auto doc : stream) { // do something with doc } size_t truncated = stream.truncated_bytes();

+ +

Definition at line 258 of file document_stream-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1document__stream.js b/classsimdjson_1_1dom_1_1document__stream.js new file mode 100644 index 000000000..e3129e922 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream.js @@ -0,0 +1,15 @@ +var classsimdjson_1_1dom_1_1document__stream = +[ + [ "iterator", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html", "classsimdjson_1_1dom_1_1document__stream_1_1iterator" ], + [ "document_stream", "classsimdjson_1_1dom_1_1document__stream.html#ae6ee894790448145e11a456f12253364", null ], + [ "document_stream", "classsimdjson_1_1dom_1_1document__stream.html#a9d6bb44a7d8f818c401d65fb80f6a523", null ], + [ "~document_stream", "classsimdjson_1_1dom_1_1document__stream.html#ac5d8dbc707426156e7b24e09c5e497cb", null ], + [ "begin", "classsimdjson_1_1dom_1_1document__stream.html#a9a51df3d81c9b7849bbbc8ae42096b76", null ], + [ "end", "classsimdjson_1_1dom_1_1document__stream.html#adec1e168e4188bf9c90ee87adbd72850", null ], + [ "operator=", "classsimdjson_1_1dom_1_1document__stream.html#a162d002972b41bbb7d8e4021341e15ba", null ], + [ "size_in_bytes", "classsimdjson_1_1dom_1_1document__stream.html#a2a08525ae815167b73b6393a8999e46b", null ], + [ "truncated_bytes", "classsimdjson_1_1dom_1_1document__stream.html#a6c2a07e08213dc9a51754940942f9e69", null ], + [ "dom::parser", "classsimdjson_1_1dom_1_1document__stream.html#aa24ec707bcb0b43f2ea051a2e8d01810", null ], + [ "internal::simdjson_result_base< dom::document_stream >", "classsimdjson_1_1dom_1_1document__stream.html#af314290dd62a033921af5ee7a9447949", null ], + [ "simdjson_result< dom::document_stream >", "classsimdjson_1_1dom_1_1document__stream.html#aa2d6a16cdf3abdb13dba36368204d71c", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1document__stream_1_1iterator-members.html b/classsimdjson_1_1dom_1_1document__stream_1_1iterator-members.html new file mode 100644 index 000000000..07cbc9e76 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream_1_1iterator-members.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::document_stream::iterator Member List
+
+ +
+ + + + diff --git a/classsimdjson_1_1dom_1_1document__stream_1_1iterator.html b/classsimdjson_1_1dom_1_1document__stream_1_1iterator.html new file mode 100644 index 000000000..be50a8af4 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream_1_1iterator.html @@ -0,0 +1,189 @@ + + + + + + + +simdjson: simdjson::dom::document_stream::iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::document_stream::iterator Class Reference
+
+
+ +

An iterator through a forward-only stream of documents. + More...

+ + + + + + + + + + +

+Public Types

+using value_type = simdjson_result< element >
 
+using reference = value_type
 
+using difference_type = std::ptrdiff_t
 
+using iterator_category = std::input_iterator_tag
 
+ + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline iterator () noexcept
 Default constructor.
 
+simdjson_inline reference operator* () noexcept
 Get the current document (or error).
 
+iteratoroperator++ () noexcept
 Advance to the next document (prefix).
 
simdjson_inline bool operator!= (const iterator &other) const noexcept
 Check if we're at the end yet. More...
 
+

Detailed Description

+

An iterator through a forward-only stream of documents.

+ +

Definition at line 116 of file document_stream.h.

+

Member Function Documentation

+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline bool simdjson::dom::document_stream::iterator::operator!= (const iteratorother) const
+
+noexcept
+
+ +

Check if we're at the end yet.

+
Parameters
+ + +
otherthe end iterator to compare to.
+
+
+ +

Definition at line 179 of file document_stream-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1document__stream_1_1iterator.js b/classsimdjson_1_1dom_1_1document__stream_1_1iterator.js new file mode 100644 index 000000000..0572b4037 --- /dev/null +++ b/classsimdjson_1_1dom_1_1document__stream_1_1iterator.js @@ -0,0 +1,12 @@ +var classsimdjson_1_1dom_1_1document__stream_1_1iterator = +[ + [ "difference_type", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a5ef3dae199a3ac1bee0a603c084fe0b5", null ], + [ "iterator_category", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a370e37970a3556983abd12c36a8828a3", null ], + [ "reference", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a3720ae26f70016170d9e8f128fd6211a", null ], + [ "value_type", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a1f89a34b0c2c56da4b0b50953791a5de", null ], + [ "iterator", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a6c3a5002801ab80b1c59422d7f3400d3", null ], + [ "operator!=", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a56c69d73c7e424e008a28771661ab218", null ], + [ "operator*", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a09b193fe348fa8a267b96edd96f7515e", null ], + [ "operator++", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a7b05ed75aa2b2a6d3a17204b9863956a", null ], + [ "document_stream", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a403473bb5329fca6defc6299fb45b780", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1element-members.html b/classsimdjson_1_1dom_1_1element-members.html new file mode 100644 index 000000000..524e2b915 --- /dev/null +++ b/classsimdjson_1_1dom_1_1element-members.html @@ -0,0 +1,155 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::element Member List
+
+
+ +

This is the complete list of members for simdjson::dom::element, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
at(const std::string_view json_pointer) const noexceptsimdjson::dom::elementinline
at(size_t index) const noexceptsimdjson::dom::elementinline
at_key(std::string_view key) const noexceptsimdjson::dom::elementinline
at_key_case_insensitive(std::string_view key) const noexceptsimdjson::dom::elementinline
at_pointer(const std::string_view json_pointer) const noexceptsimdjson::dom::elementinline
begin() const noexcept(false)simdjson::dom::elementinline
element() noexceptsimdjson::dom::element
end() const noexcept(false)simdjson::dom::elementinline
get() const noexceptsimdjson::dom::elementinline
get(T &value) const noexceptsimdjson::dom::element
get(element &value) const noexcept (defined in simdjson::dom::element)simdjson::dom::element
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get() const noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
get_array() const noexceptsimdjson::dom::elementinline
get_bool() const noexceptsimdjson::dom::elementinline
get_c_str() const noexceptsimdjson::dom::elementinline
get_double() const noexceptsimdjson::dom::elementinline
get_int64() const noexceptsimdjson::dom::elementinline
get_object() const noexceptsimdjson::dom::elementinline
get_string() const noexceptsimdjson::dom::elementinline
get_string_length() const noexceptsimdjson::dom::elementinline
get_uint64() const noexceptsimdjson::dom::elementinline
is() const noexceptsimdjson::dom::element
is_array() const noexceptsimdjson::dom::elementinline
is_bool() const noexceptsimdjson::dom::elementinline
is_double() const noexceptsimdjson::dom::elementinline
is_int64() const noexceptsimdjson::dom::elementinline
is_null() const noexceptsimdjson::dom::elementinline
is_number() const noexceptsimdjson::dom::elementinline
is_object() const noexceptsimdjson::dom::elementinline
is_string() const noexceptsimdjson::dom::elementinline
is_uint64() const noexceptsimdjson::dom::elementinline
operator array() const noexcept(false)simdjson::dom::elementinline
operator bool() const noexcept(false)simdjson::dom::elementinline
operator const char *() const noexcept(false)simdjson::dom::elementinlineexplicit
operator double() const noexcept(false)simdjson::dom::elementinline
operator int64_t() const noexcept(false)simdjson::dom::elementinline
operator object() const noexcept(false)simdjson::dom::elementinline
operator std::string_view() const noexcept(false)simdjson::dom::elementinline
operator uint64_t() const noexcept(false)simdjson::dom::elementinline
operator[](std::string_view key) const noexceptsimdjson::dom::elementinline
operator[](const char *key) const noexceptsimdjson::dom::elementinline
tie(T &value, error_code &error) &&noexceptsimdjson::dom::elementinline
tie(T &value, error_code &error) &&noexcept (defined in simdjson::dom::element)simdjson::dom::elementinline
type() const noexceptsimdjson::dom::elementinline
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1element.html b/classsimdjson_1_1dom_1_1element.html new file mode 100644 index 000000000..0bfe7079b --- /dev/null +++ b/classsimdjson_1_1dom_1_1element.html @@ -0,0 +1,1635 @@ + + + + + + + +simdjson: simdjson::dom::element Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::element Class Reference
+
+
+ +

A JSON element. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline element () noexcept
 Create a new, invalid element.
 
+simdjson_inline element_type type () const noexcept
 The type of this element.
 
simdjson_result< arrayget_array () const noexcept
 Cast this element to an array. More...
 
simdjson_result< objectget_object () const noexcept
 Cast this element to an object. More...
 
simdjson_result< const char * > get_c_str () const noexcept
 Cast this element to a null-terminated C string. More...
 
simdjson_result< size_t > get_string_length () const noexcept
 Gives the length in bytes of the string. More...
 
simdjson_result< std::string_view > get_string () const noexcept
 Cast this element to a string. More...
 
simdjson_result< int64_t > get_int64 () const noexcept
 Cast this element to a signed integer. More...
 
simdjson_result< uint64_t > get_uint64 () const noexcept
 Cast this element to an unsigned integer. More...
 
simdjson_result< double > get_double () const noexcept
 Cast this element to a double floating-point. More...
 
simdjson_result< bool > get_bool () const noexcept
 Cast this element to a bool. More...
 
bool is_array () const noexcept
 Whether this element is a json array. More...
 
bool is_object () const noexcept
 Whether this element is a json object. More...
 
bool is_string () const noexcept
 Whether this element is a json string. More...
 
bool is_int64 () const noexcept
 Whether this element is a json number that fits in a signed 64-bit integer. More...
 
bool is_uint64 () const noexcept
 Whether this element is a json number that fits in an unsigned 64-bit integer. More...
 
bool is_double () const noexcept
 Whether this element is a json number that fits in a double. More...
 
bool is_number () const noexcept
 Whether this element is a json number. More...
 
bool is_bool () const noexcept
 Whether this element is a json true or false. More...
 
+bool is_null () const noexcept
 Whether this element is a json null.
 
template<typename T >
simdjson_inline bool is () const noexcept
 Tell whether the value can be cast to provided type (T). More...
 
template<typename T >
simdjson_result< T > get () const noexcept
 Get the value as the provided type (T). More...
 
template<typename T >
simdjson_warn_unused simdjson_inline error_code get (T &value) const noexcept
 Get the value as the provided type (T). More...
 
template<typename T >
void tie (T &value, error_code &error) &&noexcept
 Get the value as the provided type (T), setting error if it's not the given type. More...
 
 operator bool () const noexcept(false)
 Read this element as a boolean. More...
 
 operator const char * () const noexcept(false)
 Read this element as a null-terminated UTF-8 string. More...
 
 operator std::string_view () const noexcept(false)
 Read this element as a null-terminated UTF-8 string. More...
 
 operator uint64_t () const noexcept(false)
 Read this element as an unsigned integer. More...
 
 operator int64_t () const noexcept(false)
 Read this element as an signed integer. More...
 
 operator double () const noexcept(false)
 Read this element as an double. More...
 
 operator array () const noexcept(false)
 Read this element as a JSON array. More...
 
 operator object () const noexcept(false)
 Read this element as a JSON object (key/value pairs). More...
 
dom::array::iterator begin () const noexcept(false)
 Iterate over each element in this array. More...
 
dom::array::iterator end () const noexcept(false)
 Iterate over each element in this array. More...
 
simdjson_result< elementoperator[] (std::string_view key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementoperator[] (const char *key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementat_pointer (const std::string_view json_pointer) const noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_result< elementat (const std::string_view json_pointer) const noexcept
 Version 0.4 of simdjson used an incorrect interpretation of the JSON Pointer standard and allowed the following : More...
 
simdjson_result< elementat (size_t index) const noexcept
 Get the value at the given index. More...
 
simdjson_result< elementat_key (std::string_view key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementat_key_case_insensitive (std::string_view key) const noexcept
 Get the value associated with the given key in a case-insensitive manner. More...
 
+template<>
simdjson_warn_unused simdjson_inline error_code get (element &value) const noexcept
 
+template<typename T >
void tie (T &value, error_code &error) &&noexcept
 
+template<>
simdjson_result< arrayget () const noexcept
 
+template<>
simdjson_result< objectget () const noexcept
 
+template<>
simdjson_result< const char * > get () const noexcept
 
+template<>
simdjson_result< int64_t > get () const noexcept
 
+template<>
simdjson_result< uint64_t > get () const noexcept
 
+template<>
simdjson_result< double > get () const noexcept
 
+template<>
simdjson_result< bool > get () const noexcept
 
+

Detailed Description

+

A JSON element.

+

References an element in a JSON document, representing a JSON null, boolean, string, number, array or object.

+ +

Definition at line 40 of file element.h.

+

Member Function Documentation

+ +

◆ at() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::at (const std::string_view json_pointer) const
+
+inlinenoexcept
+
+ +

Version 0.4 of simdjson used an incorrect interpretation of the JSON Pointer standard and allowed the following :

+

dom::parser parser; element doc = parser.parse(R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded); doc.at("foo/a/1") == 20

+

Though it is intuitive, it is not compliant with RFC 6901 https://tools.ietf.org/html/rfc6901

+

For standard compliance, use the at_pointer function instead.

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 391 of file element-inl.h.

+ +
+
+ +

◆ at() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::at (size_t index) const
+
+inlinenoexcept
+
+ +

Get the value at the given index.

+
Returns
The value at the given index, or:
    +
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length
  • +
+
+ +

Definition at line 398 of file element-inl.h.

+ +
+
+ +

◆ at_key()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::at_key (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
+
+ +

Definition at line 401 of file element-inl.h.

+ +
+
+ +

◆ at_key_case_insensitive()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::at_key_case_insensitive (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key in a case-insensitive manner.

+

Note: The key will be matched against unescaped JSON.

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
+
+ +

Definition at line 404 of file element-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::at_pointer (const std::string_view json_pointer) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard.

+

dom::parser parser; element doc = parser.parse(R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded); doc.at_pointer("/foo/a/1") == 20 doc.at_pointer("/foo")["a"].at(1) == 20 doc.at_pointer("")["foo"]["a"].at(1) == 20

+

It is allowed for a key to be the empty string:

+

dom::parser parser; object obj = parser.parse(R"({ "": { "a": [ 10, 20, 30 ] }})"_padded); obj.at_pointer("//a/1") == 20

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 372 of file element-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
array::iterator simdjson::dom::element::begin () const
+
+inlinenoexcept
+
+ +

Iterate over each element in this array.

+
Returns
The beginning of the iteration.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an array
+
+
+ +

Definition at line 356 of file element-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
array::iterator simdjson::dom::element::end () const
+
+inlinenoexcept
+
+ +

Iterate over each element in this array.

+
Returns
The end of the iteration.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an array
+
+
+ +

Definition at line 359 of file element-inl.h.

+ +
+
+ +

◆ get() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
simdjson_result<T> simdjson::dom::element::get () const
+
+inlinenoexcept
+
+ +

Get the value as the provided type (T).

+

Supported types:

    +
  • Boolean: bool
  • +
  • Number: double, uint64_t, int64_t
  • +
  • String: std::string_view, const char *
  • +
  • Array: dom::array
  • +
  • Object: dom::object
  • +
+

You may use get_double(), get_bool(), get_uint64(), get_int64(), get_object(), get_array() or get_string() instead.

+
Template Parameters
+ + +
Tbool, double, uint64_t, int64_t, std::string_view, const char *, dom::array, dom::object
+
+
+
Returns
The value cast to the given type, or: INCORRECT_TYPE if the value cannot be cast to the given type.
+ +

Definition at line 220 of file element.h.

+ +
+
+ +

◆ get() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
simdjson_warn_unused simdjson_inline error_code simdjson::dom::element::get (T & value) const
+
+noexcept
+
+ +

Get the value as the provided type (T).

+

Supported types:

    +
  • Boolean: bool
  • +
  • Number: double, uint64_t, int64_t
  • +
  • String: std::string_view, const char *
  • +
  • Array: dom::array
  • +
  • Object: dom::object
  • +
+
Template Parameters
+ + +
Tbool, double, uint64_t, int64_t, std::string_view, const char *, dom::array, dom::object
+
+
+
Parameters
+ + +
valueThe variable to set to the value. May not be set if there is an error.
+
+
+
Returns
The error that occurred, or SUCCESS if there was no error.
+ +

Definition at line 303 of file element-inl.h.

+ +
+
+ +

◆ get_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< array > simdjson::dom::element::get_array () const
+
+inlinenoexcept
+
+ +

Cast this element to an array.

+
Returns
An object that can be used to iterate the array, or: INCORRECT_TYPE if the JSON element is not an array.
+ +

Definition at line 283 of file element-inl.h.

+ +
+
+ +

◆ get_bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< bool > simdjson::dom::element::get_bool () const
+
+inlinenoexcept
+
+ +

Cast this element to a bool.

+
Returns
A bool value. Returns INCORRECT_TYPE if the JSON element is not a boolean.
+ +

Definition at line 194 of file element-inl.h.

+ +
+
+ +

◆ get_c_str()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< const char * > simdjson::dom::element::get_c_str () const
+
+inlinenoexcept
+
+ +

Cast this element to a null-terminated C string.

+

The string is guaranteed to be valid UTF-8.

+

The length of the string is given by get_string_length(). Because JSON strings may contain null characters, it may be incorrect to use strlen to determine the string length.

+

It is possible to get a single string_view instance which represents both the string content and its length: see get_string().

+
Returns
A pointer to a null-terminated UTF-8 string. This string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed. Returns INCORRECT_TYPE if the JSON element is not a string.
+ +

Definition at line 203 of file element-inl.h.

+ +
+
+ +

◆ get_double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< double > simdjson::dom::element::get_double () const
+
+inlinenoexcept
+
+ +

Cast this element to a double floating-point.

+
Returns
A double value. Returns INCORRECT_TYPE if the JSON element is not a number.
+ +

Definition at line 261 of file element-inl.h.

+ +
+
+ +

◆ get_int64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< int64_t > simdjson::dom::element::get_int64 () const
+
+inlinenoexcept
+
+ +

Cast this element to a signed integer.

+
Returns
A signed 64-bit integer. Returns INCORRECT_TYPE if the JSON element is not an integer, or NUMBER_OUT_OF_RANGE if it is negative.
+ +

Definition at line 246 of file element-inl.h.

+ +
+
+ +

◆ get_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< object > simdjson::dom::element::get_object () const
+
+inlinenoexcept
+
+ +

Cast this element to an object.

+
Returns
An object that can be used to look up or iterate the object's fields, or: INCORRECT_TYPE if the JSON element is not an object.
+ +

Definition at line 292 of file element-inl.h.

+ +
+
+ +

◆ get_string()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< std::string_view > simdjson::dom::element::get_string () const
+
+inlinenoexcept
+
+ +

Cast this element to a string.

+

The string is guaranteed to be valid UTF-8.

+
Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed. Returns INCORRECT_TYPE if the JSON element is not a string.
+ +

Definition at line 223 of file element-inl.h.

+ +
+
+ +

◆ get_string_length()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< size_t > simdjson::dom::element::get_string_length () const
+
+inlinenoexcept
+
+ +

Gives the length in bytes of the string.

+

It is possible to get a single string_view instance which represents both the string content and its length: see get_string().

+
Returns
A string length in bytes. Returns INCORRECT_TYPE if the JSON element is not a string.
+ +

Definition at line 213 of file element-inl.h.

+ +
+
+ +

◆ get_uint64()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_result< uint64_t > simdjson::dom::element::get_uint64 () const
+
+inlinenoexcept
+
+ +

Cast this element to an unsigned integer.

+
Returns
An unsigned 64-bit integer. Returns INCORRECT_TYPE if the JSON element is not an integer, or NUMBER_OUT_OF_RANGE if it is too large.
+ +

Definition at line 232 of file element-inl.h.

+ +
+
+ +

◆ is()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
simdjson_inline bool simdjson::dom::element::is
+
+noexcept
+
+ +

Tell whether the value can be cast to provided type (T).

+

Supported types:

    +
  • Boolean: bool
  • +
  • Number: double, uint64_t, int64_t
  • +
  • String: std::string_view, const char *
  • +
  • Array: dom::array
  • +
  • Object: dom::object
  • +
+
Template Parameters
+ + +
Tbool, double, uint64_t, int64_t, std::string_view, const char *, dom::array, dom::object
+
+
+ +

Definition at line 318 of file element-inl.h.

+ +
+
+ +

◆ is_array()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_array () const
+
+inlinenoexcept
+
+ +

Whether this element is a json array.

+

Equivalent to is<array>().

+ +

Definition at line 332 of file element-inl.h.

+ +
+
+ +

◆ is_bool()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_bool () const
+
+inlinenoexcept
+
+ +

Whether this element is a json true or false.

+

Equivalent to is<bool>().

+ +

Definition at line 338 of file element-inl.h.

+ +
+
+ +

◆ is_double()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_double () const
+
+inlinenoexcept
+
+ +

Whether this element is a json number that fits in a double.

+

Equivalent to is<double>().

+ +

Definition at line 337 of file element-inl.h.

+ +
+
+ +

◆ is_int64()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_int64 () const
+
+inlinenoexcept
+
+ +

Whether this element is a json number that fits in a signed 64-bit integer.

+

Equivalent to is<int64_t>().

+ +

Definition at line 335 of file element-inl.h.

+ +
+
+ +

◆ is_number()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_number () const
+
+inlinenoexcept
+
+ +

Whether this element is a json number.

+

Both integers and floating points will return true.

+ +

Definition at line 339 of file element-inl.h.

+ +
+
+ +

◆ is_object()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_object () const
+
+inlinenoexcept
+
+ +

Whether this element is a json object.

+

Equivalent to is<object>().

+ +

Definition at line 333 of file element-inl.h.

+ +
+
+ +

◆ is_string()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_string () const
+
+inlinenoexcept
+
+ +

Whether this element is a json string.

+

Equivalent to is<std::string_view>() or is<const char *>().

+ +

Definition at line 334 of file element-inl.h.

+ +
+
+ +

◆ is_uint64()

+ +
+
+ + + + + +
+ + + + + + + +
bool simdjson::dom::element::is_uint64 () const
+
+inlinenoexcept
+
+ +

Whether this element is a json number that fits in an unsigned 64-bit integer.

+

Equivalent to is<uint64_t>().

+ +

Definition at line 336 of file element-inl.h.

+ +
+
+ +

◆ operator array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator array () const
+
+inlinenoexcept
+
+ +

Read this element as a JSON array.

+
Returns
The JSON array.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an array
+
+
+ +

Definition at line 353 of file element-inl.h.

+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator bool () const
+
+inlinenoexcept
+
+ +

Read this element as a boolean.

+
Returns
The boolean value
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not a boolean.
+
+
+ +

Definition at line 347 of file element-inl.h.

+ +
+
+ +

◆ operator const char *()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator const char * () const
+
+inlineexplicitnoexcept
+
+ +

Read this element as a null-terminated UTF-8 string.

+

Be mindful that JSON allows strings to contain null characters.

+

Does not convert other types to a string; requires that the JSON type of the element was an actual string.

+
Returns
The string value.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not a string.
+
+
+ +

Definition at line 348 of file element-inl.h.

+ +
+
+ +

◆ operator double()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator double () const
+
+inlinenoexcept
+
+ +

Read this element as an double.

+
Returns
The double value.
+
Exceptions
+ + + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not a number
simdjson_error(NUMBER_OUT_OF_RANGE)if the integer doesn't fit in 64 bits or is negative
+
+
+ +

Definition at line 352 of file element-inl.h.

+ +
+
+ +

◆ operator int64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator int64_t () const
+
+inlinenoexcept
+
+ +

Read this element as an signed integer.

+
Returns
The integer value.
+
Exceptions
+ + + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an integer
simdjson_error(NUMBER_OUT_OF_RANGE)if the integer doesn't fit in 64 bits
+
+
+ +

Definition at line 351 of file element-inl.h.

+ +
+
+ +

◆ operator object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator object () const
+
+inlinenoexcept
+
+ +

Read this element as a JSON object (key/value pairs).

+
Returns
The JSON object.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an object
+
+
+ +

Definition at line 354 of file element-inl.h.

+ +
+
+ +

◆ operator std::string_view()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator std::string_view () const
+
+inlinenoexcept
+
+ +

Read this element as a null-terminated UTF-8 string.

+

Does not convert other types to a string; requires that the JSON type of the element was an actual string.

+
Returns
The string value.
+
Exceptions
+ + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not a string.
+
+
+ +

Definition at line 349 of file element-inl.h.

+ +
+
+ +

◆ operator uint64_t()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson::dom::element::operator uint64_t () const
+
+inlinenoexcept
+
+ +

Read this element as an unsigned integer.

+
Returns
The integer value.
+
Exceptions
+ + + +
simdjson_error(INCORRECT_TYPE)if the JSON element is not an integer
simdjson_error(NUMBER_OUT_OF_RANGE)if the integer doesn't fit in 64 bits or is negative
+
+
+ +

Definition at line 350 of file element-inl.h.

+ +
+
+ +

◆ operator[]() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::operator[] (const char * key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
  • INCORRECT_TYPE if this is not an object
  • +
+
+ +

Definition at line 368 of file element-inl.h.

+ +
+
+ +

◆ operator[]() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::element::operator[] (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
  • INCORRECT_TYPE if this is not an object
  • +
+
+ +

Definition at line 365 of file element-inl.h.

+ +
+
+ +

◆ tie()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void simdjson::dom::element::tie (T & value,
error_codeerror 
) &&
+
+inlinenoexcept
+
+ +

Get the value as the provided type (T), setting error if it's not the given type.

+

Supported types:

    +
  • Boolean: bool
  • +
  • Number: double, uint64_t, int64_t
  • +
  • String: std::string_view, const char *
  • +
  • Array: dom::array
  • +
  • Object: dom::object
  • +
+
Template Parameters
+ + +
Tbool, double, uint64_t, int64_t, std::string_view, const char *, dom::array, dom::object
+
+
+
Parameters
+ + + +
valueThe variable to set to the given type. value is undefined if there is an error.
errorThe variable to store the error. error is set to error_code::SUCCEED if there is an error.
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1element.js b/classsimdjson_1_1dom_1_1element.js new file mode 100644 index 000000000..878e8d6ac --- /dev/null +++ b/classsimdjson_1_1dom_1_1element.js @@ -0,0 +1,57 @@ +var classsimdjson_1_1dom_1_1element = +[ + [ "element", "classsimdjson_1_1dom_1_1element.html#a9dbf81ad662ad32168025e8e08686935", null ], + [ "at", "classsimdjson_1_1dom_1_1element.html#aa8b5798004a859bf922778226b8c1cce", null ], + [ "at", "classsimdjson_1_1dom_1_1element.html#aeb155c47ef7bebcad79e1b7449734030", null ], + [ "at_key", "classsimdjson_1_1dom_1_1element.html#a686a21f39c755dcbf95116757d2193bd", null ], + [ "at_key_case_insensitive", "classsimdjson_1_1dom_1_1element.html#a5185447e6bf8949e7c5e9c22711e8764", null ], + [ "at_pointer", "classsimdjson_1_1dom_1_1element.html#a3777fed88f37555f2d090aeb604a117c", null ], + [ "begin", "classsimdjson_1_1dom_1_1element.html#aa59ecf8e9ac7b1a9e977d2cd3f03aa7f", null ], + [ "end", "classsimdjson_1_1dom_1_1element.html#a846a790e93c9bad6c40641239bd77b28", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#ae5ce6ad2e6036b4bb7a78261858bb337", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a20ee1596f285657b742dc6fd63814d42", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a88fd2688dafd8e58b9b1d46653042169", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#aadae8cc4d16ad66817e859420fd4e97c", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a73c7f0ce4e5b5de6e04d3686ecbdb40d", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a1eb96f12e2aba717324b78080d380325", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a3934a12b0a534bde21fc78a58afd0737", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a47663724b3a6bad8666ccd24cd598bd2", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#ac111e6d27806dbd39794f2c394f95757", null ], + [ "get", "classsimdjson_1_1dom_1_1element.html#a3474c8fc1b1cb06625a50dcb9a2c5269", null ], + [ "get_array", "classsimdjson_1_1dom_1_1element.html#a87c75accdc0b35e06f3d554561ce8cd3", null ], + [ "get_bool", "classsimdjson_1_1dom_1_1element.html#a548e0fc369eb455ea477e20fb0793627", null ], + [ "get_c_str", "classsimdjson_1_1dom_1_1element.html#a29c21d70352c9b8af7144fd4f38baaa6", null ], + [ "get_double", "classsimdjson_1_1dom_1_1element.html#a3e74a8a6ef8318e2de805359126c6d7b", null ], + [ "get_int64", "classsimdjson_1_1dom_1_1element.html#aa954cda836a4748ec9937291a9250604", null ], + [ "get_object", "classsimdjson_1_1dom_1_1element.html#ab4c2e35dc44664eb04038ad35efc64f9", null ], + [ "get_string", "classsimdjson_1_1dom_1_1element.html#ae83652b5016ce4d4ff71f8f9bc05913e", null ], + [ "get_string_length", "classsimdjson_1_1dom_1_1element.html#a9d92145af64401654c20d2885dd4051d", null ], + [ "get_uint64", "classsimdjson_1_1dom_1_1element.html#a9e5a750a066f17d5a9a31a24980e0b1d", null ], + [ "is", "classsimdjson_1_1dom_1_1element.html#a4c77063d766c7db197f8674407b504d7", null ], + [ "is_array", "classsimdjson_1_1dom_1_1element.html#afaaac6e2f58128a01a25b0a5f5abb856", null ], + [ "is_bool", "classsimdjson_1_1dom_1_1element.html#afde562c5aae1b85a03ab6d4b040e7d13", null ], + [ "is_double", "classsimdjson_1_1dom_1_1element.html#a0d11f69ba87f55960be6f655e4e99aba", null ], + [ "is_int64", "classsimdjson_1_1dom_1_1element.html#adadf66ec37675d5f3fac9816a8aacba2", null ], + [ "is_null", "classsimdjson_1_1dom_1_1element.html#ae38f84f4272ae3c32b32dd6d5007ffb9", null ], + [ "is_number", "classsimdjson_1_1dom_1_1element.html#a1e3f78b3bee5ec3f33cc4b03dcc87981", null ], + [ "is_object", "classsimdjson_1_1dom_1_1element.html#a08c7dcebf9e96fe5e4dd6df2959c0024", null ], + [ "is_string", "classsimdjson_1_1dom_1_1element.html#a65bd96042cc0f19dc3e0635937edded4", null ], + [ "is_uint64", "classsimdjson_1_1dom_1_1element.html#ac5017726a573f59c3494b92bb66a3beb", null ], + [ "operator array", "classsimdjson_1_1dom_1_1element.html#a71d6bfa627dd66e202f8b402f91a44ac", null ], + [ "operator bool", "classsimdjson_1_1dom_1_1element.html#ab036e52a73d5bd046e1f2650a31dab30", null ], + [ "operator const char *", "classsimdjson_1_1dom_1_1element.html#a8f9569b40dd2b23aab9fbf2229749589", null ], + [ "operator double", "classsimdjson_1_1dom_1_1element.html#a743b5f1ef4202d8fb8fb317e612385f3", null ], + [ "operator int64_t", "classsimdjson_1_1dom_1_1element.html#afb98fdfcb6ddf19071cd2300613218d3", null ], + [ "operator object", "classsimdjson_1_1dom_1_1element.html#a23f4d8c38309b0184e658d8a9697a177", null ], + [ "operator std::string_view", "classsimdjson_1_1dom_1_1element.html#a83adcf723abff34d7c1e8ec0e69d967b", null ], + [ "operator uint64_t", "classsimdjson_1_1dom_1_1element.html#ae3c0226046e29cfb0e868c5251a87e53", null ], + [ "operator[]", "classsimdjson_1_1dom_1_1element.html#a367d22eeabc1881a8eb18bae2f2ba3b8", null ], + [ "operator[]", "classsimdjson_1_1dom_1_1element.html#aca693f57d73a5ce95d1f7bedf67289b7", null ], + [ "tie", "classsimdjson_1_1dom_1_1element.html#a5342161b8c52c78b2f5edac10e9d05ca", null ], + [ "tie", "classsimdjson_1_1dom_1_1element.html#a5342161b8c52c78b2f5edac10e9d05ca", null ], + [ "type", "classsimdjson_1_1dom_1_1element.html#a19162bf6d94fb6c21bb2bf2e9b78ff0d", null ], + [ "array", "classsimdjson_1_1dom_1_1element.html#a96cd9e5da7256c58b4af1227e9f61afb", null ], + [ "document", "classsimdjson_1_1dom_1_1element.html#a7c20332b4481f29ace969e40cfce5f5f", null ], + [ "object", "classsimdjson_1_1dom_1_1element.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "simdjson_result< element >", "classsimdjson_1_1dom_1_1element.html#a5db654c4e603254bd308a7c068d79c43", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1key__value__pair-members.html b/classsimdjson_1_1dom_1_1key__value__pair-members.html new file mode 100644 index 000000000..bed7c0e81 --- /dev/null +++ b/classsimdjson_1_1dom_1_1key__value__pair-members.html @@ -0,0 +1,107 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::key_value_pair Member List
+
+
+ +

This is the complete list of members for simdjson::dom::key_value_pair, including all inherited members.

+ + + +
keysimdjson::dom::key_value_pair
valuesimdjson::dom::key_value_pair
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1key__value__pair.html b/classsimdjson_1_1dom_1_1key__value__pair.html new file mode 100644 index 000000000..7d3756826 --- /dev/null +++ b/classsimdjson_1_1dom_1_1key__value__pair.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: simdjson::dom::key_value_pair Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::key_value_pair Class Reference
+
+
+ +

Key/value pair in an object. + More...

+ + + + + + + + +

+Public Attributes

+std::string_view key
 key in the key-value pair
 
+element value
 value in the key-value pair
 
+

Detailed Description

+

Key/value pair in an object.

+ +

Definition at line 222 of file object.h.

+

The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1key__value__pair.js b/classsimdjson_1_1dom_1_1key__value__pair.js new file mode 100644 index 000000000..4c9ffc107 --- /dev/null +++ b/classsimdjson_1_1dom_1_1key__value__pair.js @@ -0,0 +1,6 @@ +var classsimdjson_1_1dom_1_1key__value__pair = +[ + [ "object", "classsimdjson_1_1dom_1_1key__value__pair.html#a3d4dcacb8171b99f783396bb6a337c65", null ], + [ "key", "classsimdjson_1_1dom_1_1key__value__pair.html#a58c41d937401cfe88ceb6e71d7dbeb45", null ], + [ "value", "classsimdjson_1_1dom_1_1key__value__pair.html#af7e38d9eb63a40256c9f936e45edf703", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1object-members.html b/classsimdjson_1_1dom_1_1object-members.html new file mode 100644 index 000000000..ce6a1d2c1 --- /dev/null +++ b/classsimdjson_1_1dom_1_1object-members.html @@ -0,0 +1,114 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::object Member List
+
+
+ +

This is the complete list of members for simdjson::dom::object, including all inherited members.

+ + + + + + + + + + +
at_key(std::string_view key) const noexceptsimdjson::dom::objectinline
at_key_case_insensitive(std::string_view key) const noexceptsimdjson::dom::objectinline
at_pointer(std::string_view json_pointer) const noexceptsimdjson::dom::objectinline
begin() const noexceptsimdjson::dom::objectinline
end() const noexceptsimdjson::dom::objectinline
object() noexceptsimdjson::dom::object
operator[](std::string_view key) const noexceptsimdjson::dom::objectinline
operator[](const char *key) const noexceptsimdjson::dom::objectinline
size() const noexceptsimdjson::dom::objectinline
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1object.html b/classsimdjson_1_1dom_1_1object.html new file mode 100644 index 000000000..f809c7b96 --- /dev/null +++ b/classsimdjson_1_1dom_1_1object.html @@ -0,0 +1,443 @@ + + + + + + + +simdjson: simdjson::dom::object Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::object Class Reference
+
+
+ +

JSON object. + More...

+ + + + +

+Classes

class  iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+simdjson_inline object () noexcept
 Create a new, invalid object.
 
iterator begin () const noexcept
 Return the first key/value pair. More...
 
iterator end () const noexcept
 One past the last key/value pair. More...
 
size_t size () const noexcept
 Get the size of the object (number of keys). More...
 
simdjson_result< elementoperator[] (std::string_view key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementoperator[] (const char *key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementat_pointer (std::string_view json_pointer) const noexcept
 Get the value associated with the given JSON pointer. More...
 
simdjson_result< elementat_key (std::string_view key) const noexcept
 Get the value associated with the given key. More...
 
simdjson_result< elementat_key_case_insensitive (std::string_view key) const noexcept
 Get the value associated with the given key in a case-insensitive manner. More...
 
+

Detailed Description

+

JSON object.

+ +

Definition at line 22 of file object.h.

+

Member Function Documentation

+ +

◆ at_key()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::object::at_key (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+

This function has linear-time complexity: the keys are checked one by one.

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
+
+ +

Definition at line 131 of file object-inl.h.

+ +
+
+ +

◆ at_key_case_insensitive()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::object::at_key_case_insensitive (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key in a case-insensitive manner.

+

It is only guaranteed to work over ASCII inputs.

+

Note: The key will be matched against unescaped JSON.

+

This function has linear-time complexity: the keys are checked one by one.

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
+
+ +

Definition at line 143 of file object-inl.h.

+ +
+
+ +

◆ at_pointer()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::object::at_pointer (std::string_view json_pointer) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given JSON pointer.

+

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard, interpreting the current node as the root of its own JSON document.

+

dom::parser parser; object obj = parser.parse(R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded); obj.at_pointer("/foo/a/1") == 20 obj.at_pointer("/foo")["a"].at(1) == 20

+

It is allowed for a key to be the empty string:

+

dom::parser parser; object obj = parser.parse(R"({ "": { "a": [ 10, 20, 30 ] }})"_padded); obj.at_pointer("//a/1") == 20 obj.at_pointer("/")["a"].at(1) == 20

+
Returns
The value associated with the given JSON pointer, or:
    +
  • NO_SUCH_FIELD if a field does not exist in an object
  • +
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • +
  • INCORRECT_TYPE if a non-integer is used to access an array
  • +
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed
  • +
+
+ +

Definition at line 86 of file object-inl.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
object::iterator simdjson::dom::object::begin () const
+
+inlinenoexcept
+
+ +

Return the first key/value pair.

+

Part of the std::iterable interface.

+ +

Definition at line 67 of file object-inl.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
object::iterator simdjson::dom::object::end () const
+
+inlinenoexcept
+
+ +

One past the last key/value pair.

+

Part of the std::iterable interface.

+ +

Definition at line 71 of file object-inl.h.

+ +
+
+ +

◆ operator[]() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::object::operator[] (const char * key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+

This function has linear-time complexity: the keys are checked one by one.

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
  • INCORRECT_TYPE if this is not an object
  • +
+
+ +

Definition at line 83 of file object-inl.h.

+ +
+
+ +

◆ operator[]() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::object::operator[] (std::string_view key) const
+
+inlinenoexcept
+
+ +

Get the value associated with the given key.

+

The key will be matched against unescaped JSON:

+

dom::parser parser; int64_t(parser.parse(R"({ "a
+": 1 })"_padded)["a\n"]) == 1 parser.parse(R"({ "a
+": 1 })"_padded)["a\\n"].get_uint64().error() == NO_SUCH_FIELD

+

This function has linear-time complexity: the keys are checked one by one.

+
Returns
The value associated with this field, or:
    +
  • NO_SUCH_FIELD if the field does not exist in the object
  • +
  • INCORRECT_TYPE if this is not an object
  • +
+
+ +

Definition at line 80 of file object-inl.h.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
size_t simdjson::dom::object::size () const
+
+inlinenoexcept
+
+ +

Get the size of the object (number of keys).

+

It is a saturated value with a maximum of 0xFFFFFF: if the value is 0xFFFFFF then the size is 0xFFFFFF or greater.

+ +

Definition at line 75 of file object-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1object.js b/classsimdjson_1_1dom_1_1object.js new file mode 100644 index 000000000..232040c90 --- /dev/null +++ b/classsimdjson_1_1dom_1_1object.js @@ -0,0 +1,15 @@ +var classsimdjson_1_1dom_1_1object = +[ + [ "iterator", "classsimdjson_1_1dom_1_1object_1_1iterator.html", "classsimdjson_1_1dom_1_1object_1_1iterator" ], + [ "object", "classsimdjson_1_1dom_1_1object.html#ae2e1a8cbaab9d352495d1dc993407be3", null ], + [ "at_key", "classsimdjson_1_1dom_1_1object.html#a4fb3e04e0ea591132da90341bf9ed819", null ], + [ "at_key_case_insensitive", "classsimdjson_1_1dom_1_1object.html#ab075da9eb7678f6321cecf4cbd196039", null ], + [ "at_pointer", "classsimdjson_1_1dom_1_1object.html#ace84581be0fee46d5128c49710522aba", null ], + [ "begin", "classsimdjson_1_1dom_1_1object.html#afe127a7e9ec8dab9ec76160525a68a83", null ], + [ "end", "classsimdjson_1_1dom_1_1object.html#a79cf291477bcaa1bf2328411b411587d", null ], + [ "operator[]", "classsimdjson_1_1dom_1_1object.html#a2691ceae488be203aac2d5ef5b67347f", null ], + [ "operator[]", "classsimdjson_1_1dom_1_1object.html#acc66a2f2eb74fbe359d4064531764f50", null ], + [ "size", "classsimdjson_1_1dom_1_1object.html#a93ec5c36aae913f266f533b2e02bc873", null ], + [ "element", "classsimdjson_1_1dom_1_1object.html#a0602f94f596fa800408eeb034b5850ab", null ], + [ "simdjson_result< element >", "classsimdjson_1_1dom_1_1object.html#a5db654c4e603254bd308a7c068d79c43", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1object_1_1iterator-members.html b/classsimdjson_1_1dom_1_1object_1_1iterator-members.html new file mode 100644 index 000000000..68c313623 --- /dev/null +++ b/classsimdjson_1_1dom_1_1object_1_1iterator-members.html @@ -0,0 +1,125 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::object::iterator Member List
+
+
+ +

This is the complete list of members for simdjson::dom::object::iterator, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
difference_type typedef (defined in simdjson::dom::object::iterator)simdjson::dom::object::iterator
iterator() noexcept=default (defined in simdjson::dom::object::iterator)simdjson::dom::object::iterator
iterator(const iterator &) noexcept=default (defined in simdjson::dom::object::iterator)simdjson::dom::object::iterator
key() const noexceptsimdjson::dom::object::iteratorinline
key_c_str() const noexceptsimdjson::dom::object::iteratorinline
key_equals(std::string_view o) const noexceptsimdjson::dom::object::iteratorinline
key_equals_case_insensitive(std::string_view o) const noexceptsimdjson::dom::object::iteratorinline
key_length() const noexceptsimdjson::dom::object::iteratorinline
operator!=(const iterator &other) const noexceptsimdjson::dom::object::iteratorinline
operator*() const noexceptsimdjson::dom::object::iteratorinline
operator++() noexceptsimdjson::dom::object::iteratorinline
operator++(int) noexceptsimdjson::dom::object::iteratorinline
operator<(const iterator &other) const noexcept (defined in simdjson::dom::object::iterator)simdjson::dom::object::iteratorinline
operator<=(const iterator &other) const noexcept (defined in simdjson::dom::object::iterator)simdjson::dom::object::iteratorinline
operator=(const iterator &) noexcept=default (defined in simdjson::dom::object::iterator)simdjson::dom::object::iterator
operator==(const iterator &other) const noexcept (defined in simdjson::dom::object::iterator)simdjson::dom::object::iteratorinline
operator>(const iterator &other) const noexcept (defined in simdjson::dom::object::iterator)simdjson::dom::object::iteratorinline
operator>=(const iterator &other) const noexcept (defined in simdjson::dom::object::iterator)simdjson::dom::object::iteratorinline
value() const noexceptsimdjson::dom::object::iteratorinline
value_type typedef (defined in simdjson::dom::object::iterator)simdjson::dom::object::iterator
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1object_1_1iterator.html b/classsimdjson_1_1dom_1_1object_1_1iterator.html new file mode 100644 index 000000000..a04100c4d --- /dev/null +++ b/classsimdjson_1_1dom_1_1object_1_1iterator.html @@ -0,0 +1,368 @@ + + + + + + + +simdjson: simdjson::dom::object::iterator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::object::iterator Class Reference
+
+
+ + + + + + +

+Public Types

+using value_type = key_value_pair
 
+using difference_type = std::ptrdiff_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const value_type operator* () const noexcept
 Get the actual key/value pair.
 
iteratoroperator++ () noexcept
 Get the next key/value pair. More...
 
iterator operator++ (int) noexcept
 Get the next key/value pair. More...
 
bool operator!= (const iterator &other) const noexcept
 Check if these values come from the same place in the JSON. More...
 
+bool operator== (const iterator &other) const noexcept
 
+bool operator< (const iterator &other) const noexcept
 
+bool operator<= (const iterator &other) const noexcept
 
+bool operator>= (const iterator &other) const noexcept
 
+bool operator> (const iterator &other) const noexcept
 
+std::string_view key () const noexcept
 Get the key of this key/value pair.
 
uint32_t key_length () const noexcept
 Get the length (in bytes) of the key in this key/value pair. More...
 
bool key_equals (std::string_view o) const noexcept
 Returns true if the key in this key/value pair is equal to the provided string_view. More...
 
bool key_equals_case_insensitive (std::string_view o) const noexcept
 Returns true if the key in this key/value pair is equal to the provided string_view in a case-insensitive manner. More...
 
+const char * key_c_str () const noexcept
 Get the key of this key/value pair.
 
+element value () const noexcept
 Get the value of this key/value pair.
 
iterator (const iterator &) noexcept=default
 
+iteratoroperator= (const iterator &) noexcept=default
 
+

Detailed Description

+
+

Definition at line 27 of file object.h.

+

Member Function Documentation

+ +

◆ key_equals()

+ +
+
+ + + + + +
+ + + + + + + + +
bool simdjson::dom::object::iterator::key_equals (std::string_view o) const
+
+inlinenoexcept
+
+ +

Returns true if the key in this key/value pair is equal to the provided string_view.

+

Design notes: Instead of constructing a string_view and then comparing it with a user-provided strings, it is probably more performant to have dedicated functions taking as a parameter the string we want to compare against and return true when they are equal.

+

That avoids the creation of a temporary std::string_view. Though it is possible for the compiler to avoid entirely any overhead due to string_view, relying too much on compiler magic is problematic: compiler magic sometimes fail, and then what do you do? Also, enticing users to rely on high-performance function is probably better on the long run.

+ +

Definition at line 214 of file object-inl.h.

+ +
+
+ +

◆ key_equals_case_insensitive()

+ +
+
+ + + + + +
+ + + + + + + + +
bool simdjson::dom::object::iterator::key_equals_case_insensitive (std::string_view o) const
+
+inlinenoexcept
+
+ +

Returns true if the key in this key/value pair is equal to the provided string_view in a case-insensitive manner.

+

Case comparisons may only be handled correctly for ASCII strings.

+ +

Definition at line 225 of file object-inl.h.

+ +
+
+ +

◆ key_length()

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t simdjson::dom::object::iterator::key_length () const
+
+inlinenoexcept
+
+ +

Get the length (in bytes) of the key in this key/value pair.

+

You should expect this function to be faster than key().size().

+ +

Definition at line 191 of file object-inl.h.

+ +
+
+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool simdjson::dom::object::iterator::operator!= (const iteratorother) const
+
+inlinenoexcept
+
+ +

Check if these values come from the same place in the JSON.

+

Part of the std::iterator interface.

+ +

Definition at line 160 of file object-inl.h.

+ +
+
+ +

◆ operator++() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
object::iterator & simdjson::dom::object::iterator::operator++ ()
+
+inlinenoexcept
+
+ +

Get the next key/value pair.

+

Part of the std::iterator interface.

+ +

Definition at line 178 of file object-inl.h.

+ +
+
+ +

◆ operator++() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
object::iterator simdjson::dom::object::iterator::operator++ (int )
+
+inlinenoexcept
+
+ +

Get the next key/value pair.

+

Part of the std::iterator interface.

+ +

Definition at line 183 of file object-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1object_1_1iterator.js b/classsimdjson_1_1dom_1_1object_1_1iterator.js new file mode 100644 index 000000000..872fc379b --- /dev/null +++ b/classsimdjson_1_1dom_1_1object_1_1iterator.js @@ -0,0 +1,24 @@ +var classsimdjson_1_1dom_1_1object_1_1iterator = +[ + [ "difference_type", "classsimdjson_1_1dom_1_1object_1_1iterator.html#af9f5a66a6cd5a6bbacdbdc83b576b80c", null ], + [ "value_type", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a9f49fe89534f63d3d2543d5d4bad3180", null ], + [ "iterator", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a5c80355d967cce16eab942a8d8351c7b", null ], + [ "iterator", "classsimdjson_1_1dom_1_1object_1_1iterator.html#ac82e68be1f179df92423d879114fbf55", null ], + [ "key", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a951609ca7a164b499ff19adbe2de7983", null ], + [ "key_c_str", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a54a99dcf9c422d5c24f3c570b6d9b6e4", null ], + [ "key_equals", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a4807eeb1ed5f596b587d0b61dfb550e7", null ], + [ "key_equals_case_insensitive", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a6d335de77b8c5b731566e48f6cacd95d", null ], + [ "key_length", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a5ad1b60fd5df56d9fdb8bce1e08de88f", null ], + [ "operator!=", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a1da5ce328cc2609432be961736c6e810", null ], + [ "operator*", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a688f6c7f451602bb3385a93252c0828a", null ], + [ "operator++", "classsimdjson_1_1dom_1_1object_1_1iterator.html#aa26738ad08b7de3be4621a75863118ab", null ], + [ "operator++", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a83b3c467632c017400f95ff05d2367b3", null ], + [ "operator<", "classsimdjson_1_1dom_1_1object_1_1iterator.html#aaab37cb500deb6ae49a712b8999d6ca3", null ], + [ "operator<=", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a498ffa7fca4164634f87ff2ef0905f8b", null ], + [ "operator=", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a238b57daf0b007591b767b268639473e", null ], + [ "operator==", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a7b4a7d3017744fec3aa4252967f73204", null ], + [ "operator>", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a05f201b94ff4852a1f41bca76595280d", null ], + [ "operator>=", "classsimdjson_1_1dom_1_1object_1_1iterator.html#aba9ad6e2eea839fb4fb1603e63f1ee4b", null ], + [ "value", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a2049ae539dca6999cc33300d212a5014", null ], + [ "object", "classsimdjson_1_1dom_1_1object_1_1iterator.html#a3d4dcacb8171b99f783396bb6a337c65", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1dom_1_1parser-members.html b/classsimdjson_1_1dom_1_1parser-members.html new file mode 100644 index 000000000..cc95b5332 --- /dev/null +++ b/classsimdjson_1_1dom_1_1parser-members.html @@ -0,0 +1,141 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::dom::parser Member List
+
+
+ +

This is the complete list of members for simdjson::dom::parser, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexceptsimdjson::dom::parserinline
capacity() const noexceptsimdjson::dom::parser
load(const std::string &path) &noexceptsimdjson::dom::parserinline
load(const std::string &path) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parserinline
load_many(const std::string &path, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexceptsimdjson::dom::parserinline
max_capacity() const noexceptsimdjson::dom::parser
max_depth() const noexceptsimdjson::dom::parser
operator=(parser &&other) noexceptsimdjson::dom::parser
parse(const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexceptsimdjson::dom::parserinline
parse(const uint8_t *buf, size_t len, bool realloc_if_needed=true) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse(const char *buf, size_t len, bool realloc_if_needed=true) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const char *buf, size_t len, bool realloc_if_needed=true) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const std::string &s) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const std::string &s) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const padded_string &s) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const padded_string &s) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const padded_string_view &v) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse(const padded_string_view &v) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexceptsimdjson::dom::parserinline
parse_into_document(document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse_into_document(document &doc, const char *buf, size_t len, bool realloc_if_needed=true) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const char *buf, size_t len, bool realloc_if_needed=true) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const std::string &s) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const std::string &s) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const padded_string &s) &noexcept (defined in simdjson::dom::parser)simdjson::dom::parser
parse_into_document(document &doc, const padded_string &s) &&=delete (defined in simdjson::dom::parser)simdjson::dom::parser
parse_many(const uint8_t *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexceptsimdjson::dom::parserinline
parse_many(const char *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse_many(const std::string &s, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse_many(const std::string &&s, size_t batch_size)=delete (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse_many(const padded_string &s, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept (defined in simdjson::dom::parser)simdjson::dom::parserinline
parse_many(const padded_string &&s, size_t batch_size)=delete (defined in simdjson::dom::parser)simdjson::dom::parserinline
parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexceptsimdjson::dom::parserexplicit
parser(parser &&other) noexceptsimdjson::dom::parser
set_max_capacity(size_t max_capacity) noexceptsimdjson::dom::parser
~parser()=defaultsimdjson::dom::parser
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1parser.html b/classsimdjson_1_1dom_1_1parser.html new file mode 100644 index 000000000..88cde40d4 --- /dev/null +++ b/classsimdjson_1_1dom_1_1parser.html @@ -0,0 +1,890 @@ + + + + + + + +simdjson: simdjson::dom::parser Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::dom::parser Class Reference
+
+
+ +

A persistent document parser. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

simdjson_inline parser (size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
 Create a JSON parser. More...
 
simdjson_inline parser (parser &&other) noexcept
 Take another parser's buffers and state. More...
 
simdjson_inline parseroperator= (parser &&other) noexcept
 Take another parser's buffers and state. More...
 
~parser ()=default
 Deallocate the JSON parser.
 
simdjson_result< elementload (const std::string &path) &noexcept
 Load a JSON document from a file and return a reference to it. More...
 
+simdjson_result< elementload (const std::string &path) &&=delete
 
simdjson_result< elementparse (const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
 Parse a JSON document and return a temporary reference to it. More...
 
+simdjson_result< elementparse (const uint8_t *buf, size_t len, bool realloc_if_needed=true) &&=delete
 
+simdjson_inline simdjson_result< elementparse (const char *buf, size_t len, bool realloc_if_needed=true) &noexcept
 
+simdjson_inline simdjson_result< elementparse (const char *buf, size_t len, bool realloc_if_needed=true) &&=delete
 
+simdjson_inline simdjson_result< elementparse (const std::string &s) &noexcept
 
+simdjson_inline simdjson_result< elementparse (const std::string &s) &&=delete
 
+simdjson_inline simdjson_result< elementparse (const padded_string &s) &noexcept
 
+simdjson_inline simdjson_result< elementparse (const padded_string &s) &&=delete
 
+simdjson_inline simdjson_result< elementparse (const padded_string_view &v) &noexcept
 
+simdjson_inline simdjson_result< elementparse (const padded_string_view &v) &&=delete
 
simdjson_result< elementparse_into_document (document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
 Parse a JSON document into a provide document instance and return a temporary reference to it. More...
 
+simdjson_result< elementparse_into_document (document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &&=delete
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const char *buf, size_t len, bool realloc_if_needed=true) &noexcept
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const char *buf, size_t len, bool realloc_if_needed=true) &&=delete
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const std::string &s) &noexcept
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const std::string &s) &&=delete
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const padded_string &s) &noexcept
 
+simdjson_inline simdjson_result< elementparse_into_document (document &doc, const padded_string &s) &&=delete
 
simdjson_result< document_streamload_many (const std::string &path, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
 Load a file containing many JSON documents. More...
 
simdjson_result< document_streamparse_many (const uint8_t *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
 Parse a buffer containing many JSON documents. More...
 
+simdjson_result< document_streamparse_many (const char *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamparse_many (const std::string &s, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamparse_many (const std::string &&s, size_t batch_size)=delete
 
+simdjson_result< document_streamparse_many (const padded_string &s, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
 
+simdjson_result< document_streamparse_many (const padded_string &&s, size_t batch_size)=delete
 
simdjson_warn_unused error_code allocate (size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
 Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max_depth depth. More...
 
simdjson_inline size_t capacity () const noexcept
 The largest document this parser can support without reallocating. More...
 
simdjson_inline size_t max_capacity () const noexcept
 The largest document this parser can automatically support. More...
 
simdjson_inline size_t max_depth () const noexcept
 The maximum level of nested object and arrays supported by this parser. More...
 
simdjson_inline void set_max_capacity (size_t max_capacity) noexcept
 Set max_capacity. More...
 
+

Detailed Description

+

A persistent document parser.

+

The parser is designed to be reused, holding the internal buffers necessary to do parsing, as well as memory for a single document. The parsed document is overwritten on each parse.

+

This class cannot be copied, only moved, to avoid unintended allocations.

+
Note
Moving a parser instance may invalidate "dom::element" instances. If you need to preserve both the "dom::element" instances and the parser, consider wrapping the parser instance in a std::unique_ptr instance:
+

std::unique_ptr<dom::parser> parser(new dom::parser{}); auto error = parser->load(f).get(root);

+

You can then move std::unique_ptr safely.

+
Note
This is not thread safe: one parser cannot produce two documents at the same time!
+ +

Definition at line 58 of file parser.h.

+

Constructor & Destructor Documentation

+ +

◆ parser() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson::dom::parser::parser (size_t max_capacity = SIMDJSON_MAXSIZE_BYTES)
+
+explicitnoexcept
+
+ +

Create a JSON parser.

+

The new parser will have zero capacity.

+
Parameters
+ + +
max_capacityThe maximum document length the parser can automatically handle. The parser will allocate more capacity on an as needed basis (when it sees documents too big to handle) up to this amount. The parser still starts with zero capacity no matter what this number is: to allocate an initial capacity, call allocate() after constructing the parser. Defaults to SIMDJSON_MAXSIZE_BYTES (the largest single document simdjson can process).
+
+
+ +

Definition at line 18 of file parser-inl.h.

+ +
+
+ +

◆ parser() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline simdjson::dom::parser::parser (parser && other)
+
+defaultnoexcept
+
+ +

Take another parser's buffers and state.

+
Parameters
+ + +
otherThe parser to take. Its capacity is zeroed.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ allocate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson_warn_unused error_code simdjson::dom::parser::allocate (size_t capacity,
size_t max_depth = DEFAULT_MAX_DEPTH 
)
+
+inlinenoexcept
+
+ +

Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max_depth depth.

+
Parameters
+ + + +
capacityThe new capacity.
max_depthThe new max_depth. Defaults to DEFAULT_MAX_DEPTH.
+
+
+
Returns
The error, if there is one.
+ +

Definition at line 180 of file parser-inl.h.

+ +
+
+ +

◆ capacity()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline size_t simdjson::dom::parser::capacity () const
+
+noexcept
+
+ +

The largest document this parser can support without reallocating.

+
Returns
Current capacity, in bytes.
+ +

Definition at line 169 of file parser-inl.h.

+ +
+
+ +

◆ load()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_result< element > simdjson::dom::parser::load (const std::string & path) &
+
+inlinenoexcept
+
+ +

Load a JSON document from a file and return a reference to it.

+

dom::parser parser; const element doc = parser.load("jsonexamples/twitter.json");

+

The function is eager: the file's content is loaded in memory inside the parser instance and immediately parsed. The file can be deleted after the parser.load call.

+

+IMPORTANT: Document Lifetime

+

The JSON document still lives in the parser: this is the most efficient way to parse JSON documents because it reuses the same buffers, but you must use the document before you destroy the parser or call parse() again.

+

Moving the parser instance is safe, but it invalidates the element instances. You may store the parser instance without moving it by wrapping it inside an unique_ptr instance like so: std::unique_ptr<dom::parser> parser(new dom::parser{});.

+

+Parser Capacity

+

If the parser's current capacity is less than the file length, it will allocate enough capacity to handle it (up to max_capacity).

+
Parameters
+ + +
pathThe path to load.
+
+
+
Returns
The document, or an error:
    +
  • IO_ERROR if there was an error opening or reading the file. Be mindful that on some 32-bit systems, the file size might be limited to 2 GB.
  • +
  • MEMALLOC if the parser does not have enough capacity and memory allocation fails.
  • +
  • CAPACITY if the parser does not have enough capacity and len > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+ +

Definition at line 89 of file parser-inl.h.

+ +
+
+ +

◆ load_many()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson_result< document_stream > simdjson::dom::parser::load_many (const std::string & path,
size_t batch_size = dom::DEFAULT_BATCH_SIZE 
)
+
+inlinenoexcept
+
+ +

Load a file containing many JSON documents.

+

dom::parser parser; for (const element doc : parser.load_many(path)) { cout << std::string(doc["title"]) << endl; }

+

The file is loaded in memory and can be safely deleted after the parser.load_many(path) function has returned. The memory is held by the parser instance.

+

The function is lazy: it may be that no more than one JSON document at a time is parsed. And, possibly, no document many have been parsed when the parser.load_many(path) function returned.

+

+Format

+

The file must contain a series of one or more JSON documents, concatenated into a single buffer, separated by whitespace. It effectively parses until it has a fully valid document, then starts parsing the next document at that point. (It does this with more parallelism and lookahead than you might think, though.)

+

Documents that consist of an object or array may omit the whitespace between them, concatenating with no separator. documents that consist of a single primitive (i.e. documents that are not arrays or objects) MUST be separated with whitespace.

+

The documents must not exceed batch_size bytes (by default 1MB) or they will fail to parse. Setting batch_size to excessively large or excesively small values may impact negatively the performance.

+

+Error Handling

+

All errors are returned during iteration: if there is a global error such as memory allocation, it will be yielded as the first result. Iteration always stops after the first error.

+

As with all other simdjson methods, non-exception error handling is readily available through the same interface, requiring you to check the error before using the document:

+

dom::parser parser; dom::document_stream docs; auto error = parser.load_many(path).get(docs); if (error) { cerr << error << endl; exit(1); } for (auto doc : docs) { std::string_view title; if ((error = doc["title"].get(title)) { cerr << error << endl; exit(1); } cout << title << endl; }

+

+Threads

+

When compiled with SIMDJSON_THREADS_ENABLED, this method will use a single thread under the hood to do some lookahead.

+

+Parser Capacity

+

If the parser's current capacity is less than batch_size, it will allocate enough capacity to handle it (up to max_capacity).

+
Parameters
+ + + +
pathFile name pointing at the concatenated JSON to parse.
batch_sizeThe batch size to use. MUST be larger than the largest document. The sweet spot is cache-related: small enough to fit in cache, yet big enough to parse as many documents as possible in one tight loop. Defaults to 1MB (as simdjson::dom::DEFAULT_BATCH_SIZE), which has been a reasonable sweet spot in our tests. If you set the batch_size to a value smaller than simdjson::dom::MINIMAL_BATCH_SIZE (currently 32B), it will be replaced by simdjson::dom::MINIMAL_BATCH_SIZE.
+
+
+
Returns
The stream, or an error. An empty input will yield 0 documents rather than an EMPTY error. Errors:
    +
  • IO_ERROR if there was an error opening or reading the file.
  • +
  • MEMALLOC if the parser does not have enough capacity and memory allocation fails.
  • +
  • CAPACITY if the parser does not have enough capacity and batch_size > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+ +

Definition at line 96 of file parser-inl.h.

+ +
+
+ +

◆ max_capacity()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline size_t simdjson::dom::parser::max_capacity () const
+
+noexcept
+
+ +

The largest document this parser can automatically support.

+

The parser may reallocate internal buffers as needed up to this amount.

+
Returns
Maximum capacity, in bytes.
+ +

Definition at line 172 of file parser-inl.h.

+ +
+
+ +

◆ max_depth()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_inline size_t simdjson::dom::parser::max_depth () const
+
+noexcept
+
+ +

The maximum level of nested object and arrays supported by this parser.

+
Returns
Maximum depth, in bytes.
+ +

Definition at line 175 of file parser-inl.h.

+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline parser & simdjson::dom::parser::operator= (parser && other)
+
+defaultnoexcept
+
+ +

Take another parser's buffers and state.

+
Parameters
+ + +
otherThe parser to take. Its capacity is zeroed.
+
+
+ +
+
+ +

◆ parse()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
simdjson_result< element > simdjson::dom::parser::parse (const uint8_t * buf,
size_t len,
bool realloc_if_needed = true 
) &
+
+inlinenoexcept
+
+ +

Parse a JSON document and return a temporary reference to it.

+

dom::parser parser; element doc_root = parser.parse(buf, len);

+

The function eagerly parses the input: the input can be modified and discarded after the parser.parse(buf, len) call has completed.

+

+IMPORTANT: Document Lifetime

+

The JSON document still lives in the parser: this is the most efficient way to parse JSON documents because it reuses the same buffers, but you must use the document before you destroy the parser or call parse() again.

+

Moving the parser instance is safe, but it invalidates the element instances. You may store the parser instance without moving it by wrapping it inside an unique_ptr instance like so: std::unique_ptr<dom::parser> parser(new dom::parser{});.

+

+REQUIRED: Buffer Padding

+

The buffer must have at least SIMDJSON_PADDING extra allocated bytes. It does not matter what those bytes are initialized to, as long as they are allocated.

+

If realloc_if_needed is true (the default), it is assumed that the buffer does not have enough padding, and it is copied into an enlarged temporary buffer before parsing. Thus the following is safe:

+

const char *json = R"({"key":"value"})"; const size_t json_len = std::strlen(json); simdjson::dom::parser parser; simdjson::dom::element element = parser.parse(json, json_len);

+

If you set realloc_if_needed to false (e.g., parser.parse(json, json_len, false)), you must provide a buffer with at least SIMDJSON_PADDING extra bytes at the end. The benefit of setting realloc_if_needed to false is that you avoid a temporary memory allocation and a copy.

+

The padded bytes may be read. It is not important how you initialize these bytes though we recommend a sensible default like null character values or spaces. For example, the following low-level code is safe:

+

const char *json = R"({"key":"value"})"; const size_t json_len = std::strlen(json); std::unique_ptr<char[]> padded_json_copy{new char[json_len + SIMDJSON_PADDING]}; std::memcpy(padded_json_copy.get(), json, json_len); std::memset(padded_json_copy.get() + json_len, '\0', SIMDJSON_PADDING); simdjson::dom::parser parser; simdjson::dom::element element = parser.parse(padded_json_copy.get(), json_len, false);

+

+Parser Capacity

+

If the parser's current capacity is less than len, it will allocate enough capacity to handle it (up to max_capacity).

+
Parameters
+ + + + +
bufThe JSON to parse. Must have at least len + SIMDJSON_PADDING allocated bytes, unless realloc_if_needed is true.
lenThe length of the JSON.
realloc_if_neededWhether to reallocate and enlarge the JSON buffer to add padding.
+
+
+
Returns
An element pointing at the root of the document, or an error:
    +
  • MEMALLOC if realloc_if_needed is true or the parser does not have enough capacity, and memory allocation fails.
  • +
  • CAPACITY if the parser does not have enough capacity and len > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+ +

Definition at line 138 of file parser-inl.h.

+ +
+
+ +

◆ parse_into_document()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
simdjson_result< element > simdjson::dom::parser::parse_into_document (documentdoc,
const uint8_t * buf,
size_t len,
bool realloc_if_needed = true 
) &
+
+inlinenoexcept
+
+ +

Parse a JSON document into a provide document instance and return a temporary reference to it.

+

It is similar to the function parse except that instead of parsing into the internal document instance associated with the parser, it allows the user to provide a document instance.

+

dom::parser parser; dom::document doc; element doc_root = parser.parse_into_document(doc, buf, len);

+

The function eagerly parses the input: the input can be modified and discarded after the parser.parse(buf, len) call has completed.

+

+IMPORTANT: Document Lifetime

+

After the call to parse_into_document, the parser is no longer needed.

+

The JSON document lives in the document instance: you must keep the document instance alive while you navigate through it (i.e., used the returned value from parse_into_document). You are encourage to reuse the document instance many times with new data to avoid reallocations:

+

dom::document doc; element doc_root1 = parser.parse_into_document(doc, buf1, len); //... doc_root1 is a pointer inside doc element doc_root2 = parser.parse_into_document(doc, buf1, len); //... doc_root2 is a pointer inside doc // at this point doc_root1 is no longer safe

+

Moving the document instance is safe, but it invalidates the element instances. After moving a document, you can recover safe access to the document root with its root() method.

+
Parameters
+ + + + + +
docThe document instance where the parsed data will be stored (on success).
bufThe JSON to parse. Must have at least len + SIMDJSON_PADDING allocated bytes, unless realloc_if_needed is true.
lenThe length of the JSON.
realloc_if_neededWhether to reallocate and enlarge the JSON buffer to add padding.
+
+
+
Returns
An element pointing at the root of document, or an error:
    +
  • MEMALLOC if realloc_if_needed is true or the parser does not have enough capacity, and memory allocation fails.
  • +
  • CAPACITY if the parser does not have enough capacity and len > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+ +

Definition at line 104 of file parser-inl.h.

+ +
+
+ +

◆ parse_many()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
simdjson::dom::parser::parse_many (const uint8_t * buf,
size_t len,
size_t batch_size = dom::DEFAULT_BATCH_SIZE 
)
+
+inlinenoexcept
+
+ +

Parse a buffer containing many JSON documents.

+

dom::parser parser; for (element doc : parser.parse_many(buf, len)) { cout << std::string(doc["title"]) << endl; }

+

No copy of the input buffer is made.

+

The function is lazy: it may be that no more than one JSON document at a time is parsed. And, possibly, no document many have been parsed when the parser.load_many(path) function returned.

+

The caller is responsabile to ensure that the input string data remains unchanged and is not deleted during the loop. In particular, the following is unsafe and will not compile:

+

auto docs = parser.parse_many("[\"temporary data"]"_padded); + // here the string "["temporary data"]" may no longer exist in memory // the parser instance may not have even accessed the input yet for (element doc : docs) { cout << std::string(doc["title"]) << endl; }

+

The following is safe:

+

auto json = "[\"temporary data"]"_padded; auto docs = parser.parse_many(json); for (element doc : docs) { cout << std::string(doc["title"]) << endl; }

+

+Format

+

The buffer must contain a series of one or more JSON documents, concatenated into a single buffer, separated by whitespace. It effectively parses until it has a fully valid document, then starts parsing the next document at that point. (It does this with more parallelism and lookahead than you might think, though.)

+

documents that consist of an object or array may omit the whitespace between them, concatenating with no separator. documents that consist of a single primitive (i.e. documents that are not arrays or objects) MUST be separated with whitespace.

+

The documents must not exceed batch_size bytes (by default 1MB) or they will fail to parse. Setting batch_size to excessively large or excesively small values may impact negatively the performance.

+

+Error Handling

+

All errors are returned during iteration: if there is a global error such as memory allocation, it will be yielded as the first result. Iteration always stops after the first error.

+

As with all other simdjson methods, non-exception error handling is readily available through the same interface, requiring you to check the error before using the document:

+

dom::parser parser; dom::document_stream docs; auto error = parser.load_many(path).get(docs); if (error) { cerr << error << endl; exit(1); } for (auto doc : docs) { std::string_view title; if ((error = doc["title"].get(title)) { cerr << error << endl; exit(1); } cout << title << endl; }

+

+REQUIRED: Buffer Padding

+

The buffer must have at least SIMDJSON_PADDING extra allocated bytes. It does not matter what those bytes are initialized to, as long as they are allocated.

+

+Threads

+

When compiled with SIMDJSON_THREADS_ENABLED, this method will use a single thread under the hood to do some lookahead.

+

+Parser Capacity

+

If the parser's current capacity is less than batch_size, it will allocate enough capacity to handle it (up to max_capacity).

+
Parameters
+ + + + +
bufThe concatenated JSON to parse. Must have at least len + SIMDJSON_PADDING allocated bytes.
lenThe length of the concatenated JSON.
batch_sizeThe batch size to use. MUST be larger than the largest document. The sweet spot is cache-related: small enough to fit in cache, yet big enough to parse as many documents as possible in one tight loop. Defaults to 10MB, which has been a reasonable sweet spot in our tests.
+
+
+
Returns
The stream, or an error. An empty input will yield 0 documents rather than an EMPTY error. Errors:
    +
  • MEMALLOC if the parser does not have enough capacity and memory allocation fails
  • +
  • CAPACITY if the parser does not have enough capacity and batch_size > max_capacity.
  • +
  • other json errors if parsing fails. You should not rely on these errors to always the same for the same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
  • +
+
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+ +

Definition at line 155 of file parser-inl.h.

+ +
+
+ +

◆ set_max_capacity()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_inline void simdjson::dom::parser::set_max_capacity (size_t max_capacity)
+
+noexcept
+
+ +

Set max_capacity.

+

This is the largest document this parser can automatically support.

+

The parser may reallocate internal buffers as needed up to this amount as documents are passed to it.

+

Note: To avoid limiting the memory to an absurd value, such as zero or two bytes, iff you try to set max_capacity to a value lower than MINIMAL_DOCUMENT_CAPACITY, then the maximal capacity is set to MINIMAL_DOCUMENT_CAPACITY.

+

This call will not allocate or deallocate, even if capacity is currently above max_capacity.

+
Parameters
+ + +
max_capacityThe new maximum capacity, in bytes.
+
+
+ +

Definition at line 228 of file parser-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1dom_1_1parser.js b/classsimdjson_1_1dom_1_1parser.js new file mode 100644 index 000000000..ea60b8617 --- /dev/null +++ b/classsimdjson_1_1dom_1_1parser.js @@ -0,0 +1,41 @@ +var classsimdjson_1_1dom_1_1parser = +[ + [ "parser", "classsimdjson_1_1dom_1_1parser.html#a09370efac9e1b7d9b4a8349332e026c3", null ], + [ "parser", "classsimdjson_1_1dom_1_1parser.html#a3f3c80565fe63857e2901c48e7bed64d", null ], + [ "~parser", "classsimdjson_1_1dom_1_1parser.html#aeb48211f320af02b58dc3d0505059844", null ], + [ "allocate", "classsimdjson_1_1dom_1_1parser.html#af8f49755a335bc269cb02d24badfcdf9", null ], + [ "capacity", "classsimdjson_1_1dom_1_1parser.html#aedf495a6e090929be23473e8a29f2fe2", null ], + [ "load", "classsimdjson_1_1dom_1_1parser.html#a6b460c66661f1145d454b53c7ef5f514", null ], + [ "load", "classsimdjson_1_1dom_1_1parser.html#ab3e5bbb1974a1932aead90ad63883a23", null ], + [ "load_many", "classsimdjson_1_1dom_1_1parser.html#a5300851ba21d0a0273a11510fd1c378a", null ], + [ "max_capacity", "classsimdjson_1_1dom_1_1parser.html#a8bfde4193783adef9c5f12dfc4da3bc0", null ], + [ "max_depth", "classsimdjson_1_1dom_1_1parser.html#a209d15b8f87ad69f5fbaccdd5b6b5441", null ], + [ "operator=", "classsimdjson_1_1dom_1_1parser.html#af5b61dda345cef1feba7c4529dfe0259", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#aec2dcf15817bc41858bae72519562e03", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#adf358420cd2a1d1b60047cde61c074d5", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#adf1525ddaf70b0a0e1810d57e61fb548", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#a62aa4cdd077e243a72695c4e24535a5c", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#a45eafeae54efd98552a48c5efe4b93de", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#ad18ffd4e12e8fefd59d9be28a1703084", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#a0cac4a9a7feba073af10e69ab7aae6cc", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#a806cb2434fe8c5aca0426e446eaecd01", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#ae00a3050513990e4ea4a03ea21eb8e74", null ], + [ "parse", "classsimdjson_1_1dom_1_1parser.html#a16c7d1e28125ef7d5703244483f70984", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a08d39cb52d8d897d7a686481c79ec599", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a94df57d3bf19ae8f1fd56c7e1c48aed4", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a0e603cb4119705d5ccbf97774d2116a5", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#ab4b59cec3f7b7c755067c317ed0bfa12", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#aae4cce43e249d00bd7f3b17a017b5464", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a96ea845b2e155c985df803718369d0b4", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a29d6a0c6e7538314be6ea73c2be76bb3", null ], + [ "parse_into_document", "classsimdjson_1_1dom_1_1parser.html#a1afc4d3b429363b503a5605d66081e30", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#a3a5a4be2a8660e6f22b99783bb94f690", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#a302ded9cfd8c07a095433b0024bd1ce6", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#a7856c99cbf39d24cfc733babdd4ca416", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#acbb8274f11fa044c9c5edb07d902045d", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#a720a2dd204322bcfcb5e9743ecf51da1", null ], + [ "parse_many", "classsimdjson_1_1dom_1_1parser.html#afb18710d2e2ef0fd40dda4887282bdb2", null ], + [ "set_max_capacity", "classsimdjson_1_1dom_1_1parser.html#a6977b4586bc601070cf100e2973a4cbc", null ], + [ "document_stream", "classsimdjson_1_1dom_1_1parser.html#a403473bb5329fca6defc6299fb45b780", null ], + [ "parser::Iterator", "classsimdjson_1_1dom_1_1parser.html#a86e3ab93ec6521c51b1eca11421201f4", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1implementation-members.html b/classsimdjson_1_1implementation-members.html new file mode 100644 index 000000000..d547f1dd3 --- /dev/null +++ b/classsimdjson_1_1implementation-members.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::implementation Member List
+
+
+ +

This is the complete list of members for simdjson::implementation, including all inherited members.

+ + + + + + +
description() constsimdjson::implementationinlinevirtual
name() constsimdjson::implementationinlinevirtual
supported_by_runtime_system() constsimdjson::implementation
validate_utf8(const char *buf, size_t len) const noexcept=0simdjson::implementationpure virtual
~implementation()=default (defined in simdjson::implementation)simdjson::implementationprotectedvirtual
+
+ + + + diff --git a/classsimdjson_1_1implementation.html b/classsimdjson_1_1implementation.html new file mode 100644 index 000000000..d6c353c9a --- /dev/null +++ b/classsimdjson_1_1implementation.html @@ -0,0 +1,266 @@ + + + + + + + +simdjson: simdjson::implementation Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::implementation Class Referenceabstract
+
+
+ +

An implementation of simdjson for a particular CPU architecture. + More...

+ + + + + + + + + + + + + + +

+Public Member Functions

virtual const std::string & name () const
 The name of this implementation. More...
 
virtual const std::string & description () const
 The description of this implementation. More...
 
bool supported_by_runtime_system () const
 The instruction sets this implementation is compiled against and the current CPU match. More...
 
virtual simdjson_warn_unused bool validate_utf8 (const char *buf, size_t len) const noexcept=0
 Validate the UTF-8 string. More...
 
+

Detailed Description

+

An implementation of simdjson for a particular CPU architecture.

+

Also used to maintain the currently active implementation. The active implementation is automatically initialized on first use to the most advanced implementation supported by the host.

+ +

Definition at line 51 of file implementation.h.

+

Member Function Documentation

+ +

◆ description()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& simdjson::implementation::description () const
+
+inlinevirtual
+
+ +

The description of this implementation.

+
const implementation *impl = simdjson::get_active_implementation();
+cout << "simdjson is optimized for " << impl->name() << "(" << impl->description() << ")" << endl;
+
Returns
the description of the implementation, e.g. "Intel/AMD AVX2", "Intel/AMD SSE4.2", "ARM NEON".
+ +

Definition at line 72 of file implementation.h.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& simdjson::implementation::name () const
+
+inlinevirtual
+
+ +

The name of this implementation.

+
const implementation *impl = simdjson::get_active_implementation();
+cout << "simdjson is optimized for " << impl->name() << "(" << impl->description() << ")" << endl;
+
Returns
the name of the implementation, e.g. "haswell", "westmere", "arm64".
+ +

Definition at line 62 of file implementation.h.

+ +
+
+ +

◆ supported_by_runtime_system()

+ +
+
+ + + + + + + +
bool simdjson::implementation::supported_by_runtime_system () const
+
+ +

The instruction sets this implementation is compiled against and the current CPU match.

+

This function may poll the current CPU/system and should therefore not be called too often if performance is a concern.

+
Returns
true if the implementation can be safely used on the current system (determined at runtime).
+ +
+
+ +

◆ validate_utf8()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual simdjson_warn_unused bool simdjson::implementation::validate_utf8 (const char * buf,
size_t len 
) const
+
+pure virtualnoexcept
+
+ +

Validate the UTF-8 string.

+

Overridden by each implementation.

+
Parameters
+ + + +
bufthe string to validate.
lenthe length of the string in bytes.
+
+
+
Returns
true if and only if the string is valid UTF-8.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classsimdjson_1_1implementation.js b/classsimdjson_1_1implementation.js new file mode 100644 index 000000000..3a6d79f9a --- /dev/null +++ b/classsimdjson_1_1implementation.js @@ -0,0 +1,8 @@ +var classsimdjson_1_1implementation = +[ + [ "~implementation", "classsimdjson_1_1implementation.html#a5e8124ff1cb55275e907a57152eb7422", null ], + [ "description", "classsimdjson_1_1implementation.html#a4f41daefefc573e20fccd591b158e063", null ], + [ "name", "classsimdjson_1_1implementation.html#a404c32ec6187ac0fb5b2ec6b5aea4abd", null ], + [ "supported_by_runtime_system", "classsimdjson_1_1implementation.html#adf77c9bc0869eff8fd46e942c4532135", null ], + [ "validate_utf8", "classsimdjson_1_1implementation.html#aa3a7b818d56a54cca272191ec176f8f1", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1padded__string__view-members.html b/classsimdjson_1_1padded__string__view-members.html new file mode 100644 index 000000000..f2e5ab072 --- /dev/null +++ b/classsimdjson_1_1padded__string__view-members.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson::padded_string_view Member List
+
+
+ +

This is the complete list of members for simdjson::padded_string_view, including all inherited members.

+ + + + + + + + +
capacity() const noexceptsimdjson::padded_string_viewinline
padded_string_view() noexcept=defaultsimdjson::padded_string_viewinline
padded_string_view(const char *s, size_t len, size_t capacity) noexceptsimdjson::padded_string_viewinlineexplicit
padded_string_view(const uint8_t *s, size_t len, size_t capacity) noexceptsimdjson::padded_string_viewinlineexplicit
padded_string_view(const std::string &s) noexceptsimdjson::padded_string_viewinlineexplicit
padded_string_view(std::string_view s, size_t capacity) noexceptsimdjson::padded_string_viewinlineexplicit
padding() const noexceptsimdjson::padded_string_viewinline
+
+ + + + diff --git a/classsimdjson_1_1padded__string__view.html b/classsimdjson_1_1padded__string__view.html new file mode 100644 index 000000000..29df2de3f --- /dev/null +++ b/classsimdjson_1_1padded__string__view.html @@ -0,0 +1,291 @@ + + + + + + + +simdjson: simdjson::padded_string_view Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
simdjson::padded_string_view Class Reference
+
+
+ +

User-provided string that promises it has extra padded bytes at the end for use with parser::parse(). + More...

+
+Inheritance diagram for simdjson::padded_string_view:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

padded_string_view () noexcept=default
 Create an empty padded_string_view.
 
 padded_string_view (const char *s, size_t len, size_t capacity) noexcept
 Promise the given buffer has at least SIMDJSON_PADDING extra bytes allocated to it. More...
 
padded_string_view (const uint8_t *s, size_t len, size_t capacity) noexcept
 overload explicit inline padded_string_view(const char* s, size_t len) noexcept
 
 padded_string_view (const std::string &s) noexcept
 Promise the given string has at least SIMDJSON_PADDING extra bytes allocated to it. More...
 
 padded_string_view (std::string_view s, size_t capacity) noexcept
 Promise the given string_view has at least SIMDJSON_PADDING extra bytes allocated to it. More...
 
+size_t capacity () const noexcept
 The number of allocated bytes.
 
+size_t padding () const noexcept
 The amount of padding on the string (capacity() - length())
 
+

Detailed Description

+

User-provided string that promises it has extra padded bytes at the end for use with parser::parse().

+ +

Definition at line 18 of file padded_string_view.h.

+

Constructor & Destructor Documentation

+ +

◆ padded_string_view() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
simdjson::padded_string_view::padded_string_view (const char * s,
size_t len,
size_t capacity 
)
+
+inlineexplicitnoexcept
+
+ +

Promise the given buffer has at least SIMDJSON_PADDING extra bytes allocated to it.

+
Parameters
+ + + + +
sThe string.
lenThe length of the string (not including padding).
capacityThe allocated length of the string, including padding.
+
+
+ +

Definition at line 14 of file padded_string_view-inl.h.

+ +
+
+ +

◆ padded_string_view() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson::padded_string_view::padded_string_view (const std::string & s)
+
+inlineexplicitnoexcept
+
+ +

Promise the given string has at least SIMDJSON_PADDING extra bytes allocated to it.

+

The capacity of the string will be used to determine its padding.

+
Parameters
+ + +
sThe string.
+
+
+ +

Definition at line 24 of file padded_string_view-inl.h.

+ +
+
+ +

◆ padded_string_view() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
simdjson::padded_string_view::padded_string_view (std::string_view s,
size_t capacity 
)
+
+inlineexplicitnoexcept
+
+ +

Promise the given string_view has at least SIMDJSON_PADDING extra bytes allocated to it.

+
Parameters
+ + + +
sThe string.
capacityThe allocated length of the string, including padding.
+
+
+ +

Definition at line 29 of file padded_string_view-inl.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classsimdjson_1_1padded__string__view.js b/classsimdjson_1_1padded__string__view.js new file mode 100644 index 000000000..6285ebcec --- /dev/null +++ b/classsimdjson_1_1padded__string__view.js @@ -0,0 +1,10 @@ +var classsimdjson_1_1padded__string__view = +[ + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html#aa338ad56304bc79e6ca1fab64af41de0", null ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html#a47ac0063f7dd0ffd832c5e4439f2de30", null ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html#a184b54acd28046a9c4f2a6cfa5419779", null ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html#aae57856a217294ac218b6372a5e37d9a", null ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html#a12b33830793e7ab1953b961088a83c3d", null ], + [ "capacity", "classsimdjson_1_1padded__string__view.html#a9d98e1984b893116d8bb7123d84d75b8", null ], + [ "padding", "classsimdjson_1_1padded__string__view.html#a934e7272d22d6024383eafe07b06773c", null ] +]; \ No newline at end of file diff --git a/classsimdjson_1_1padded__string__view.png b/classsimdjson_1_1padded__string__view.png new file mode 100644 index 0000000000000000000000000000000000000000..246678aaa00ba1a10e827f6dcfb7f3dd4f64315d GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^n}IlhgBeJsN^N-yq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0bUj@hLn;{G&b>Wtl>-l}w*I^S{~tG- zTo89iP^hX}d#0qbb}NVBzNEBkk~36FT`jyP*+10r{CB5(-go&qpA$0X6;E68zTouD zw!O|fYpVDEzpwu|^KiD^*S~plqOYZ?ytFExGudI1Xa4kwPwrVPFSjq(v$JpCV3swv zyHDkB7Jj|=ct~XfAHp+HTn!S6^tcr z?dR5q*I$yg;y-oQ^ZN^#QsxKJEyfM@4|yK=TQL6+KF9D6AJ-u-Ep2WiV~HzNt;xB! zygYxqznkc;FVB_PZOJz!H~p8wx$E+WRMQ(?r#xTy#ESc$OspnN62}EnR#3)k>QUQfnsV_Bq$ynf6&^Y3%b; zd+tWuuPLsW_^W!lmNr-W-B4+v)9P!BlegB)yj?0+9~j-6wc$*!^K+S7H7BMS-&hsu z`0v4<>Xq`Yza7q5Jg=K5w7TY=&vo19(m(H5iLZX9#Nc+;G4IVa-VJv?UHS6YHqd-l zwAS}6=T0lmKF1Jk6SJSO%%b|n_BqGj2Yvn0xajQE|DRV)J~w~){O->iU$t5=|A~i& i(D|VFGiRzE%HPk-IedfZ-78>XV(@hJb6Mw<&;$Up*Gawr literal 0 HcmV?d00001 diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/common__defs_8h_source.html b/common__defs_8h_source.html new file mode 100644 index 000000000..bd5c31e85 --- /dev/null +++ b/common__defs_8h_source.html @@ -0,0 +1,392 @@ + + + + + + + +simdjson: include/simdjson/common_defs.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
common_defs.h
+
+
+
1 #ifndef SIMDJSON_COMMON_DEFS_H
+
2 #define SIMDJSON_COMMON_DEFS_H
+
3 
+
4 #include <cassert>
+
5 #include "simdjson/portability.h"
+
6 
+
7 namespace simdjson {
+
8 
+
9 namespace internal {
+
15 char *to_chars(char *first, const char *last, double value);
+
21 double from_chars(const char *first) noexcept;
+
22 double from_chars(const char *first, const char* end) noexcept;
+
23 
+
24 }
+
25 
+
26 #ifndef SIMDJSON_EXCEPTIONS
+
27 #if __cpp_exceptions
+
28 #define SIMDJSON_EXCEPTIONS 1
+
29 #else
+
30 #define SIMDJSON_EXCEPTIONS 0
+
31 #endif
+
32 #endif
+
33 
+
35 constexpr size_t SIMDJSON_MAXSIZE_BYTES = 0xFFFFFFFF;
+
36 
+
45 constexpr size_t SIMDJSON_PADDING = 64;
+
46 
+
52 constexpr size_t DEFAULT_MAX_DEPTH = 1024;
+
53 
+
54 } // namespace simdjson
+
55 
+
56 #if defined(__GNUC__)
+
57  // Marks a block with a name so that MCA analysis can see it.
+
58  #define SIMDJSON_BEGIN_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-BEGIN " #name);
+
59  #define SIMDJSON_END_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-END " #name);
+
60  #define SIMDJSON_DEBUG_BLOCK(name, block) BEGIN_DEBUG_BLOCK(name); block; END_DEBUG_BLOCK(name);
+
61 #else
+
62  #define SIMDJSON_BEGIN_DEBUG_BLOCK(name)
+
63  #define SIMDJSON_END_DEBUG_BLOCK(name)
+
64  #define SIMDJSON_DEBUG_BLOCK(name, block)
+
65 #endif
+
66 
+
67 // Align to N-byte boundary
+
68 #define SIMDJSON_ROUNDUP_N(a, n) (((a) + ((n)-1)) & ~((n)-1))
+
69 #define SIMDJSON_ROUNDDOWN_N(a, n) ((a) & ~((n)-1))
+
70 
+
71 #define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
+
72 
+
73 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
74 
+
75  #define simdjson_really_inline __forceinline
+
76  #define simdjson_never_inline __declspec(noinline)
+
77 
+
78  #define simdjson_unused
+
79  #define simdjson_warn_unused
+
80 
+
81  #ifndef simdjson_likely
+
82  #define simdjson_likely(x) x
+
83  #endif
+
84  #ifndef simdjson_unlikely
+
85  #define simdjson_unlikely(x) x
+
86  #endif
+
87 
+
88  #define SIMDJSON_PUSH_DISABLE_WARNINGS __pragma(warning( push ))
+
89  #define SIMDJSON_PUSH_DISABLE_ALL_WARNINGS __pragma(warning( push, 0 ))
+
90  #define SIMDJSON_DISABLE_VS_WARNING(WARNING_NUMBER) __pragma(warning( disable : WARNING_NUMBER ))
+
91  // Get rid of Intellisense-only warnings (Code Analysis)
+
92  // Though __has_include is C++17, it is supported in Visual Studio 2017 or better (_MSC_VER>=1910).
+
93  #ifdef __has_include
+
94  #if __has_include(<CppCoreCheck\Warnings.h>)
+
95  #include <CppCoreCheck\Warnings.h>
+
96  #define SIMDJSON_DISABLE_UNDESIRED_WARNINGS SIMDJSON_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS)
+
97  #endif
+
98  #endif
+
99 
+
100  #ifndef SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
101  #define SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
102  #endif
+
103 
+
104  #define SIMDJSON_DISABLE_DEPRECATED_WARNING SIMDJSON_DISABLE_VS_WARNING(4996)
+
105  #define SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
+
106  #define SIMDJSON_POP_DISABLE_WARNINGS __pragma(warning( pop ))
+
107 
+
108 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
+
109 
+
110  #define simdjson_really_inline inline __attribute__((always_inline))
+
111  #define simdjson_never_inline inline __attribute__((noinline))
+
112 
+
113  #define simdjson_unused __attribute__((unused))
+
114  #define simdjson_warn_unused __attribute__((warn_unused_result))
+
115 
+
116  #ifndef simdjson_likely
+
117  #define simdjson_likely(x) __builtin_expect(!!(x), 1)
+
118  #endif
+
119  #ifndef simdjson_unlikely
+
120  #define simdjson_unlikely(x) __builtin_expect(!!(x), 0)
+
121  #endif
+
122 
+
123  #define SIMDJSON_PUSH_DISABLE_WARNINGS _Pragma("GCC diagnostic push")
+
124  // gcc doesn't seem to disable all warnings with all and extra, add warnings here as necessary
+
125  // We do it separately for clang since it has different warnings.
+
126  #ifdef __clang__
+
127  // clang is missing -Wmaybe-uninitialized.
+
128  #define SIMDJSON_PUSH_DISABLE_ALL_WARNINGS SIMDJSON_PUSH_DISABLE_WARNINGS \
+
129  SIMDJSON_DISABLE_GCC_WARNING(-Weffc++) \
+
130  SIMDJSON_DISABLE_GCC_WARNING(-Wall) \
+
131  SIMDJSON_DISABLE_GCC_WARNING(-Wconversion) \
+
132  SIMDJSON_DISABLE_GCC_WARNING(-Wextra) \
+
133  SIMDJSON_DISABLE_GCC_WARNING(-Wattributes) \
+
134  SIMDJSON_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \
+
135  SIMDJSON_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \
+
136  SIMDJSON_DISABLE_GCC_WARNING(-Wreturn-type) \
+
137  SIMDJSON_DISABLE_GCC_WARNING(-Wshadow) \
+
138  SIMDJSON_DISABLE_GCC_WARNING(-Wunused-parameter) \
+
139  SIMDJSON_DISABLE_GCC_WARNING(-Wunused-variable)
+
140  #else // __clang__
+
141  #define SIMDJSON_PUSH_DISABLE_ALL_WARNINGS SIMDJSON_PUSH_DISABLE_WARNINGS \
+
142  SIMDJSON_DISABLE_GCC_WARNING(-Weffc++) \
+
143  SIMDJSON_DISABLE_GCC_WARNING(-Wall) \
+
144  SIMDJSON_DISABLE_GCC_WARNING(-Wconversion) \
+
145  SIMDJSON_DISABLE_GCC_WARNING(-Wextra) \
+
146  SIMDJSON_DISABLE_GCC_WARNING(-Wattributes) \
+
147  SIMDJSON_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \
+
148  SIMDJSON_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \
+
149  SIMDJSON_DISABLE_GCC_WARNING(-Wreturn-type) \
+
150  SIMDJSON_DISABLE_GCC_WARNING(-Wshadow) \
+
151  SIMDJSON_DISABLE_GCC_WARNING(-Wunused-parameter) \
+
152  SIMDJSON_DISABLE_GCC_WARNING(-Wunused-variable) \
+
153  SIMDJSON_DISABLE_GCC_WARNING(-Wmaybe-uninitialized)
+
154  #endif // __clang__
+
155 
+
156  #define SIMDJSON_PRAGMA(P) _Pragma(#P)
+
157  #define SIMDJSON_DISABLE_GCC_WARNING(WARNING) SIMDJSON_PRAGMA(GCC diagnostic ignored #WARNING)
+
158  #if SIMDJSON_CLANG_VISUAL_STUDIO
+
159  #define SIMDJSON_DISABLE_UNDESIRED_WARNINGS SIMDJSON_DISABLE_GCC_WARNING(-Wmicrosoft-include)
+
160  #else
+
161  #define SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
162  #endif
+
163  #define SIMDJSON_DISABLE_DEPRECATED_WARNING SIMDJSON_DISABLE_GCC_WARNING(-Wdeprecated-declarations)
+
164  #define SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING SIMDJSON_DISABLE_GCC_WARNING(-Wstrict-overflow)
+
165  #define SIMDJSON_POP_DISABLE_WARNINGS _Pragma("GCC diagnostic pop")
+
166 
+
167 
+
168 
+
169 #endif // MSC_VER
+
170 
+
171 #if defined(simdjson_inline)
+
172  // Prefer the user's definition of simdjson_inline; don't define it ourselves.
+
173 #elif defined(__GNUC__) && !defined(__OPTIMIZE__)
+
174  // If optimizations are disabled, forcing inlining can lead to significant
+
175  // code bloat and high compile times. Don't use simdjson_really_inline for
+
176  // unoptimized builds.
+
177  #define simdjson_inline inline
+
178 #else
+
179  // Force inlining for most simdjson functions.
+
180  #define simdjson_inline simdjson_really_inline
+
181 #endif
+
182 
+
183 #if SIMDJSON_VISUAL_STUDIO
+
199  #if SIMDJSON_BUILDING_WINDOWS_DYNAMIC_LIBRARY
+
200  // We set SIMDJSON_BUILDING_WINDOWS_DYNAMIC_LIBRARY when we build a DLL under Windows.
+
201  // It should never happen that both SIMDJSON_BUILDING_WINDOWS_DYNAMIC_LIBRARY and
+
202  // SIMDJSON_USING_WINDOWS_DYNAMIC_LIBRARY are set.
+
203  #define SIMDJSON_DLLIMPORTEXPORT __declspec(dllexport)
+
204  #elif SIMDJSON_USING_WINDOWS_DYNAMIC_LIBRARY
+
205  // Windows user who call a dynamic library should set SIMDJSON_USING_WINDOWS_DYNAMIC_LIBRARY to 1.
+
206  #define SIMDJSON_DLLIMPORTEXPORT __declspec(dllimport)
+
207  #else
+
208  // We assume by default static linkage
+
209  #define SIMDJSON_DLLIMPORTEXPORT
+
210  #endif
+
211 
+
216 #if SIMDJSON_USING_LIBRARY
+
217 #define SIMDJSON_DLLIMPORTEXPORT __declspec(dllimport)
+
218 #endif
+
222 #else
+
223  #define SIMDJSON_DLLIMPORTEXPORT
+
224 #endif
+
225 
+
226 // C++17 requires string_view.
+
227 #if SIMDJSON_CPLUSPLUS17
+
228 #define SIMDJSON_HAS_STRING_VIEW
+
229 #include <string_view> // by the standard, this has to be safe.
+
230 #endif
+
231 
+
232 // This macro (__cpp_lib_string_view) has to be defined
+
233 // for C++17 and better, but if it is otherwise defined,
+
234 // we are going to assume that string_view is available
+
235 // even if we do not have C++17 support.
+
236 #ifdef __cpp_lib_string_view
+
237 #define SIMDJSON_HAS_STRING_VIEW
+
238 #endif
+
239 
+
240 // Some systems have string_view even if we do not have C++17 support,
+
241 // and even if __cpp_lib_string_view is undefined, it is the case
+
242 // with Apple clang version 11.
+
243 // We must handle it. *This is important.*
+
244 #ifndef SIMDJSON_HAS_STRING_VIEW
+
245 #if defined __has_include
+
246 // do not combine the next #if with the previous one (unsafe)
+
247 #if __has_include (<string_view>)
+
248 // now it is safe to trigger the include
+
249 #include <string_view> // though the file is there, it does not follow that we got the implementation
+
250 #if defined(_LIBCPP_STRING_VIEW)
+
251 // Ah! So we under libc++ which under its Library Fundamentals Technical Specification, which preceded C++17,
+
252 // included string_view.
+
253 // This means that we have string_view *even though* we may not have C++17.
+
254 #define SIMDJSON_HAS_STRING_VIEW
+
255 #endif // _LIBCPP_STRING_VIEW
+
256 #endif // __has_include (<string_view>)
+
257 #endif // defined __has_include
+
258 #endif // def SIMDJSON_HAS_STRING_VIEW
+
259 // end of complicated but important routine to try to detect string_view.
+
260 
+
261 //
+
262 // Backfill std::string_view using nonstd::string_view on systems where
+
263 // we expect that string_view is missing. Important: if we get this wrong,
+
264 // we will end up with two string_view definitions and potential trouble.
+
265 // That is why we work so hard above to avoid it.
+
266 //
+
267 #ifndef SIMDJSON_HAS_STRING_VIEW
+
268 SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
+
269 #include "simdjson/nonstd/string_view.hpp"
+
270 SIMDJSON_POP_DISABLE_WARNINGS
+
271 
+
272 namespace std {
+
273  using string_view = nonstd::string_view;
+
274 }
+
275 #endif // SIMDJSON_HAS_STRING_VIEW
+
276 #undef SIMDJSON_HAS_STRING_VIEW // We are not going to need this macro anymore.
+
277 
+
279 #define SIMDJSON_TRY(EXPR) { auto _err = (EXPR); if (_err) { return _err; } }
+
280 
+
281 // Unless the programmer has already set SIMDJSON_DEVELOPMENT_CHECKS,
+
282 // we want to set it under debug builds. We detect a debug build
+
283 // under Visual Studio when the _DEBUG macro is set. Under the other
+
284 // compilers, we use the fact that they define __OPTIMIZE__ whenever
+
285 // they allow optimizations.
+
286 // It is possible that this could miss some cases where SIMDJSON_DEVELOPMENT_CHECKS
+
287 // is helpful, but the programmer can set the macro SIMDJSON_DEVELOPMENT_CHECKS.
+
288 // It could also wrongly set SIMDJSON_DEVELOPMENT_CHECKS (e.g., if the programmer
+
289 // sets _DEBUG in a release build under Visual Studio, or if some compiler fails to
+
290 // set the __OPTIMIZE__ macro).
+
291 #ifndef SIMDJSON_DEVELOPMENT_CHECKS
+
292 #ifdef _MSC_VER
+
293 // Visual Studio seems to set _DEBUG for debug builds.
+
294 #ifdef _DEBUG
+
295 #define SIMDJSON_DEVELOPMENT_CHECKS 1
+
296 #endif // _DEBUG
+
297 #else // _MSC_VER
+
298 // All other compilers appear to set __OPTIMIZE__ to a positive integer
+
299 // when the compiler is optimizing.
+
300 #ifndef __OPTIMIZE__
+
301 #define SIMDJSON_DEVELOPMENT_CHECKS 1
+
302 #endif // __OPTIMIZE__
+
303 #endif // _MSC_VER
+
304 #endif // SIMDJSON_DEVELOPMENT_CHECKS
+
305 
+
306 // The SIMDJSON_CHECK_EOF macro is a feature flag for the "don't require padding"
+
307 // feature.
+
308 
+
309 #if SIMDJSON_CPLUSPLUS17
+
310 // if we have C++, then fallthrough is a default attribute
+
311 # define simdjson_fallthrough [[fallthrough]]
+
312 // check if we have __attribute__ support
+
313 #elif defined(__has_attribute)
+
314 // check if we have the __fallthrough__ attribute
+
315 #if __has_attribute(__fallthrough__)
+
316 // we are good to go:
+
317 # define simdjson_fallthrough __attribute__((__fallthrough__))
+
318 #endif // __has_attribute(__fallthrough__)
+
319 #endif // SIMDJSON_CPLUSPLUS17
+
320 // on some systems, we simply do not have support for fallthrough, so use a default:
+
321 #ifndef simdjson_fallthrough
+
322 # define simdjson_fallthrough do {} while (0) /* fallthrough */
+
323 #endif // simdjson_fallthrough
+
324 
+
325 
+
326 #if SIMDJSON_DEVELOPMENT_CHECKS
+
327 #define SIMDJSON_DEVELOPMENT_ASSERT(expr) do { assert ((expr)); } while (0)
+
328 #else
+
329 #define SIMDJSON_DEVELOPMENT_ASSERT(expr) do { } while (0)
+
330 #endif
+
331 
+
332 #endif // SIMDJSON_COMMON_DEFS_H
+
We want to support argument-dependent lookup (ADL).
+
constexpr size_t DEFAULT_MAX_DEPTH
By default, simdjson supports this many nested objects and arrays.
Definition: common_defs.h:52
+
constexpr size_t SIMDJSON_MAXSIZE_BYTES
The maximum document size supported by simdjson.
Definition: common_defs.h:35
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/compiler__check_8h_source.html b/compiler__check_8h_source.html new file mode 100644 index 000000000..a14d1dd61 --- /dev/null +++ b/compiler__check_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/compiler_check.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
compiler_check.h
+
+
+
1 #ifndef SIMDJSON_COMPILER_CHECK_H
+
2 #define SIMDJSON_COMPILER_CHECK_H
+
3 
+
4 #ifndef __cplusplus
+
5 #error simdjson requires a C++ compiler
+
6 #endif
+
7 
+
8 #ifndef SIMDJSON_CPLUSPLUS
+
9 #if defined(_MSVC_LANG) && !defined(__clang__)
+
10 #define SIMDJSON_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG)
+
11 #else
+
12 #define SIMDJSON_CPLUSPLUS __cplusplus
+
13 #endif
+
14 #endif
+
15 
+
16 // C++ 17
+
17 #if !defined(SIMDJSON_CPLUSPLUS17) && (SIMDJSON_CPLUSPLUS >= 201703L)
+
18 #define SIMDJSON_CPLUSPLUS17 1
+
19 #endif
+
20 
+
21 // C++ 14
+
22 #if !defined(SIMDJSON_CPLUSPLUS14) && (SIMDJSON_CPLUSPLUS >= 201402L)
+
23 #define SIMDJSON_CPLUSPLUS14 1
+
24 #endif
+
25 
+
26 // C++ 11
+
27 #if !defined(SIMDJSON_CPLUSPLUS11) && (SIMDJSON_CPLUSPLUS >= 201103L)
+
28 #define SIMDJSON_CPLUSPLUS11 1
+
29 #endif
+
30 
+
31 #ifndef SIMDJSON_CPLUSPLUS11
+
32 #error simdjson requires a compiler compliant with the C++11 standard
+
33 #endif
+
34 
+
35 #endif // SIMDJSON_COMPILER_CHECK_H
+
+
+ + + + diff --git a/deprecated.html b/deprecated.html new file mode 100644 index 000000000..ba025b2a2 --- /dev/null +++ b/deprecated.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Deprecated List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Deprecated List
+
+
+
+
File simdjson.h
+
We'll be removing this file so it isn't confused with the top level simdjson.h
+
Member simdjson::error_message (int error) noexcept
+
Error codes should be stored and returned as error_code, use error_message() instead.
+
Member simdjson::ErrorValues
+
This is an alias and will be removed, use error_code instead
+
Member simdjson::ParsedJson
+
Use dom::parser instead.
+
+
+
+
+ + + + diff --git a/dir_0d145e48adcb2584d6aad0aa1d711d9e.html b/dir_0d145e48adcb2584d6aad0aa1d711d9e.html new file mode 100644 index 000000000..a7d5c0b23 --- /dev/null +++ b/dir_0d145e48adcb2584d6aad0aa1d711d9e.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/westmere Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
westmere Directory Reference
+
+
+
+
+ + + + diff --git a/dir_0d145e48adcb2584d6aad0aa1d711d9e.js b/dir_0d145e48adcb2584d6aad0aa1d711d9e.js new file mode 100644 index 000000000..250adba90 --- /dev/null +++ b/dir_0d145e48adcb2584d6aad0aa1d711d9e.js @@ -0,0 +1,12 @@ +var dir_0d145e48adcb2584d6aad0aa1d711d9e = +[ + [ "begin.h", "westmere_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "westmere_2bitmanipulation_8h_source.html", null ], + [ "bitmask.h", "westmere_2bitmask_8h_source.html", null ], + [ "end.h", "westmere_2end_8h_source.html", null ], + [ "implementation.h", "westmere_2implementation_8h_source.html", null ], + [ "intrinsics.h", "westmere_2intrinsics_8h_source.html", null ], + [ "numberparsing.h", "westmere_2numberparsing_8h_source.html", null ], + [ "simd.h", "westmere_2simd_8h_source.html", null ], + [ "stringparsing.h", "westmere_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_0fee190c3bc9a7d22e6d44901a62fa54.html b/dir_0fee190c3bc9a7d22e6d44901a62fa54.html new file mode 100644 index 000000000..277e2f777 --- /dev/null +++ b/dir_0fee190c3bc9a7d22e6d44901a62fa54.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/internal Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
internal Directory Reference
+
+
+
+
+ + + + diff --git a/dir_0fee190c3bc9a7d22e6d44901a62fa54.js b/dir_0fee190c3bc9a7d22e6d44901a62fa54.js new file mode 100644 index 000000000..4a353eda0 --- /dev/null +++ b/dir_0fee190c3bc9a7d22e6d44901a62fa54.js @@ -0,0 +1,12 @@ +var dir_0fee190c3bc9a7d22e6d44901a62fa54 = +[ + [ "dom_parser_implementation.h", "internal_2dom__parser__implementation_8h_source.html", null ], + [ "isadetection.h", "isadetection_8h_source.html", null ], + [ "jsoncharutils_tables.h", "jsoncharutils__tables_8h_source.html", null ], + [ "jsonformatutils.h", "jsonformatutils_8h_source.html", null ], + [ "numberparsing_tables.h", "numberparsing__tables_8h_source.html", null ], + [ "simdprune_tables.h", "simdprune__tables_8h_source.html", null ], + [ "tape_ref-inl.h", "tape__ref-inl_8h_source.html", null ], + [ "tape_ref.h", "tape__ref_8h_source.html", null ], + [ "tape_type.h", "tape__type_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_438095d7beafc60159803dc5832a82bd.html b/dir_438095d7beafc60159803dc5832a82bd.html new file mode 100644 index 000000000..b89ceae5a --- /dev/null +++ b/dir_438095d7beafc60159803dc5832a82bd.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/dom Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dom Directory Reference
+
+
+
+
+ + + + diff --git a/dir_438095d7beafc60159803dc5832a82bd.js b/dir_438095d7beafc60159803dc5832a82bd.js new file mode 100644 index 000000000..0868258ac --- /dev/null +++ b/dir_438095d7beafc60159803dc5832a82bd.js @@ -0,0 +1,21 @@ +var dir_438095d7beafc60159803dc5832a82bd = +[ + [ "array-inl.h", "dom_2array-inl_8h_source.html", null ], + [ "array.h", "dom_2array_8h_source.html", null ], + [ "document-inl.h", "dom_2document-inl_8h_source.html", null ], + [ "document.h", "dom_2document_8h_source.html", null ], + [ "document_stream-inl.h", "dom_2document__stream-inl_8h_source.html", null ], + [ "document_stream.h", "dom_2document__stream_8h_source.html", null ], + [ "element-inl.h", "element-inl_8h_source.html", null ], + [ "element.h", "element_8h_source.html", null ], + [ "jsonparser.h", "jsonparser_8h_source.html", null ], + [ "object-inl.h", "dom_2object-inl_8h_source.html", null ], + [ "object.h", "dom_2object_8h_source.html", null ], + [ "parsedjson.h", "parsedjson_8h_source.html", null ], + [ "parsedjson_iterator-inl.h", "parsedjson__iterator-inl_8h_source.html", null ], + [ "parsedjson_iterator.h", "parsedjson__iterator_8h_source.html", null ], + [ "parser-inl.h", "dom_2parser-inl_8h_source.html", null ], + [ "parser.h", "dom_2parser_8h_source.html", null ], + [ "serialization-inl.h", "dom_2serialization-inl_8h_source.html", null ], + [ "serialization.h", "dom_2serialization_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_49a0b2767ded4a45005c5d6720a18cd1.html b/dir_49a0b2767ded4a45005c5d6720a18cd1.html new file mode 100644 index 000000000..ae5b3f9c0 --- /dev/null +++ b/dir_49a0b2767ded4a45005c5d6720a18cd1.html @@ -0,0 +1,115 @@ + + + + + + + +simdjson: include/simdjson Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson Directory Reference
+
+
+ + +

+Directories

+ + + + + + +

+Files

file  implementation-base.h [code]
 Includes common stuff needed for implementations.
 
file  simdjson.h [code]
 
+
+
+ + + + diff --git a/dir_49a0b2767ded4a45005c5d6720a18cd1.js b/dir_49a0b2767ded4a45005c5d6720a18cd1.js new file mode 100644 index 000000000..8319c98d3 --- /dev/null +++ b/dir_49a0b2767ded4a45005c5d6720a18cd1.js @@ -0,0 +1,38 @@ +var dir_49a0b2767ded4a45005c5d6720a18cd1 = +[ + [ "arm64", "dir_76d8247d4498211a7d04a3794a38eb71.html", "dir_76d8247d4498211a7d04a3794a38eb71" ], + [ "dom", "dir_438095d7beafc60159803dc5832a82bd.html", "dir_438095d7beafc60159803dc5832a82bd" ], + [ "fallback", "dir_bdd5d78d80e110a51a7313218161f5b4.html", "dir_bdd5d78d80e110a51a7313218161f5b4" ], + [ "generic", "dir_53368a02099cf3699f2996a5d88d70b6.html", "dir_53368a02099cf3699f2996a5d88d70b6" ], + [ "haswell", "dir_b35ffb90479583e132afc246e9b6e77a.html", "dir_b35ffb90479583e132afc246e9b6e77a" ], + [ "icelake", "dir_ba336e6e255a3bf0b1427b51513cdc60.html", "dir_ba336e6e255a3bf0b1427b51513cdc60" ], + [ "internal", "dir_0fee190c3bc9a7d22e6d44901a62fa54.html", "dir_0fee190c3bc9a7d22e6d44901a62fa54" ], + [ "nonstd", "dir_aff943445258981e0d80c1f13c0bf97f.html", "dir_aff943445258981e0d80c1f13c0bf97f" ], + [ "ppc64", "dir_9b01d0736ef91c92ca1a5074971144b1.html", "dir_9b01d0736ef91c92ca1a5074971144b1" ], + [ "westmere", "dir_0d145e48adcb2584d6aad0aa1d711d9e.html", "dir_0d145e48adcb2584d6aad0aa1d711d9e" ], + [ "arm64.h", "arm64_8h_source.html", null ], + [ "base.h", "base_8h_source.html", null ], + [ "builtin.h", "builtin_8h_source.html", null ], + [ "common_defs.h", "common__defs_8h_source.html", null ], + [ "compiler_check.h", "compiler__check_8h_source.html", null ], + [ "dom.h", "dom_8h_source.html", null ], + [ "error-inl.h", "error-inl_8h_source.html", null ], + [ "error.h", "error_8h_source.html", null ], + [ "fallback.h", "fallback_8h_source.html", null ], + [ "haswell.h", "haswell_8h_source.html", null ], + [ "icelake.h", "icelake_8h_source.html", null ], + [ "implementation-base.h", "implementation-base_8h.html", null ], + [ "implementation.h", "implementation_8h_source.html", null ], + [ "implementations.h", "implementations_8h_source.html", null ], + [ "jsonioutil.h", "jsonioutil_8h_source.html", null ], + [ "minify.h", "minify_8h_source.html", null ], + [ "padded_string-inl.h", "padded__string-inl_8h_source.html", null ], + [ "padded_string.h", "padded__string_8h_source.html", null ], + [ "padded_string_view-inl.h", "padded__string__view-inl_8h_source.html", null ], + [ "padded_string_view.h", "padded__string__view_8h_source.html", null ], + [ "portability.h", "portability_8h_source.html", null ], + [ "ppc64.h", "ppc64_8h_source.html", null ], + [ "simdjson.h", "simdjson_8h.html", null ], + [ "simdjson_version.h", "simdjson__version_8h_source.html", null ], + [ "westmere.h", "westmere_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_53368a02099cf3699f2996a5d88d70b6.html b/dir_53368a02099cf3699f2996a5d88d70b6.html new file mode 100644 index 000000000..2ceb52c4a --- /dev/null +++ b/dir_53368a02099cf3699f2996a5d88d70b6.html @@ -0,0 +1,107 @@ + + + + + + + +simdjson: include/simdjson/generic Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
generic Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/dir_53368a02099cf3699f2996a5d88d70b6.js b/dir_53368a02099cf3699f2996a5d88d70b6.js new file mode 100644 index 000000000..33e8e0a16 --- /dev/null +++ b/dir_53368a02099cf3699f2996a5d88d70b6.js @@ -0,0 +1,12 @@ +var dir_53368a02099cf3699f2996a5d88d70b6 = +[ + [ "ondemand", "dir_7796bb4b727f918c96faee1bdd50e49a.html", "dir_7796bb4b727f918c96faee1bdd50e49a" ], + [ "atomparsing.h", "atomparsing_8h_source.html", null ], + [ "dom_parser_implementation.h", "generic_2dom__parser__implementation_8h_source.html", null ], + [ "implementation_simdjson_result_base-inl.h", "implementation__simdjson__result__base-inl_8h_source.html", null ], + [ "implementation_simdjson_result_base.h", "implementation__simdjson__result__base_8h_source.html", null ], + [ "jsoncharutils.h", "jsoncharutils_8h_source.html", null ], + [ "numberparsing.h", "generic_2numberparsing_8h_source.html", null ], + [ "ondemand-inl.h", "ondemand-inl_8h_source.html", null ], + [ "ondemand.h", "ondemand_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_76d8247d4498211a7d04a3794a38eb71.html b/dir_76d8247d4498211a7d04a3794a38eb71.html new file mode 100644 index 000000000..6a2029b6e --- /dev/null +++ b/dir_76d8247d4498211a7d04a3794a38eb71.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/arm64 Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
arm64 Directory Reference
+
+
+
+
+ + + + diff --git a/dir_76d8247d4498211a7d04a3794a38eb71.js b/dir_76d8247d4498211a7d04a3794a38eb71.js new file mode 100644 index 000000000..5105fab32 --- /dev/null +++ b/dir_76d8247d4498211a7d04a3794a38eb71.js @@ -0,0 +1,12 @@ +var dir_76d8247d4498211a7d04a3794a38eb71 = +[ + [ "begin.h", "arm64_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "arm64_2bitmanipulation_8h_source.html", null ], + [ "bitmask.h", "arm64_2bitmask_8h_source.html", null ], + [ "end.h", "arm64_2end_8h_source.html", null ], + [ "implementation.h", "arm64_2implementation_8h_source.html", null ], + [ "intrinsics.h", "arm64_2intrinsics_8h_source.html", null ], + [ "numberparsing.h", "arm64_2numberparsing_8h_source.html", null ], + [ "simd.h", "arm64_2simd_8h_source.html", null ], + [ "stringparsing.h", "arm64_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_7796bb4b727f918c96faee1bdd50e49a.html b/dir_7796bb4b727f918c96faee1bdd50e49a.html new file mode 100644 index 000000000..e2649a650 --- /dev/null +++ b/dir_7796bb4b727f918c96faee1bdd50e49a.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ondemand Directory Reference
+
+
+
+
+ + + + diff --git a/dir_7796bb4b727f918c96faee1bdd50e49a.js b/dir_7796bb4b727f918c96faee1bdd50e49a.js new file mode 100644 index 000000000..59f62fe13 --- /dev/null +++ b/dir_7796bb4b727f918c96faee1bdd50e49a.js @@ -0,0 +1,36 @@ +var dir_7796bb4b727f918c96faee1bdd50e49a = +[ + [ "array-inl.h", "generic_2ondemand_2array-inl_8h_source.html", null ], + [ "array.h", "generic_2ondemand_2array_8h_source.html", null ], + [ "array_iterator-inl.h", "array__iterator-inl_8h_source.html", null ], + [ "array_iterator.h", "array__iterator_8h_source.html", null ], + [ "document-inl.h", "generic_2ondemand_2document-inl_8h_source.html", null ], + [ "document.h", "generic_2ondemand_2document_8h_source.html", null ], + [ "document_stream-inl.h", "generic_2ondemand_2document__stream-inl_8h_source.html", null ], + [ "document_stream.h", "generic_2ondemand_2document__stream_8h_source.html", null ], + [ "field-inl.h", "field-inl_8h_source.html", null ], + [ "field.h", "field_8h_source.html", null ], + [ "json_iterator-inl.h", "json__iterator-inl_8h_source.html", null ], + [ "json_iterator.h", "json__iterator_8h_source.html", null ], + [ "json_type-inl.h", "json__type-inl_8h_source.html", null ], + [ "json_type.h", "json__type_8h_source.html", null ], + [ "logger-inl.h", "logger-inl_8h_source.html", null ], + [ "logger.h", "logger_8h_source.html", null ], + [ "object-inl.h", "generic_2ondemand_2object-inl_8h_source.html", null ], + [ "object.h", "generic_2ondemand_2object_8h_source.html", null ], + [ "object_iterator-inl.h", "object__iterator-inl_8h_source.html", null ], + [ "object_iterator.h", "object__iterator_8h_source.html", null ], + [ "parser-inl.h", "generic_2ondemand_2parser-inl_8h_source.html", null ], + [ "parser.h", "generic_2ondemand_2parser_8h_source.html", null ], + [ "raw_json_string-inl.h", "raw__json__string-inl_8h_source.html", null ], + [ "raw_json_string.h", "raw__json__string_8h_source.html", null ], + [ "serialization-inl.h", "generic_2ondemand_2serialization-inl_8h_source.html", null ], + [ "serialization.h", "generic_2ondemand_2serialization_8h_source.html", null ], + [ "token_iterator-inl.h", "token__iterator-inl_8h_source.html", null ], + [ "token_iterator.h", "token__iterator_8h_source.html", null ], + [ "token_position.h", "token__position_8h_source.html", null ], + [ "value-inl.h", "value-inl_8h_source.html", null ], + [ "value.h", "value_8h_source.html", null ], + [ "value_iterator-inl.h", "value__iterator-inl_8h_source.html", null ], + [ "value_iterator.h", "value__iterator_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_9b01d0736ef91c92ca1a5074971144b1.html b/dir_9b01d0736ef91c92ca1a5074971144b1.html new file mode 100644 index 000000000..df0baae66 --- /dev/null +++ b/dir_9b01d0736ef91c92ca1a5074971144b1.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/ppc64 Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ppc64 Directory Reference
+
+
+
+
+ + + + diff --git a/dir_9b01d0736ef91c92ca1a5074971144b1.js b/dir_9b01d0736ef91c92ca1a5074971144b1.js new file mode 100644 index 000000000..21b521339 --- /dev/null +++ b/dir_9b01d0736ef91c92ca1a5074971144b1.js @@ -0,0 +1,12 @@ +var dir_9b01d0736ef91c92ca1a5074971144b1 = +[ + [ "begin.h", "ppc64_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "ppc64_2bitmanipulation_8h_source.html", null ], + [ "bitmask.h", "ppc64_2bitmask_8h_source.html", null ], + [ "end.h", "ppc64_2end_8h_source.html", null ], + [ "implementation.h", "ppc64_2implementation_8h_source.html", null ], + [ "intrinsics.h", "ppc64_2intrinsics_8h_source.html", null ], + [ "numberparsing.h", "ppc64_2numberparsing_8h_source.html", null ], + [ "simd.h", "ppc64_2simd_8h_source.html", null ], + [ "stringparsing.h", "ppc64_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_aff943445258981e0d80c1f13c0bf97f.html b/dir_aff943445258981e0d80c1f13c0bf97f.html new file mode 100644 index 000000000..c3284c055 --- /dev/null +++ b/dir_aff943445258981e0d80c1f13c0bf97f.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/nonstd Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
nonstd Directory Reference
+
+
+
+
+ + + + diff --git a/dir_aff943445258981e0d80c1f13c0bf97f.js b/dir_aff943445258981e0d80c1f13c0bf97f.js new file mode 100644 index 000000000..24dbd5c82 --- /dev/null +++ b/dir_aff943445258981e0d80c1f13c0bf97f.js @@ -0,0 +1,4 @@ +var dir_aff943445258981e0d80c1f13c0bf97f = +[ + [ "string_view.hpp", "string__view_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_b35ffb90479583e132afc246e9b6e77a.html b/dir_b35ffb90479583e132afc246e9b6e77a.html new file mode 100644 index 000000000..f4f2e142f --- /dev/null +++ b/dir_b35ffb90479583e132afc246e9b6e77a.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/haswell Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
haswell Directory Reference
+
+
+
+
+ + + + diff --git a/dir_b35ffb90479583e132afc246e9b6e77a.js b/dir_b35ffb90479583e132afc246e9b6e77a.js new file mode 100644 index 000000000..ae121eefd --- /dev/null +++ b/dir_b35ffb90479583e132afc246e9b6e77a.js @@ -0,0 +1,12 @@ +var dir_b35ffb90479583e132afc246e9b6e77a = +[ + [ "begin.h", "haswell_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "haswell_2bitmanipulation_8h_source.html", null ], + [ "bitmask.h", "haswell_2bitmask_8h_source.html", null ], + [ "end.h", "haswell_2end_8h_source.html", null ], + [ "implementation.h", "haswell_2implementation_8h_source.html", null ], + [ "intrinsics.h", "haswell_2intrinsics_8h_source.html", null ], + [ "numberparsing.h", "haswell_2numberparsing_8h_source.html", null ], + [ "simd.h", "haswell_2simd_8h_source.html", null ], + [ "stringparsing.h", "haswell_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_ba336e6e255a3bf0b1427b51513cdc60.html b/dir_ba336e6e255a3bf0b1427b51513cdc60.html new file mode 100644 index 000000000..65f5b0b69 --- /dev/null +++ b/dir_ba336e6e255a3bf0b1427b51513cdc60.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/icelake Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
icelake Directory Reference
+
+
+
+
+ + + + diff --git a/dir_ba336e6e255a3bf0b1427b51513cdc60.js b/dir_ba336e6e255a3bf0b1427b51513cdc60.js new file mode 100644 index 000000000..ea79d06c8 --- /dev/null +++ b/dir_ba336e6e255a3bf0b1427b51513cdc60.js @@ -0,0 +1,12 @@ +var dir_ba336e6e255a3bf0b1427b51513cdc60 = +[ + [ "begin.h", "icelake_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "icelake_2bitmanipulation_8h_source.html", null ], + [ "bitmask.h", "icelake_2bitmask_8h_source.html", null ], + [ "end.h", "icelake_2end_8h_source.html", null ], + [ "implementation.h", "icelake_2implementation_8h_source.html", null ], + [ "intrinsics.h", "icelake_2intrinsics_8h_source.html", null ], + [ "numberparsing.h", "icelake_2numberparsing_8h_source.html", null ], + [ "simd.h", "icelake_2simd_8h_source.html", null ], + [ "stringparsing.h", "icelake_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_bdd5d78d80e110a51a7313218161f5b4.html b/dir_bdd5d78d80e110a51a7313218161f5b4.html new file mode 100644 index 000000000..390887992 --- /dev/null +++ b/dir_bdd5d78d80e110a51a7313218161f5b4.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: include/simdjson/fallback Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
fallback Directory Reference
+
+
+
+
+ + + + diff --git a/dir_bdd5d78d80e110a51a7313218161f5b4.js b/dir_bdd5d78d80e110a51a7313218161f5b4.js new file mode 100644 index 000000000..d3947d4fe --- /dev/null +++ b/dir_bdd5d78d80e110a51a7313218161f5b4.js @@ -0,0 +1,9 @@ +var dir_bdd5d78d80e110a51a7313218161f5b4 = +[ + [ "begin.h", "fallback_2begin_8h_source.html", null ], + [ "bitmanipulation.h", "fallback_2bitmanipulation_8h_source.html", null ], + [ "end.h", "fallback_2end_8h_source.html", null ], + [ "implementation.h", "fallback_2implementation_8h_source.html", null ], + [ "numberparsing.h", "fallback_2numberparsing_8h_source.html", null ], + [ "stringparsing.h", "fallback_2stringparsing_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 000000000..cb3f4e360 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,107 @@ + + + + + + + +simdjson: include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
include Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.js b/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 000000000..b6ad8bf62 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "simdjson", "dir_49a0b2767ded4a45005c5d6720a18cd1.html", "dir_49a0b2767ded4a45005c5d6720a18cd1" ] +]; \ No newline at end of file diff --git a/dir_e68e8157741866f444e17edd764ebbae.html b/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 000000000..4546e5b8e --- /dev/null +++ b/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,103 @@ + + + + + + + +simdjson: doc Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
doc Directory Reference
+
+
+
+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/dom_2array-inl_8h_source.html b/dom_2array-inl_8h_source.html new file mode 100644 index 000000000..57d862aff --- /dev/null +++ b/dom_2array-inl_8h_source.html @@ -0,0 +1,296 @@ + + + + + + + +simdjson: include/simdjson/dom/array-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_ARRAY_H
+
2 #define SIMDJSON_INLINE_ARRAY_H
+
3 
+
4 // Inline implementations go in here.
+
5 
+
6 #include "simdjson/dom/array.h"
+
7 #include "simdjson/dom/element.h"
+
8 #include <utility>
+
9 
+
10 namespace simdjson {
+
11 
+
12 //
+
13 // simdjson_result<dom::array> inline implementation
+
14 //
+
15 simdjson_inline simdjson_result<dom::array>::simdjson_result() noexcept
+
16  : internal::simdjson_result_base<dom::array>() {}
+
17 simdjson_inline simdjson_result<dom::array>::simdjson_result(dom::array value) noexcept
+
18  : internal::simdjson_result_base<dom::array>(std::forward<dom::array>(value)) {}
+
19 simdjson_inline simdjson_result<dom::array>::simdjson_result(error_code error) noexcept
+
20  : internal::simdjson_result_base<dom::array>(error) {}
+
21 
+
22 #if SIMDJSON_EXCEPTIONS
+
23 
+
24 inline dom::array::iterator simdjson_result<dom::array>::begin() const noexcept(false) {
+
25  if (error()) { throw simdjson_error(error()); }
+
26  return first.begin();
+
27 }
+
28 inline dom::array::iterator simdjson_result<dom::array>::end() const noexcept(false) {
+
29  if (error()) { throw simdjson_error(error()); }
+
30  return first.end();
+
31 }
+
32 inline size_t simdjson_result<dom::array>::size() const noexcept(false) {
+
33  if (error()) { throw simdjson_error(error()); }
+
34  return first.size();
+
35 }
+
36 
+
37 #endif // SIMDJSON_EXCEPTIONS
+
38 
+
39 inline simdjson_result<dom::element> simdjson_result<dom::array>::at_pointer(std::string_view json_pointer) const noexcept {
+
40  if (error()) { return error(); }
+
41  return first.at_pointer(json_pointer);
+
42 }
+
43 inline simdjson_result<dom::element> simdjson_result<dom::array>::at(size_t index) const noexcept {
+
44  if (error()) { return error(); }
+
45  return first.at(index);
+
46 }
+
47 
+
48 namespace dom {
+
49 
+
50 //
+
51 // array inline implementation
+
52 //
+
53 simdjson_inline array::array() noexcept : tape{} {}
+
54 simdjson_inline array::array(const internal::tape_ref &_tape) noexcept : tape{_tape} {}
+
55 inline array::iterator array::begin() const noexcept {
+
56  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
57  return internal::tape_ref(tape.doc, tape.json_index + 1);
+
58 }
+
59 inline array::iterator array::end() const noexcept {
+
60  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
61  return internal::tape_ref(tape.doc, tape.after_element() - 1);
+
62 }
+
63 inline size_t array::size() const noexcept {
+
64  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
65  return tape.scope_count();
+
66 }
+
67 inline size_t array::number_of_slots() const noexcept {
+
68  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
69  return tape.matching_brace_index() - tape.json_index;
+
70 }
+
71 inline simdjson_result<element> array::at_pointer(std::string_view json_pointer) const noexcept {
+
72  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
73  if(json_pointer.empty()) { // an empty string means that we return the current node
+
74  return element(this->tape); // copy the current node
+
75  } else if(json_pointer[0] != '/') { // otherwise there is an error
+
76  return INVALID_JSON_POINTER;
+
77  }
+
78  json_pointer = json_pointer.substr(1);
+
79  // - means "the append position" or "the element after the end of the array"
+
80  // We don't support this, because we're returning a real element, not a position.
+
81  if (json_pointer == "-") { return INDEX_OUT_OF_BOUNDS; }
+
82 
+
83  // Read the array index
+
84  size_t array_index = 0;
+
85  size_t i;
+
86  for (i = 0; i < json_pointer.length() && json_pointer[i] != '/'; i++) {
+
87  uint8_t digit = uint8_t(json_pointer[i] - '0');
+
88  // Check for non-digit in array index. If it's there, we're trying to get a field in an object
+
89  if (digit > 9) { return INCORRECT_TYPE; }
+
90  array_index = array_index*10 + digit;
+
91  }
+
92 
+
93  // 0 followed by other digits is invalid
+
94  if (i > 1 && json_pointer[0] == '0') { return INVALID_JSON_POINTER; } // "JSON pointer array index has other characters after 0"
+
95 
+
96  // Empty string is invalid; so is a "/" with no digits before it
+
97  if (i == 0) { return INVALID_JSON_POINTER; } // "Empty string in JSON pointer array index"
+
98 
+
99  // Get the child
+
100  auto child = array(tape).at(array_index);
+
101  // If there is an error, it ends here
+
102  if(child.error()) {
+
103  return child;
+
104  }
+
105  // If there is a /, we're not done yet, call recursively.
+
106  if (i < json_pointer.length()) {
+
107  child = child.at_pointer(json_pointer.substr(i));
+
108  }
+
109  return child;
+
110 }
+
111 
+
112 inline simdjson_result<element> array::at(size_t index) const noexcept {
+
113  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
114  size_t i=0;
+
115  for (auto element : *this) {
+
116  if (i == index) { return element; }
+
117  i++;
+
118  }
+
119  return INDEX_OUT_OF_BOUNDS;
+
120 }
+
121 
+
122 //
+
123 // array::iterator inline implementation
+
124 //
+
125 simdjson_inline array::iterator::iterator(const internal::tape_ref &_tape) noexcept : tape{_tape} { }
+
126 inline element array::iterator::operator*() const noexcept {
+
127  return element(tape);
+
128 }
+ +
130  tape.json_index = tape.after_element();
+
131  return *this;
+
132 }
+ +
134  array::iterator out = *this;
+
135  ++*this;
+
136  return out;
+
137 }
+
138 inline bool array::iterator::operator!=(const array::iterator& other) const noexcept {
+
139  return tape.json_index != other.tape.json_index;
+
140 }
+
141 inline bool array::iterator::operator==(const array::iterator& other) const noexcept {
+
142  return tape.json_index == other.tape.json_index;
+
143 }
+
144 inline bool array::iterator::operator<(const array::iterator& other) const noexcept {
+
145  return tape.json_index < other.tape.json_index;
+
146 }
+
147 inline bool array::iterator::operator<=(const array::iterator& other) const noexcept {
+
148  return tape.json_index <= other.tape.json_index;
+
149 }
+
150 inline bool array::iterator::operator>=(const array::iterator& other) const noexcept {
+
151  return tape.json_index >= other.tape.json_index;
+
152 }
+
153 inline bool array::iterator::operator>(const array::iterator& other) const noexcept {
+
154  return tape.json_index > other.tape.json_index;
+
155 }
+
156 
+
157 } // namespace dom
+
158 
+
159 
+
160 } // namespace simdjson
+
161 
+
162 #include "simdjson/dom/element-inl.h"
+
163 
+
164 #if defined(__cpp_lib_ranges)
+
165 static_assert(std::ranges::view<simdjson::dom::array>);
+
166 static_assert(std::ranges::sized_range<simdjson::dom::array>);
+
167 #if SIMDJSON_EXCEPTIONS
+
168 static_assert(std::ranges::view<simdjson::simdjson_result<simdjson::dom::array>>);
+
169 static_assert(std::ranges::sized_range<simdjson::simdjson_result<simdjson::dom::array>>);
+
170 #endif // SIMDJSON_EXCEPTIONS
+
171 #endif // defined(__cpp_lib_ranges)
+
172 
+
173 #endif // SIMDJSON_INLINE_ARRAY_H
+ +
bool operator!=(const iterator &other) const noexcept
Check if these values come from the same place in the JSON.
Definition: array-inl.h:138
+
iterator & operator++() noexcept
Get the next value.
Definition: array-inl.h:129
+
value_type operator*() const noexcept
Get the actual value.
Definition: array-inl.h:126
+
JSON array.
Definition: array.h:22
+
size_t number_of_slots() const noexcept
Get the total number of slots used by this array on the tape.
Definition: array-inl.h:67
+
iterator end() const noexcept
One past the last array element.
Definition: array-inl.h:59
+
size_t size() const noexcept
Get the size of the array (number of immediate children).
Definition: array-inl.h:63
+
simdjson_result< element > at(size_t index) const noexcept
Get the value at the given index.
Definition: array-inl.h:112
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: array-inl.h:71
+
simdjson_inline array() noexcept
Create a new, invalid array.
Definition: array-inl.h:53
+
iterator begin() const noexcept
Return the first array element.
Definition: array-inl.h:55
+
A JSON element.
Definition: element.h:40
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ INDEX_OUT_OF_BOUNDS
JSON array index too large.
Definition: error.h:36
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/dom_2array_8h_source.html b/dom_2array_8h_source.html new file mode 100644 index 000000000..868fd952a --- /dev/null +++ b/dom_2array_8h_source.html @@ -0,0 +1,224 @@ + + + + + + + +simdjson: include/simdjson/dom/array.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array.h
+
+
+
1 #ifndef SIMDJSON_DOM_ARRAY_H
+
2 #define SIMDJSON_DOM_ARRAY_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/error.h"
+
6 #include "simdjson/internal/tape_ref.h"
+
7 
+
8 namespace simdjson {
+
9 
+
10 namespace internal {
+
11 template<typename T>
+
12 class string_builder;
+
13 }
+
14 namespace dom {
+
15 
+
16 class document;
+
17 class element;
+
18 
+
22 class array {
+
23 public:
+
25  simdjson_inline array() noexcept;
+
26 
+
27  class iterator {
+
28  public:
+
29  using value_type = element;
+
30  using difference_type = std::ptrdiff_t;
+
31 
+
35  inline value_type operator*() const noexcept;
+
41  inline iterator& operator++() noexcept;
+
47  inline iterator operator++(int) noexcept;
+
53  inline bool operator!=(const iterator& other) const noexcept;
+
54  inline bool operator==(const iterator& other) const noexcept;
+
55 
+
56  inline bool operator<(const iterator& other) const noexcept;
+
57  inline bool operator<=(const iterator& other) const noexcept;
+
58  inline bool operator>=(const iterator& other) const noexcept;
+
59  inline bool operator>(const iterator& other) const noexcept;
+
60 
+
61  iterator() noexcept = default;
+
62  iterator(const iterator&) noexcept = default;
+
63  iterator& operator=(const iterator&) noexcept = default;
+
64  private:
+
65  simdjson_inline iterator(const internal::tape_ref &tape) noexcept;
+
66  internal::tape_ref tape;
+
67  friend class array;
+
68  };
+
69 
+
75  inline iterator begin() const noexcept;
+
81  inline iterator end() const noexcept;
+
87  inline size_t size() const noexcept;
+
98  inline size_t number_of_slots() const noexcept;
+
115  inline simdjson_result<element> at_pointer(std::string_view json_pointer) const noexcept;
+
116 
+
133  inline simdjson_result<element> at(size_t index) const noexcept;
+
134 
+
135 private:
+
136  simdjson_inline array(const internal::tape_ref &tape) noexcept;
+
137  internal::tape_ref tape;
+
138  friend class element;
+
139  friend struct simdjson_result<element>;
+
140  template<typename T>
+
141  friend class simdjson::internal::string_builder;
+
142 };
+
143 
+
144 
+
145 } // namespace dom
+
146 
+
148 template<>
+
149 struct simdjson_result<dom::array> : public internal::simdjson_result_base<dom::array> {
+
150 public:
+
151  simdjson_inline simdjson_result() noexcept;
+
152  simdjson_inline simdjson_result(dom::array value) noexcept;
+
153  simdjson_inline simdjson_result(error_code error) noexcept;
+
154 
+
155  inline simdjson_result<dom::element> at_pointer(std::string_view json_pointer) const noexcept;
+
156  inline simdjson_result<dom::element> at(size_t index) const noexcept;
+
157 
+
158 #if SIMDJSON_EXCEPTIONS
+
159  inline dom::array::iterator begin() const noexcept(false);
+
160  inline dom::array::iterator end() const noexcept(false);
+
161  inline size_t size() const noexcept(false);
+
162 #endif // SIMDJSON_EXCEPTIONS
+
163 };
+
164 
+
165 
+
166 
+
167 } // namespace simdjson
+
168 
+
169 #if defined(__cpp_lib_ranges)
+
170 #include <ranges>
+
171 
+
172 namespace std {
+
173 namespace ranges {
+
174 template<>
+
175 inline constexpr bool enable_view<simdjson::dom::array> = true;
+
176 #if SIMDJSON_EXCEPTIONS
+
177 template<>
+
178 inline constexpr bool enable_view<simdjson::simdjson_result<simdjson::dom::array>> = true;
+
179 #endif // SIMDJSON_EXCEPTIONS
+
180 } // namespace ranges
+
181 } // namespace std
+
182 #endif // defined(__cpp_lib_ranges)
+
183 
+
184 #endif // SIMDJSON_DOM_ARRAY_H
+ +
bool operator!=(const iterator &other) const noexcept
Check if these values come from the same place in the JSON.
Definition: array-inl.h:138
+
iterator & operator++() noexcept
Get the next value.
Definition: array-inl.h:129
+
value_type operator*() const noexcept
Get the actual value.
Definition: array-inl.h:126
+
JSON array.
Definition: array.h:22
+
size_t number_of_slots() const noexcept
Get the total number of slots used by this array on the tape.
Definition: array-inl.h:67
+
iterator end() const noexcept
One past the last array element.
Definition: array-inl.h:59
+
size_t size() const noexcept
Get the size of the array (number of immediate children).
Definition: array-inl.h:63
+
simdjson_result< element > at(size_t index) const noexcept
Get the value at the given index.
Definition: array-inl.h:112
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: array-inl.h:71
+
simdjson_inline array() noexcept
Create a new, invalid array.
Definition: array-inl.h:53
+
iterator begin() const noexcept
Return the first array element.
Definition: array-inl.h:55
+
A JSON element.
Definition: element.h:40
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
The result of a JSON navigation that may fail.
Definition: element.h:482
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/dom_2document-inl_8h_source.html b/dom_2document-inl_8h_source.html new file mode 100644 index 000000000..e0a830fe0 --- /dev/null +++ b/dom_2document-inl_8h_source.html @@ -0,0 +1,268 @@ + + + + + + + +simdjson: include/simdjson/dom/document-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_DOCUMENT_H
+
2 #define SIMDJSON_INLINE_DOCUMENT_H
+
3 
+
4 // Inline implementations go in here.
+
5 
+
6 #include "simdjson/dom/document.h"
+
7 #include "simdjson/dom/element.h"
+
8 #include "simdjson/internal/tape_ref.h"
+
9 #include "simdjson/internal/jsonformatutils.h"
+
10 #include <ostream>
+
11 #include <cstring>
+
12 
+
13 namespace simdjson {
+
14 namespace dom {
+
15 
+
16 //
+
17 // document inline implementation
+
18 //
+
19 inline element document::root() const noexcept {
+
20  return element(internal::tape_ref(this, 1));
+
21 }
+
22 simdjson_warn_unused
+
23 inline size_t document::capacity() const noexcept {
+
24  return allocated_capacity;
+
25 }
+
26 
+
27 simdjson_warn_unused
+
28 inline error_code document::allocate(size_t capacity) noexcept {
+
29  if (capacity == 0) {
+
30  string_buf.reset();
+
31  tape.reset();
+
32  allocated_capacity = 0;
+
33  return SUCCESS;
+
34  }
+
35 
+
36  // a pathological input like "[[[[..." would generate capacity tape elements, so
+
37  // need a capacity of at least capacity + 1, but it is also possible to do
+
38  // worse with "[7,7,7,7,6,7,7,7,6,7,7,6,[7,7,7,7,6,7,7,7,6,7,7,6,7,7,7,7,7,7,6"
+
39  //where capacity + 1 tape elements are
+
40  // generated, see issue https://github.com/simdjson/simdjson/issues/345
+
41  size_t tape_capacity = SIMDJSON_ROUNDUP_N(capacity + 3, 64);
+
42  // a document with only zero-length strings... could have capacity/3 string
+
43  // and we would need capacity/3 * 5 bytes on the string buffer
+
44  size_t string_capacity = SIMDJSON_ROUNDUP_N(5 * capacity / 3 + SIMDJSON_PADDING, 64);
+
45  string_buf.reset( new (std::nothrow) uint8_t[string_capacity]);
+
46  tape.reset(new (std::nothrow) uint64_t[tape_capacity]);
+
47  if(!(string_buf && tape)) {
+
48  allocated_capacity = 0;
+
49  string_buf.reset();
+
50  tape.reset();
+
51  return MEMALLOC;
+
52  }
+
53  // Technically the allocated_capacity might be larger than capacity
+
54  // so the next line is pessimistic.
+
55  allocated_capacity = capacity;
+
56  return SUCCESS;
+
57 }
+
58 
+
59 inline bool document::dump_raw_tape(std::ostream &os) const noexcept {
+
60  uint32_t string_length;
+
61  size_t tape_idx = 0;
+
62  uint64_t tape_val = tape[tape_idx];
+
63  uint8_t type = uint8_t(tape_val >> 56);
+
64  os << tape_idx << " : " << type;
+
65  tape_idx++;
+
66  size_t how_many = 0;
+
67  if (type == 'r') {
+
68  how_many = size_t(tape_val & internal::JSON_VALUE_MASK);
+
69  } else {
+
70  // Error: no starting root node?
+
71  return false;
+
72  }
+
73  os << "\t// pointing to " << how_many << " (right after last node)\n";
+
74  uint64_t payload;
+
75  for (; tape_idx < how_many; tape_idx++) {
+
76  os << tape_idx << " : ";
+
77  tape_val = tape[tape_idx];
+
78  payload = tape_val & internal::JSON_VALUE_MASK;
+
79  type = uint8_t(tape_val >> 56);
+
80  switch (type) {
+
81  case '"': // we have a string
+
82  os << "string \"";
+
83  std::memcpy(&string_length, string_buf.get() + payload, sizeof(uint32_t));
+
84  os << internal::escape_json_string(std::string_view(
+
85  reinterpret_cast<const char *>(string_buf.get() + payload + sizeof(uint32_t)),
+
86  string_length
+
87  ));
+
88  os << '"';
+
89  os << '\n';
+
90  break;
+
91  case 'l': // we have a long int
+
92  if (tape_idx + 1 >= how_many) {
+
93  return false;
+
94  }
+
95  os << "integer " << static_cast<int64_t>(tape[++tape_idx]) << "\n";
+
96  break;
+
97  case 'u': // we have a long uint
+
98  if (tape_idx + 1 >= how_many) {
+
99  return false;
+
100  }
+
101  os << "unsigned integer " << tape[++tape_idx] << "\n";
+
102  break;
+
103  case 'd': // we have a double
+
104  os << "float ";
+
105  if (tape_idx + 1 >= how_many) {
+
106  return false;
+
107  }
+
108  double answer;
+
109  std::memcpy(&answer, &tape[++tape_idx], sizeof(answer));
+
110  os << answer << '\n';
+
111  break;
+
112  case 'n': // we have a null
+
113  os << "null\n";
+
114  break;
+
115  case 't': // we have a true
+
116  os << "true\n";
+
117  break;
+
118  case 'f': // we have a false
+
119  os << "false\n";
+
120  break;
+
121  case '{': // we have an object
+
122  os << "{\t// pointing to next tape location " << uint32_t(payload)
+
123  << " (first node after the scope), "
+
124  << " saturated count "
+
125  << ((payload >> 32) & internal::JSON_COUNT_MASK)<< "\n";
+
126  break; case '}': // we end an object
+
127  os << "}\t// pointing to previous tape location " << uint32_t(payload)
+
128  << " (start of the scope)\n";
+
129  break;
+
130  case '[': // we start an array
+
131  os << "[\t// pointing to next tape location " << uint32_t(payload)
+
132  << " (first node after the scope), "
+
133  << " saturated count "
+
134  << ((payload >> 32) & internal::JSON_COUNT_MASK)<< "\n";
+
135  break;
+
136  case ']': // we end an array
+
137  os << "]\t// pointing to previous tape location " << uint32_t(payload)
+
138  << " (start of the scope)\n";
+
139  break;
+
140  case 'r': // we start and end with the root node
+
141  // should we be hitting the root node?
+
142  return false;
+
143  default:
+
144  return false;
+
145  }
+
146  }
+
147  tape_val = tape[tape_idx];
+
148  payload = tape_val & internal::JSON_VALUE_MASK;
+
149  type = uint8_t(tape_val >> 56);
+
150  os << tape_idx << " : " << type << "\t// pointing to " << payload
+
151  << " (start root)\n";
+
152  return true;
+
153 }
+
154 
+
155 } // namespace dom
+
156 } // namespace simdjson
+
157 
+
158 #endif // SIMDJSON_INLINE_DOCUMENT_H
+
element root() const noexcept
Get the root element of this document as a JSON array.
Definition: document-inl.h:19
+
A JSON element.
Definition: element.h:40
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/dom_2document_8h_source.html b/dom_2document_8h_source.html new file mode 100644 index 000000000..bc355f360 --- /dev/null +++ b/dom_2document_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: include/simdjson/dom/document.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document.h
+
+
+
1 #ifndef SIMDJSON_DOM_DOCUMENT_H
+
2 #define SIMDJSON_DOM_DOCUMENT_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include <memory>
+
6 #include <ostream>
+
7 
+
8 namespace simdjson {
+
9 namespace dom {
+
10 
+
11 class element;
+
12 
+
18 class document {
+
19 public:
+
25  document() noexcept = default;
+
26  ~document() noexcept = default;
+
27 
+
33  document(document &&other) noexcept = default;
+
35  document(const document &) = delete; // Disallow copying
+
41  document &operator=(document &&other) noexcept = default;
+
43  document &operator=(const document &) = delete; // Disallow copying
+
44 
+
48  element root() const noexcept;
+
49 
+
56  bool dump_raw_tape(std::ostream &os) const noexcept;
+
57 
+
59  std::unique_ptr<uint64_t[]> tape{};
+
60 
+
65  std::unique_ptr<uint8_t[]> string_buf{};
+
77  error_code allocate(size_t len) noexcept;
+
82  size_t capacity() const noexcept;
+
83 
+
84 
+
85 private:
+
86  size_t allocated_capacity{0};
+
87  friend class parser;
+
88 }; // class document
+
89 
+
90 } // namespace dom
+
91 } // namespace simdjson
+
92 
+
93 #endif // SIMDJSON_DOM_DOCUMENT_H
+
A parsed JSON document.
Definition: document.h:18
+
document() noexcept=default
Create a document container with zero capacity.
+
element root() const noexcept
Get the root element of this document as a JSON array.
Definition: document-inl.h:19
+
A JSON element.
Definition: element.h:40
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
+
+ + + + diff --git a/dom_2document__stream-inl_8h_source.html b/dom_2document__stream-inl_8h_source.html new file mode 100644 index 000000000..95877ec2e --- /dev/null +++ b/dom_2document__stream-inl_8h_source.html @@ -0,0 +1,464 @@ + + + + + + + +simdjson: include/simdjson/dom/document_stream-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document_stream-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_DOCUMENT_STREAM_H
+
2 #define SIMDJSON_INLINE_DOCUMENT_STREAM_H
+
3 
+
4 #include "simdjson/dom/document_stream.h"
+
5 #include <algorithm>
+
6 #include <limits>
+
7 #include <stdexcept>
+
8 namespace simdjson {
+
9 namespace dom {
+
10 
+
11 #ifdef SIMDJSON_THREADS_ENABLED
+
12 inline void stage1_worker::finish() {
+
13  // After calling "run" someone would call finish() to wait
+
14  // for the end of the processing.
+
15  // This function will wait until either the thread has done
+
16  // the processing or, else, the destructor has been called.
+
17  std::unique_lock<std::mutex> lock(locking_mutex);
+
18  cond_var.wait(lock, [this]{return has_work == false;});
+
19 }
+
20 
+
21 inline stage1_worker::~stage1_worker() {
+
22  // The thread may never outlive the stage1_worker instance
+
23  // and will always be stopped/joined before the stage1_worker
+
24  // instance is gone.
+
25  stop_thread();
+
26 }
+
27 
+
28 inline void stage1_worker::start_thread() {
+
29  std::unique_lock<std::mutex> lock(locking_mutex);
+
30  if(thread.joinable()) {
+
31  return; // This should never happen but we never want to create more than one thread.
+
32  }
+
33  thread = std::thread([this]{
+
34  while(true) {
+
35  std::unique_lock<std::mutex> thread_lock(locking_mutex);
+
36  // We wait for either "run" or "stop_thread" to be called.
+
37  cond_var.wait(thread_lock, [this]{return has_work || !can_work;});
+
38  // If, for some reason, the stop_thread() method was called (i.e., the
+
39  // destructor of stage1_worker is called, then we want to immediately destroy
+
40  // the thread (and not do any more processing).
+
41  if(!can_work) {
+
42  break;
+
43  }
+
44  this->owner->stage1_thread_error = this->owner->run_stage1(*this->stage1_thread_parser,
+
45  this->_next_batch_start);
+
46  this->has_work = false;
+
47  // The condition variable call should be moved after thread_lock.unlock() for performance
+
48  // reasons but thread sanitizers may report it as a data race if we do.
+
49  // See https://stackoverflow.com/questions/35775501/c-should-condition-variable-be-notified-under-lock
+
50  cond_var.notify_one(); // will notify "finish"
+
51  thread_lock.unlock();
+
52  }
+
53  }
+
54  );
+
55 }
+
56 
+
57 
+
58 inline void stage1_worker::stop_thread() {
+
59  std::unique_lock<std::mutex> lock(locking_mutex);
+
60  // We have to make sure that all locks can be released.
+
61  can_work = false;
+
62  has_work = false;
+
63  cond_var.notify_all();
+
64  lock.unlock();
+
65  if(thread.joinable()) {
+
66  thread.join();
+
67  }
+
68 }
+
69 
+
70 inline void stage1_worker::run(document_stream * ds, dom::parser * stage1, size_t next_batch_start) {
+
71  std::unique_lock<std::mutex> lock(locking_mutex);
+
72  owner = ds;
+
73  _next_batch_start = next_batch_start;
+
74  stage1_thread_parser = stage1;
+
75  has_work = true;
+
76  // The condition variable call should be moved after thread_lock.unlock() for performance
+
77  // reasons but thread sanitizers may report it as a data race if we do.
+
78  // See https://stackoverflow.com/questions/35775501/c-should-condition-variable-be-notified-under-lock
+
79  cond_var.notify_one(); // will notify the thread lock that we have work
+
80  lock.unlock();
+
81 }
+
82 #endif
+
83 
+
84 simdjson_inline document_stream::document_stream(
+
85  dom::parser &_parser,
+
86  const uint8_t *_buf,
+
87  size_t _len,
+
88  size_t _batch_size
+
89 ) noexcept
+
90  : parser{&_parser},
+
91  buf{_buf},
+
92  len{_len},
+
93  batch_size{_batch_size <= MINIMAL_BATCH_SIZE ? MINIMAL_BATCH_SIZE : _batch_size},
+
94  error{SUCCESS}
+
95 #ifdef SIMDJSON_THREADS_ENABLED
+
96  , use_thread(_parser.threaded) // we need to make a copy because _parser.threaded can change
+
97 #endif
+
98 {
+
99 #ifdef SIMDJSON_THREADS_ENABLED
+
100  if(worker.get() == nullptr) {
+
101  error = MEMALLOC;
+
102  }
+
103 #endif
+
104 }
+
105 
+
106 simdjson_inline document_stream::document_stream() noexcept
+
107  : parser{nullptr},
+
108  buf{nullptr},
+
109  len{0},
+
110  batch_size{0},
+
111  error{UNINITIALIZED}
+
112 #ifdef SIMDJSON_THREADS_ENABLED
+
113  , use_thread(false)
+
114 #endif
+
115 {
+
116 }
+
117 
+
118 simdjson_inline document_stream::~document_stream() noexcept {
+
119 #ifdef SIMDJSON_THREADS_ENABLED
+
120  worker.reset();
+
121 #endif
+
122 }
+
123 
+
124 simdjson_inline document_stream::iterator::iterator() noexcept
+
125  : stream{nullptr}, finished{true} {
+
126 }
+
127 
+ +
129  start();
+
130  // If there are no documents, we're finished.
+
131  return iterator(this, error == EMPTY);
+
132 }
+
133 
+ +
135  return iterator(this, true);
+
136 }
+
137 
+
138 simdjson_inline document_stream::iterator::iterator(document_stream* _stream, bool is_end) noexcept
+
139  : stream{_stream}, finished{is_end} {
+
140 }
+
141 
+ +
143  // Note that in case of error, we do not yet mark
+
144  // the iterator as "finished": this detection is done
+
145  // in the operator++ function since it is possible
+
146  // to call operator++ repeatedly while omitting
+
147  // calls to operator*.
+
148  if (stream->error) { return stream->error; }
+
149  return stream->parser->doc.root();
+
150 }
+
151 
+ +
153  // If there is an error, then we want the iterator
+
154  // to be finished, no matter what. (E.g., we do not
+
155  // keep generating documents with errors, or go beyond
+
156  // a document with errors.)
+
157  //
+
158  // Users do not have to call "operator*()" when they use operator++,
+
159  // so we need to end the stream in the operator++ function.
+
160  //
+
161  // Note that setting finished = true is essential otherwise
+
162  // we would enter an infinite loop.
+
163  if (stream->error) { finished = true; }
+
164  // Note that stream->error() is guarded against error conditions
+
165  // (it will immediately return if stream->error casts to false).
+
166  // In effect, this next function does nothing when (stream->error)
+
167  // is true (hence the risk of an infinite loop).
+
168  stream->next();
+
169  // If that was the last document, we're finished.
+
170  // It is the only type of error we do not want to appear
+
171  // in operator*.
+
172  if (stream->error == EMPTY) { finished = true; }
+
173  // If we had any other kind of error (not EMPTY) then we want
+
174  // to pass it along to the operator* and we cannot mark the result
+
175  // as "finished" just yet.
+
176  return *this;
+
177 }
+
178 
+
179 simdjson_inline bool document_stream::iterator::operator!=(const document_stream::iterator &other) const noexcept {
+
180  return finished != other.finished;
+
181 }
+
182 
+
183 inline void document_stream::start() noexcept {
+
184  if (error) { return; }
+
185  error = parser->ensure_capacity(batch_size);
+
186  if (error) { return; }
+
187  // Always run the first stage 1 parse immediately
+
188  batch_start = 0;
+
189  error = run_stage1(*parser, batch_start);
+
190  while(error == EMPTY) {
+
191  // In exceptional cases, we may start with an empty block
+
192  batch_start = next_batch_start();
+
193  if (batch_start >= len) { return; }
+
194  error = run_stage1(*parser, batch_start);
+
195  }
+
196  if (error) { return; }
+
197 #ifdef SIMDJSON_THREADS_ENABLED
+
198  if (use_thread && next_batch_start() < len) {
+
199  // Kick off the first thread if needed
+
200  error = stage1_thread_parser.ensure_capacity(batch_size);
+
201  if (error) { return; }
+
202  worker->start_thread();
+
203  start_stage1_thread();
+
204  if (error) { return; }
+
205  }
+
206 #endif // SIMDJSON_THREADS_ENABLED
+
207  next();
+
208 }
+
209 
+
210 simdjson_inline size_t document_stream::iterator::current_index() const noexcept {
+
211  return stream->doc_index;
+
212 }
+
213 
+
214 simdjson_inline std::string_view document_stream::iterator::source() const noexcept {
+
215  const char* start = reinterpret_cast<const char*>(stream->buf) + current_index();
+
216  bool object_or_array = ((*start == '[') || (*start == '{'));
+
217  if(object_or_array) {
+
218  size_t next_doc_index = stream->batch_start + stream->parser->implementation->structural_indexes[stream->parser->implementation->next_structural_index - 1];
+
219  return std::string_view(start, next_doc_index - current_index() + 1);
+
220  } else {
+
221  size_t next_doc_index = stream->batch_start + stream->parser->implementation->structural_indexes[stream->parser->implementation->next_structural_index];
+
222  return std::string_view(reinterpret_cast<const char*>(stream->buf) + current_index(), next_doc_index - current_index() - 1);
+
223  }
+
224 }
+
225 
+
226 
+
227 inline void document_stream::next() noexcept {
+
228  // We always exit at once, once in an error condition.
+
229  if (error) { return; }
+
230 
+
231  // Load the next document from the batch
+
232  doc_index = batch_start + parser->implementation->structural_indexes[parser->implementation->next_structural_index];
+
233  error = parser->implementation->stage2_next(parser->doc);
+
234  // If that was the last document in the batch, load another batch (if available)
+
235  while (error == EMPTY) {
+
236  batch_start = next_batch_start();
+
237  if (batch_start >= len) { break; }
+
238 
+
239 #ifdef SIMDJSON_THREADS_ENABLED
+
240  if(use_thread) {
+
241  load_from_stage1_thread();
+
242  } else {
+
243  error = run_stage1(*parser, batch_start);
+
244  }
+
245 #else
+
246  error = run_stage1(*parser, batch_start);
+
247 #endif
+
248  if (error) { continue; } // If the error was EMPTY, we may want to load another batch.
+
249  // Run stage 2 on the first document in the batch
+
250  doc_index = batch_start + parser->implementation->structural_indexes[parser->implementation->next_structural_index];
+
251  error = parser->implementation->stage2_next(parser->doc);
+
252  }
+
253 }
+
254 inline size_t document_stream::size_in_bytes() const noexcept {
+
255  return len;
+
256 }
+
257 
+
258 inline size_t document_stream::truncated_bytes() const noexcept {
+
259  if(error == CAPACITY) { return len - batch_start; }
+
260  return parser->implementation->structural_indexes[parser->implementation->n_structural_indexes] - parser->implementation->structural_indexes[parser->implementation->n_structural_indexes + 1];
+
261 }
+
262 
+
263 inline size_t document_stream::next_batch_start() const noexcept {
+
264  return batch_start + parser->implementation->structural_indexes[parser->implementation->n_structural_indexes];
+
265 }
+
266 
+
267 inline error_code document_stream::run_stage1(dom::parser &p, size_t _batch_start) noexcept {
+
268  size_t remaining = len - _batch_start;
+
269  if (remaining <= batch_size) {
+
270  return p.implementation->stage1(&buf[_batch_start], remaining, stage1_mode::streaming_final);
+
271  } else {
+
272  return p.implementation->stage1(&buf[_batch_start], batch_size, stage1_mode::streaming_partial);
+
273  }
+
274 }
+
275 
+
276 #ifdef SIMDJSON_THREADS_ENABLED
+
277 
+
278 inline void document_stream::load_from_stage1_thread() noexcept {
+
279  worker->finish();
+
280  // Swap to the parser that was loaded up in the thread. Make sure the parser has
+
281  // enough memory to swap to, as well.
+
282  std::swap(*parser, stage1_thread_parser);
+
283  error = stage1_thread_error;
+
284  if (error) { return; }
+
285 
+
286  // If there's anything left, start the stage 1 thread!
+
287  if (next_batch_start() < len) {
+
288  start_stage1_thread();
+
289  }
+
290 }
+
291 
+
292 inline void document_stream::start_stage1_thread() noexcept {
+
293  // we call the thread on a lambda that will update
+
294  // this->stage1_thread_error
+
295  // there is only one thread that may write to this value
+
296  // TODO this is NOT exception-safe.
+
297  this->stage1_thread_error = UNINITIALIZED; // In case something goes wrong, make sure it's an error
+
298  size_t _next_batch_start = this->next_batch_start();
+
299 
+
300  worker->run(this, & this->stage1_thread_parser, _next_batch_start);
+
301 }
+
302 
+
303 #endif // SIMDJSON_THREADS_ENABLED
+
304 
+
305 } // namespace dom
+
306 
+
307 simdjson_inline simdjson_result<dom::document_stream>::simdjson_result() noexcept
+
308  : simdjson_result_base() {
+
309 }
+
310 simdjson_inline simdjson_result<dom::document_stream>::simdjson_result(error_code error) noexcept
+
311  : simdjson_result_base(error) {
+
312 }
+
313 simdjson_inline simdjson_result<dom::document_stream>::simdjson_result(dom::document_stream &&value) noexcept
+
314  : simdjson_result_base(std::forward<dom::document_stream>(value)) {
+
315 }
+
316 
+
317 #if SIMDJSON_EXCEPTIONS
+
318 simdjson_inline dom::document_stream::iterator simdjson_result<dom::document_stream>::begin() noexcept(false) {
+
319  if (error()) { throw simdjson_error(error()); }
+
320  return first.begin();
+
321 }
+
322 simdjson_inline dom::document_stream::iterator simdjson_result<dom::document_stream>::end() noexcept(false) {
+
323  if (error()) { throw simdjson_error(error()); }
+
324  return first.end();
+
325 }
+
326 #else // SIMDJSON_EXCEPTIONS
+
327 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
328 simdjson_inline dom::document_stream::iterator simdjson_result<dom::document_stream>::begin() noexcept {
+
329  first.error = error();
+
330  return first.begin();
+
331 }
+
332 simdjson_inline dom::document_stream::iterator simdjson_result<dom::document_stream>::end() noexcept {
+
333  first.error = error();
+
334  return first.end();
+
335 }
+
336 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
337 #endif // SIMDJSON_EXCEPTIONS
+
338 
+
339 } // namespace simdjson
+
340 #endif // SIMDJSON_INLINE_DOCUMENT_STREAM_H
+
An iterator through a forward-only stream of documents.
+
simdjson_inline reference operator*() noexcept
Get the current document (or error).
+
simdjson_inline bool operator!=(const iterator &other) const noexcept
Check if we're at the end yet.
+
simdjson_inline iterator() noexcept
Default constructor.
+
iterator & operator++() noexcept
Advance to the next document (prefix).
+
A forward-only stream of documents.
+
size_t size_in_bytes() const noexcept
Returns the input size in bytes.
+
size_t truncated_bytes() const noexcept
After iterating through the stream, this method returns the number of bytes that were not parsed at t...
+
simdjson_inline iterator begin() noexcept
Start iterating the documents in the stream.
+
simdjson_inline iterator end() noexcept
The end of the stream, for iterator comparison purposes.
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+
A persistent document parser.
Definition: parser.h:58
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ EMPTY
no structural element found
Definition: error.h:30
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/dom_2document__stream_8h_source.html b/dom_2document__stream_8h_source.html new file mode 100644 index 000000000..aaf489243 --- /dev/null +++ b/dom_2document__stream_8h_source.html @@ -0,0 +1,270 @@ + + + + + + + +simdjson: include/simdjson/dom/document_stream.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document_stream.h
+
+
+
1 #ifndef SIMDJSON_DOCUMENT_STREAM_H
+
2 #define SIMDJSON_DOCUMENT_STREAM_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/dom/parser.h"
+
6 #include "simdjson/error.h"
+
7 #ifdef SIMDJSON_THREADS_ENABLED
+
8 #include <thread>
+
9 #include <mutex>
+
10 #include <condition_variable>
+
11 #endif
+
12 
+
13 namespace simdjson {
+
14 namespace dom {
+
15 
+
16 
+
17 #ifdef SIMDJSON_THREADS_ENABLED
+
19 struct stage1_worker {
+
20  stage1_worker() noexcept = default;
+
21  stage1_worker(const stage1_worker&) = delete;
+
22  stage1_worker(stage1_worker&&) = delete;
+
23  stage1_worker operator=(const stage1_worker&) = delete;
+
24  ~stage1_worker();
+
29  void start_thread();
+
34  void run(document_stream * ds, dom::parser * stage1, size_t next_batch_start);
+
36  void finish();
+
37 
+
38 private:
+
39 
+
45  void stop_thread();
+
46 
+
47  std::thread thread{};
+
49  dom::parser * stage1_thread_parser{};
+
50  size_t _next_batch_start{};
+
51  document_stream * owner{};
+
56  bool has_work{false};
+
57  bool can_work{true};
+
58 
+
62  std::mutex locking_mutex{};
+
63  std::condition_variable cond_var{};
+
64 };
+
65 #endif
+
66 
+ +
74 public:
+
83  simdjson_inline document_stream() noexcept;
+
85  simdjson_inline document_stream(document_stream &&other) noexcept = default;
+
87  simdjson_inline document_stream &operator=(document_stream &&other) noexcept = default;
+
88 
+
89  simdjson_inline ~document_stream() noexcept;
+
93  inline size_t size_in_bytes() const noexcept;
+
112  inline size_t truncated_bytes() const noexcept;
+
116  class iterator {
+
117  public:
+ +
119  using reference = value_type;
+
120 
+
121  using difference_type = std::ptrdiff_t;
+
122 
+
123  using iterator_category = std::input_iterator_tag;
+
124 
+
128  simdjson_inline iterator() noexcept;
+
132  simdjson_inline reference operator*() noexcept;
+
136  inline iterator& operator++() noexcept;
+
141  simdjson_inline bool operator!=(const iterator &other) const noexcept;
+
157  simdjson_inline size_t current_index() const noexcept;
+
177  simdjson_inline std::string_view source() const noexcept;
+
178 
+
179  private:
+
180  simdjson_inline iterator(document_stream *s, bool finished) noexcept;
+
182  document_stream* stream;
+
184  bool finished;
+
185  friend class document_stream;
+
186  };
+
187 
+
191  simdjson_inline iterator begin() noexcept;
+
195  simdjson_inline iterator end() noexcept;
+
196 
+
197 private:
+
198 
+
199  document_stream &operator=(const document_stream &) = delete; // Disallow copying
+
200  document_stream(const document_stream &other) = delete; // Disallow copying
+
201 
+
211  simdjson_inline document_stream(
+
212  dom::parser &parser,
+
213  const uint8_t *buf,
+
214  size_t len,
+
215  size_t batch_size
+
216  ) noexcept;
+
217 
+
222  inline void start() noexcept;
+
223 
+
248  inline void next() noexcept;
+
249 
+
254  inline void load_batch() noexcept;
+
255 
+
257  inline size_t next_batch_start() const noexcept;
+
258 
+
260  inline error_code run_stage1(dom::parser &p, size_t batch_start) noexcept;
+
261 
+
262  dom::parser *parser;
+
263  const uint8_t *buf;
+
264  size_t len;
+
265  size_t batch_size;
+
267  error_code error;
+
268  size_t batch_start{0};
+
269  size_t doc_index{};
+
270 #ifdef SIMDJSON_THREADS_ENABLED
+
272  bool use_thread;
+
273 
+
274  inline void load_from_stage1_thread() noexcept;
+
275 
+
277  inline void start_stage1_thread() noexcept;
+
278 
+
280  inline void finish_stage1_thread() noexcept;
+
281 
+
283  error_code stage1_thread_error{UNINITIALIZED};
+
285  friend struct stage1_worker;
+
286  std::unique_ptr<stage1_worker> worker{new(std::nothrow) stage1_worker()};
+
291  dom::parser stage1_thread_parser{};
+
292 #endif // SIMDJSON_THREADS_ENABLED
+
293 
+
294  friend class dom::parser;
+
295  friend struct simdjson_result<dom::document_stream>;
+
296  friend struct internal::simdjson_result_base<dom::document_stream>;
+
297 
+
298 }; // class document_stream
+
299 
+
300 } // namespace dom
+
301 
+
302 template<>
+
303 struct simdjson_result<dom::document_stream> : public internal::simdjson_result_base<dom::document_stream> {
+
304 public:
+
305  simdjson_inline simdjson_result() noexcept;
+
306  simdjson_inline simdjson_result(error_code error) noexcept;
+
307  simdjson_inline simdjson_result(dom::document_stream &&value) noexcept;
+
308 
+
309 #if SIMDJSON_EXCEPTIONS
+
310  simdjson_inline dom::document_stream::iterator begin() noexcept(false);
+
311  simdjson_inline dom::document_stream::iterator end() noexcept(false);
+
312 #else // SIMDJSON_EXCEPTIONS
+
313 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
314  [[deprecated("parse_many() and load_many() may return errors. Use document_stream stream; error = parser.parse_many().get(doc); instead.")]]
+
315  simdjson_inline dom::document_stream::iterator begin() noexcept;
+
316  [[deprecated("parse_many() and load_many() may return errors. Use document_stream stream; error = parser.parse_many().get(doc); instead.")]]
+
317  simdjson_inline dom::document_stream::iterator end() noexcept;
+
318 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
319 #endif // SIMDJSON_EXCEPTIONS
+
320 }; // struct simdjson_result<dom::document_stream>
+
321 
+
322 } // namespace simdjson
+
323 
+
324 #endif // SIMDJSON_DOCUMENT_STREAM_H
+
An iterator through a forward-only stream of documents.
+
A forward-only stream of documents.
+
simdjson_inline document_stream & operator=(document_stream &&other) noexcept=default
Move one document_stream to another.
+
size_t size_in_bytes() const noexcept
Returns the input size in bytes.
+
size_t truncated_bytes() const noexcept
After iterating through the stream, this method returns the number of bytes that were not parsed at t...
+
simdjson_inline iterator begin() noexcept
Start iterating the documents in the stream.
+
simdjson_inline document_stream(document_stream &&other) noexcept=default
Move one document_stream to another.
+
simdjson_inline iterator end() noexcept
The end of the stream, for iterator comparison purposes.
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+
A persistent document parser.
Definition: parser.h:58
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/dom_2object-inl_8h_source.html b/dom_2object-inl_8h_source.html new file mode 100644 index 000000000..1d1a5054b --- /dev/null +++ b/dom_2object-inl_8h_source.html @@ -0,0 +1,372 @@ + + + + + + + +simdjson: include/simdjson/dom/object-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
object-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_OBJECT_H
+
2 #define SIMDJSON_INLINE_OBJECT_H
+
3 
+
4 #include "simdjson/dom/element.h"
+
5 #include "simdjson/dom/object.h"
+
6 #include "simdjson/portability.h"
+
7 #include <cstring>
+
8 #include <string>
+
9 
+
10 namespace simdjson {
+
11 
+
12 //
+
13 // simdjson_result<dom::object> inline implementation
+
14 //
+
15 simdjson_inline simdjson_result<dom::object>::simdjson_result() noexcept
+
16  : internal::simdjson_result_base<dom::object>() {}
+
17 simdjson_inline simdjson_result<dom::object>::simdjson_result(dom::object value) noexcept
+
18  : internal::simdjson_result_base<dom::object>(std::forward<dom::object>(value)) {}
+
19 simdjson_inline simdjson_result<dom::object>::simdjson_result(error_code error) noexcept
+
20  : internal::simdjson_result_base<dom::object>(error) {}
+
21 
+
22 inline simdjson_result<dom::element> simdjson_result<dom::object>::operator[](std::string_view key) const noexcept {
+
23  if (error()) { return error(); }
+
24  return first[key];
+
25 }
+
26 inline simdjson_result<dom::element> simdjson_result<dom::object>::operator[](const char *key) const noexcept {
+
27  if (error()) { return error(); }
+
28  return first[key];
+
29 }
+
30 inline simdjson_result<dom::element> simdjson_result<dom::object>::at_pointer(std::string_view json_pointer) const noexcept {
+
31  if (error()) { return error(); }
+
32  return first.at_pointer(json_pointer);
+
33 }
+
34 inline simdjson_result<dom::element> simdjson_result<dom::object>::at_key(std::string_view key) const noexcept {
+
35  if (error()) { return error(); }
+
36  return first.at_key(key);
+
37 }
+
38 inline simdjson_result<dom::element> simdjson_result<dom::object>::at_key_case_insensitive(std::string_view key) const noexcept {
+
39  if (error()) { return error(); }
+
40  return first.at_key_case_insensitive(key);
+
41 }
+
42 
+
43 #if SIMDJSON_EXCEPTIONS
+
44 
+
45 inline dom::object::iterator simdjson_result<dom::object>::begin() const noexcept(false) {
+
46  if (error()) { throw simdjson_error(error()); }
+
47  return first.begin();
+
48 }
+
49 inline dom::object::iterator simdjson_result<dom::object>::end() const noexcept(false) {
+
50  if (error()) { throw simdjson_error(error()); }
+
51  return first.end();
+
52 }
+
53 inline size_t simdjson_result<dom::object>::size() const noexcept(false) {
+
54  if (error()) { throw simdjson_error(error()); }
+
55  return first.size();
+
56 }
+
57 
+
58 #endif // SIMDJSON_EXCEPTIONS
+
59 
+
60 namespace dom {
+
61 
+
62 //
+
63 // object inline implementation
+
64 //
+
65 simdjson_inline object::object() noexcept : tape{} {}
+
66 simdjson_inline object::object(const internal::tape_ref &_tape) noexcept : tape{_tape} { }
+
67 inline object::iterator object::begin() const noexcept {
+
68  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
69  return internal::tape_ref(tape.doc, tape.json_index + 1);
+
70 }
+
71 inline object::iterator object::end() const noexcept {
+
72  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
73  return internal::tape_ref(tape.doc, tape.after_element() - 1);
+
74 }
+
75 inline size_t object::size() const noexcept {
+
76  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
77  return tape.scope_count();
+
78 }
+
79 
+
80 inline simdjson_result<element> object::operator[](std::string_view key) const noexcept {
+
81  return at_key(key);
+
82 }
+
83 inline simdjson_result<element> object::operator[](const char *key) const noexcept {
+
84  return at_key(key);
+
85 }
+
86 inline simdjson_result<element> object::at_pointer(std::string_view json_pointer) const noexcept {
+
87  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
88  if(json_pointer.empty()) { // an empty string means that we return the current node
+
89  return element(this->tape); // copy the current node
+
90  } else if(json_pointer[0] != '/') { // otherwise there is an error
+
91  return INVALID_JSON_POINTER;
+
92  }
+
93  json_pointer = json_pointer.substr(1);
+
94  size_t slash = json_pointer.find('/');
+
95  std::string_view key = json_pointer.substr(0, slash);
+
96  // Grab the child with the given key
+ +
98 
+
99  // If there is an escape character in the key, unescape it and then get the child.
+
100  size_t escape = key.find('~');
+
101  if (escape != std::string_view::npos) {
+
102  // Unescape the key
+
103  std::string unescaped(key);
+
104  do {
+
105  switch (unescaped[escape+1]) {
+
106  case '0':
+
107  unescaped.replace(escape, 2, "~");
+
108  break;
+
109  case '1':
+
110  unescaped.replace(escape, 2, "/");
+
111  break;
+
112  default:
+
113  return INVALID_JSON_POINTER; // "Unexpected ~ escape character in JSON pointer");
+
114  }
+
115  escape = unescaped.find('~', escape+1);
+
116  } while (escape != std::string::npos);
+
117  child = at_key(unescaped);
+
118  } else {
+
119  child = at_key(key);
+
120  }
+
121  if(child.error()) {
+
122  return child; // we do not continue if there was an error
+
123  }
+
124  // If there is a /, we have to recurse and look up more of the path
+
125  if (slash != std::string_view::npos) {
+
126  child = child.at_pointer(json_pointer.substr(slash));
+
127  }
+
128  return child;
+
129 }
+
130 
+
131 inline simdjson_result<element> object::at_key(std::string_view key) const noexcept {
+
132  iterator end_field = end();
+
133  for (iterator field = begin(); field != end_field; ++field) {
+
134  if (field.key_equals(key)) {
+
135  return field.value();
+
136  }
+
137  }
+
138  return NO_SUCH_FIELD;
+
139 }
+
140 // In case you wonder why we need this, please see
+
141 // https://github.com/simdjson/simdjson/issues/323
+
142 // People do seek keys in a case-insensitive manner.
+
143 inline simdjson_result<element> object::at_key_case_insensitive(std::string_view key) const noexcept {
+
144  iterator end_field = end();
+
145  for (iterator field = begin(); field != end_field; ++field) {
+
146  if (field.key_equals_case_insensitive(key)) {
+
147  return field.value();
+
148  }
+
149  }
+
150  return NO_SUCH_FIELD;
+
151 }
+
152 
+
153 //
+
154 // object::iterator inline implementation
+
155 //
+
156 simdjson_inline object::iterator::iterator(const internal::tape_ref &_tape) noexcept : tape{_tape} { }
+
157 inline const key_value_pair object::iterator::operator*() const noexcept {
+
158  return key_value_pair(key(), value());
+
159 }
+
160 inline bool object::iterator::operator!=(const object::iterator& other) const noexcept {
+
161  return tape.json_index != other.tape.json_index;
+
162 }
+
163 inline bool object::iterator::operator==(const object::iterator& other) const noexcept {
+
164  return tape.json_index == other.tape.json_index;
+
165 }
+
166 inline bool object::iterator::operator<(const object::iterator& other) const noexcept {
+
167  return tape.json_index < other.tape.json_index;
+
168 }
+
169 inline bool object::iterator::operator<=(const object::iterator& other) const noexcept {
+
170  return tape.json_index <= other.tape.json_index;
+
171 }
+
172 inline bool object::iterator::operator>=(const object::iterator& other) const noexcept {
+
173  return tape.json_index >= other.tape.json_index;
+
174 }
+
175 inline bool object::iterator::operator>(const object::iterator& other) const noexcept {
+
176  return tape.json_index > other.tape.json_index;
+
177 }
+ +
179  tape.json_index++;
+
180  tape.json_index = tape.after_element();
+
181  return *this;
+
182 }
+ +
184  object::iterator out = *this;
+
185  ++*this;
+
186  return out;
+
187 }
+
188 inline std::string_view object::iterator::key() const noexcept {
+
189  return tape.get_string_view();
+
190 }
+
191 inline uint32_t object::iterator::key_length() const noexcept {
+
192  return tape.get_string_length();
+
193 }
+
194 inline const char* object::iterator::key_c_str() const noexcept {
+
195  return reinterpret_cast<const char *>(&tape.doc->string_buf[size_t(tape.tape_value()) + sizeof(uint32_t)]);
+
196 }
+
197 inline element object::iterator::value() const noexcept {
+
198  return element(internal::tape_ref(tape.doc, tape.json_index + 1));
+
199 }
+
200 
+
214 inline bool object::iterator::key_equals(std::string_view o) const noexcept {
+
215  // We use the fact that the key length can be computed quickly
+
216  // without access to the string buffer.
+
217  const uint32_t len = key_length();
+
218  if(o.size() == len) {
+
219  // We avoid construction of a temporary string_view instance.
+
220  return (memcmp(o.data(), key_c_str(), len) == 0);
+
221  }
+
222  return false;
+
223 }
+
224 
+
225 inline bool object::iterator::key_equals_case_insensitive(std::string_view o) const noexcept {
+
226  // We use the fact that the key length can be computed quickly
+
227  // without access to the string buffer.
+
228  const uint32_t len = key_length();
+
229  if(o.size() == len) {
+
230  // See For case-insensitive string comparisons, avoid char-by-char functions
+
231  // https://lemire.me/blog/2020/04/30/for-case-insensitive-string-comparisons-avoid-char-by-char-functions/
+
232  // Note that it might be worth rolling our own strncasecmp function, with vectorization.
+
233  return (simdjson_strncasecmp(o.data(), key_c_str(), len) == 0);
+
234  }
+
235  return false;
+
236 }
+
237 //
+
238 // key_value_pair inline implementation
+
239 //
+
240 inline key_value_pair::key_value_pair(std::string_view _key, element _value) noexcept :
+
241  key(_key), value(_value) {}
+
242 
+
243 } // namespace dom
+
244 
+
245 } // namespace simdjson
+
246 
+
247 #if defined(__cpp_lib_ranges)
+
248 static_assert(std::ranges::view<simdjson::dom::object>);
+
249 static_assert(std::ranges::sized_range<simdjson::dom::object>);
+
250 #if SIMDJSON_EXCEPTIONS
+
251 static_assert(std::ranges::view<simdjson::simdjson_result<simdjson::dom::object>>);
+
252 static_assert(std::ranges::sized_range<simdjson::simdjson_result<simdjson::dom::object>>);
+
253 #endif // SIMDJSON_EXCEPTIONS
+
254 #endif // defined(__cpp_lib_ranges)
+
255 
+
256 #endif // SIMDJSON_INLINE_OBJECT_H
+
A JSON element.
Definition: element.h:40
+
Key/value pair in an object.
Definition: object.h:222
+ +
bool operator!=(const iterator &other) const noexcept
Check if these values come from the same place in the JSON.
Definition: object-inl.h:160
+
element value() const noexcept
Get the value of this key/value pair.
Definition: object-inl.h:197
+
bool key_equals(std::string_view o) const noexcept
Returns true if the key in this key/value pair is equal to the provided string_view.
Definition: object-inl.h:214
+
const char * key_c_str() const noexcept
Get the key of this key/value pair.
Definition: object-inl.h:194
+
uint32_t key_length() const noexcept
Get the length (in bytes) of the key in this key/value pair.
Definition: object-inl.h:191
+
const value_type operator*() const noexcept
Get the actual key/value pair.
Definition: object-inl.h:157
+
bool key_equals_case_insensitive(std::string_view o) const noexcept
Returns true if the key in this key/value pair is equal to the provided string_view in a case-insensi...
Definition: object-inl.h:225
+
std::string_view key() const noexcept
Get the key of this key/value pair.
Definition: object-inl.h:188
+
iterator & operator++() noexcept
Get the next key/value pair.
Definition: object-inl.h:178
+
simdjson_result< element > at_key(std::string_view key) const noexcept
Get the value associated with the given key.
Definition: object-inl.h:131
+
iterator end() const noexcept
One past the last key/value pair.
Definition: object-inl.h:71
+
size_t size() const noexcept
Get the size of the object (number of keys).
Definition: object-inl.h:75
+
simdjson_result< element > at_key_case_insensitive(std::string_view key) const noexcept
Get the value associated with the given key in a case-insensitive manner.
Definition: object-inl.h:143
+
simdjson_result< element > operator[](std::string_view key) const noexcept
Get the value associated with the given key.
Definition: object-inl.h:80
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: object-inl.h:86
+
simdjson_inline object() noexcept
Create a new, invalid object.
Definition: object-inl.h:65
+
iterator begin() const noexcept
Return the first key/value pair.
Definition: object-inl.h:67
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ NO_SUCH_FIELD
JSON field not found in object.
Definition: error.h:37
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/dom_2object_8h_source.html b/dom_2object_8h_source.html new file mode 100644 index 000000000..9dd13371a --- /dev/null +++ b/dom_2object_8h_source.html @@ -0,0 +1,258 @@ + + + + + + + +simdjson: include/simdjson/dom/object.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
object.h
+
+
+
1 #ifndef SIMDJSON_DOM_OBJECT_H
+
2 #define SIMDJSON_DOM_OBJECT_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/error.h"
+
6 #include "simdjson/internal/tape_ref.h"
+
7 
+
8 namespace simdjson {
+
9 namespace internal {
+
10 template<typename T>
+
11 class string_builder;
+
12 }
+
13 namespace dom {
+
14 
+
15 class document;
+
16 class element;
+
17 class key_value_pair;
+
18 
+
22 class object {
+
23 public:
+
25  simdjson_inline object() noexcept;
+
26 
+
27  class iterator {
+
28  public:
+
29  using value_type = key_value_pair;
+
30  using difference_type = std::ptrdiff_t;
+
31 
+
35  inline const value_type operator*() const noexcept;
+
42  inline iterator& operator++() noexcept;
+
49  inline iterator operator++(int) noexcept;
+
55  inline bool operator!=(const iterator& other) const noexcept;
+
56  inline bool operator==(const iterator& other) const noexcept;
+
57 
+
58  inline bool operator<(const iterator& other) const noexcept;
+
59  inline bool operator<=(const iterator& other) const noexcept;
+
60  inline bool operator>=(const iterator& other) const noexcept;
+
61  inline bool operator>(const iterator& other) const noexcept;
+
65  inline std::string_view key() const noexcept;
+
70  inline uint32_t key_length() const noexcept;
+
75  inline bool key_equals(std::string_view o) const noexcept;
+
81  inline bool key_equals_case_insensitive(std::string_view o) const noexcept;
+
85  inline const char *key_c_str() const noexcept;
+
89  inline element value() const noexcept;
+
90 
+
91  iterator() noexcept = default;
+
92  iterator(const iterator&) noexcept = default;
+
93  iterator& operator=(const iterator&) noexcept = default;
+
94  private:
+
95  simdjson_inline iterator(const internal::tape_ref &tape) noexcept;
+
96 
+
97  internal::tape_ref tape;
+
98 
+
99  friend class object;
+
100  };
+
101 
+
107  inline iterator begin() const noexcept;
+
113  inline iterator end() const noexcept;
+
119  inline size_t size() const noexcept;
+
135  inline simdjson_result<element> operator[](std::string_view key) const noexcept;
+
136 
+
152  inline simdjson_result<element> operator[](const char *key) const noexcept;
+
153 
+
177  inline simdjson_result<element> at_pointer(std::string_view json_pointer) const noexcept;
+
178 
+
193  inline simdjson_result<element> at_key(std::string_view key) const noexcept;
+
194 
+
206  inline simdjson_result<element> at_key_case_insensitive(std::string_view key) const noexcept;
+
207 
+
208 private:
+
209  simdjson_inline object(const internal::tape_ref &tape) noexcept;
+
210 
+
211  internal::tape_ref tape;
+
212 
+
213  friend class element;
+
214  friend struct simdjson_result<element>;
+
215  template<typename T>
+
216  friend class simdjson::internal::string_builder;
+
217 };
+
218 
+ +
223 public:
+
225  std::string_view key;
+ +
228 
+
229 private:
+
230  simdjson_inline key_value_pair(std::string_view _key, element _value) noexcept;
+
231  friend class object;
+
232 };
+
233 
+
234 } // namespace dom
+
235 
+
237 template<>
+
238 struct simdjson_result<dom::object> : public internal::simdjson_result_base<dom::object> {
+
239 public:
+
240  simdjson_inline simdjson_result() noexcept;
+
241  simdjson_inline simdjson_result(dom::object value) noexcept;
+
242  simdjson_inline simdjson_result(error_code error) noexcept;
+
243 
+
244  inline simdjson_result<dom::element> operator[](std::string_view key) const noexcept;
+
245  inline simdjson_result<dom::element> operator[](const char *key) const noexcept;
+
246  inline simdjson_result<dom::element> at_pointer(std::string_view json_pointer) const noexcept;
+
247  inline simdjson_result<dom::element> at_key(std::string_view key) const noexcept;
+
248  inline simdjson_result<dom::element> at_key_case_insensitive(std::string_view key) const noexcept;
+
249 
+
250 #if SIMDJSON_EXCEPTIONS
+
251  inline dom::object::iterator begin() const noexcept(false);
+
252  inline dom::object::iterator end() const noexcept(false);
+
253  inline size_t size() const noexcept(false);
+
254 #endif // SIMDJSON_EXCEPTIONS
+
255 };
+
256 
+
257 } // namespace simdjson
+
258 
+
259 #if defined(__cpp_lib_ranges)
+
260 #include <ranges>
+
261 
+
262 namespace std {
+
263 namespace ranges {
+
264 template<>
+
265 inline constexpr bool enable_view<simdjson::dom::object> = true;
+
266 #if SIMDJSON_EXCEPTIONS
+
267 template<>
+
268 inline constexpr bool enable_view<simdjson::simdjson_result<simdjson::dom::object>> = true;
+
269 #endif // SIMDJSON_EXCEPTIONS
+
270 } // namespace ranges
+
271 } // namespace std
+
272 #endif // defined(__cpp_lib_ranges)
+
273 
+
274 #endif // SIMDJSON_DOM_OBJECT_H
+
A JSON element.
Definition: element.h:40
+
Key/value pair in an object.
Definition: object.h:222
+
std::string_view key
key in the key-value pair
Definition: object.h:225
+
element value
value in the key-value pair
Definition: object.h:227
+ +
bool operator!=(const iterator &other) const noexcept
Check if these values come from the same place in the JSON.
Definition: object-inl.h:160
+
element value() const noexcept
Get the value of this key/value pair.
Definition: object-inl.h:197
+
bool key_equals(std::string_view o) const noexcept
Returns true if the key in this key/value pair is equal to the provided string_view.
Definition: object-inl.h:214
+
const char * key_c_str() const noexcept
Get the key of this key/value pair.
Definition: object-inl.h:194
+
uint32_t key_length() const noexcept
Get the length (in bytes) of the key in this key/value pair.
Definition: object-inl.h:191
+
const value_type operator*() const noexcept
Get the actual key/value pair.
Definition: object-inl.h:157
+
bool key_equals_case_insensitive(std::string_view o) const noexcept
Returns true if the key in this key/value pair is equal to the provided string_view in a case-insensi...
Definition: object-inl.h:225
+
std::string_view key() const noexcept
Get the key of this key/value pair.
Definition: object-inl.h:188
+
iterator & operator++() noexcept
Get the next key/value pair.
Definition: object-inl.h:178
+
JSON object.
Definition: object.h:22
+
simdjson_result< element > at_key(std::string_view key) const noexcept
Get the value associated with the given key.
Definition: object-inl.h:131
+
iterator end() const noexcept
One past the last key/value pair.
Definition: object-inl.h:71
+
size_t size() const noexcept
Get the size of the object (number of keys).
Definition: object-inl.h:75
+
simdjson_result< element > at_key_case_insensitive(std::string_view key) const noexcept
Get the value associated with the given key in a case-insensitive manner.
Definition: object-inl.h:143
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: object-inl.h:86
+
simdjson_inline object() noexcept
Create a new, invalid object.
Definition: object-inl.h:65
+
iterator begin() const noexcept
Return the first key/value pair.
Definition: object-inl.h:67
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
The result of a JSON navigation that may fail.
Definition: element.h:482
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/dom_2parser-inl_8h_source.html b/dom_2parser-inl_8h_source.html new file mode 100644 index 000000000..799e18689 --- /dev/null +++ b/dom_2parser-inl_8h_source.html @@ -0,0 +1,368 @@ + + + + + + + +simdjson: include/simdjson/dom/parser-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
parser-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_PARSER_H
+
2 #define SIMDJSON_INLINE_PARSER_H
+
3 
+
4 #include "simdjson/dom/document_stream.h"
+
5 #include "simdjson/dom/parser.h"
+
6 #include "simdjson/implementation.h"
+
7 #include "simdjson/internal/jsonformatutils.h"
+
8 #include "simdjson/portability.h"
+
9 #include <cstdio>
+
10 #include <climits>
+
11 
+
12 namespace simdjson {
+
13 namespace dom {
+
14 
+
15 //
+
16 // parser inline implementation
+
17 //
+
18 simdjson_inline parser::parser(size_t max_capacity) noexcept
+
19  : _max_capacity{max_capacity},
+
20  loaded_bytes(nullptr) {
+
21 }
+
22 simdjson_inline parser::parser(parser &&other) noexcept = default;
+
23 simdjson_inline parser &parser::operator=(parser &&other) noexcept = default;
+
24 
+
25 inline bool parser::is_valid() const noexcept { return valid; }
+
26 inline int parser::get_error_code() const noexcept { return error; }
+
27 inline std::string parser::get_error_message() const noexcept { return error_message(error); }
+
28 
+
29 inline bool parser::dump_raw_tape(std::ostream &os) const noexcept {
+
30  return valid ? doc.dump_raw_tape(os) : false;
+
31 }
+
32 
+
33 inline simdjson_result<size_t> parser::read_file(const std::string &path) noexcept {
+
34  // Open the file
+
35  SIMDJSON_PUSH_DISABLE_WARNINGS
+
36  SIMDJSON_DISABLE_DEPRECATED_WARNING // Disable CRT_SECURE warning on MSVC: manually verified this is safe
+
37  std::FILE *fp = std::fopen(path.c_str(), "rb");
+
38  SIMDJSON_POP_DISABLE_WARNINGS
+
39 
+
40  if (fp == nullptr) {
+
41  return IO_ERROR;
+
42  }
+
43 
+
44  // Get the file size
+
45  int ret;
+
46 #if SIMDJSON_VISUAL_STUDIO && !SIMDJSON_IS_32BITS
+
47  ret = _fseeki64(fp, 0, SEEK_END);
+
48 #else
+
49  ret = std::fseek(fp, 0, SEEK_END);
+
50 #endif // _WIN64
+
51  if(ret < 0) {
+
52  std::fclose(fp);
+
53  return IO_ERROR;
+
54  }
+
55 #if SIMDJSON_VISUAL_STUDIO && !SIMDJSON_IS_32BITS
+
56  __int64 len = _ftelli64(fp);
+
57  if(len == -1L) {
+
58  std::fclose(fp);
+
59  return IO_ERROR;
+
60  }
+
61 #else
+
62  long len = std::ftell(fp);
+
63  if((len < 0) || (len == LONG_MAX)) {
+
64  std::fclose(fp);
+
65  return IO_ERROR;
+
66  }
+
67 #endif
+
68 
+
69  // Make sure we have enough capacity to load the file
+
70  if (_loaded_bytes_capacity < size_t(len)) {
+
71  loaded_bytes.reset( internal::allocate_padded_buffer(len) );
+
72  if (!loaded_bytes) {
+
73  std::fclose(fp);
+
74  return MEMALLOC;
+
75  }
+
76  _loaded_bytes_capacity = len;
+
77  }
+
78 
+
79  // Read the string
+
80  std::rewind(fp);
+
81  size_t bytes_read = std::fread(loaded_bytes.get(), 1, len, fp);
+
82  if (std::fclose(fp) != 0 || bytes_read != size_t(len)) {
+
83  return IO_ERROR;
+
84  }
+
85 
+
86  return bytes_read;
+
87 }
+
88 
+
89 inline simdjson_result<element> parser::load(const std::string &path) & noexcept {
+
90  size_t len;
+
91  auto _error = read_file(path).get(len);
+
92  if (_error) { return _error; }
+
93  return parse(loaded_bytes.get(), len, false);
+
94 }
+
95 
+
96 inline simdjson_result<document_stream> parser::load_many(const std::string &path, size_t batch_size) noexcept {
+
97  size_t len;
+
98  auto _error = read_file(path).get(len);
+
99  if (_error) { return _error; }
+
100  if(batch_size < MINIMAL_BATCH_SIZE) { batch_size = MINIMAL_BATCH_SIZE; }
+
101  return document_stream(*this, reinterpret_cast<const uint8_t*>(loaded_bytes.get()), len, batch_size);
+
102 }
+
103 
+
104 inline simdjson_result<element> parser::parse_into_document(document& provided_doc, const uint8_t *buf, size_t len, bool realloc_if_needed) & noexcept {
+
105  // Important: we need to ensure that document has enough capacity.
+
106  // Important: It is possible that provided_doc is actually the internal 'doc' within the parser!!!
+
107  error_code _error = ensure_capacity(provided_doc, len);
+
108  if (_error) { return _error; }
+
109  if (realloc_if_needed) {
+
110  // Make sure we have enough capacity to copy len bytes
+
111  if (!loaded_bytes || _loaded_bytes_capacity < len) {
+
112  loaded_bytes.reset( internal::allocate_padded_buffer(len) );
+
113  if (!loaded_bytes) {
+
114  return MEMALLOC;
+
115  }
+
116  _loaded_bytes_capacity = len;
+
117  }
+
118  std::memcpy(static_cast<void *>(loaded_bytes.get()), buf, len);
+
119  }
+
120  _error = implementation->parse(realloc_if_needed ? reinterpret_cast<const uint8_t*>(loaded_bytes.get()): buf, len, provided_doc);
+
121 
+
122  if (_error) { return _error; }
+
123 
+
124  return provided_doc.root();
+
125 }
+
126 
+
127 simdjson_inline simdjson_result<element> parser::parse_into_document(document& provided_doc, const char *buf, size_t len, bool realloc_if_needed) & noexcept {
+
128  return parse_into_document(provided_doc, reinterpret_cast<const uint8_t *>(buf), len, realloc_if_needed);
+
129 }
+
130 simdjson_inline simdjson_result<element> parser::parse_into_document(document& provided_doc, const std::string &s) & noexcept {
+
131  return parse_into_document(provided_doc, s.data(), s.length(), s.capacity() - s.length() < SIMDJSON_PADDING);
+
132 }
+
133 simdjson_inline simdjson_result<element> parser::parse_into_document(document& provided_doc, const padded_string &s) & noexcept {
+
134  return parse_into_document(provided_doc, s.data(), s.length(), false);
+
135 }
+
136 
+
137 
+
138 inline simdjson_result<element> parser::parse(const uint8_t *buf, size_t len, bool realloc_if_needed) & noexcept {
+
139  return parse_into_document(doc, buf, len, realloc_if_needed);
+
140 }
+
141 
+
142 simdjson_inline simdjson_result<element> parser::parse(const char *buf, size_t len, bool realloc_if_needed) & noexcept {
+
143  return parse(reinterpret_cast<const uint8_t *>(buf), len, realloc_if_needed);
+
144 }
+
145 simdjson_inline simdjson_result<element> parser::parse(const std::string &s) & noexcept {
+
146  return parse(s.data(), s.length(), s.capacity() - s.length() < SIMDJSON_PADDING);
+
147 }
+
148 simdjson_inline simdjson_result<element> parser::parse(const padded_string &s) & noexcept {
+
149  return parse(s.data(), s.length(), false);
+
150 }
+
151 simdjson_inline simdjson_result<element> parser::parse(const padded_string_view &v) & noexcept {
+
152  return parse(v.data(), v.length(), false);
+
153 }
+
154 
+
155 inline simdjson_result<document_stream> parser::parse_many(const uint8_t *buf, size_t len, size_t batch_size) noexcept {
+
156  if(batch_size < MINIMAL_BATCH_SIZE) { batch_size = MINIMAL_BATCH_SIZE; }
+
157  return document_stream(*this, buf, len, batch_size);
+
158 }
+
159 inline simdjson_result<document_stream> parser::parse_many(const char *buf, size_t len, size_t batch_size) noexcept {
+
160  return parse_many(reinterpret_cast<const uint8_t *>(buf), len, batch_size);
+
161 }
+
162 inline simdjson_result<document_stream> parser::parse_many(const std::string &s, size_t batch_size) noexcept {
+
163  return parse_many(s.data(), s.length(), batch_size);
+
164 }
+
165 inline simdjson_result<document_stream> parser::parse_many(const padded_string &s, size_t batch_size) noexcept {
+
166  return parse_many(s.data(), s.length(), batch_size);
+
167 }
+
168 
+
169 simdjson_inline size_t parser::capacity() const noexcept {
+
170  return implementation ? implementation->capacity() : 0;
+
171 }
+
172 simdjson_inline size_t parser::max_capacity() const noexcept {
+
173  return _max_capacity;
+
174 }
+
175 simdjson_inline size_t parser::max_depth() const noexcept {
+
176  return implementation ? implementation->max_depth() : DEFAULT_MAX_DEPTH;
+
177 }
+
178 
+
179 simdjson_warn_unused
+
180 inline error_code parser::allocate(size_t capacity, size_t max_depth) noexcept {
+
181  //
+
182  // Reallocate implementation if needed
+
183  //
+
184  error_code err;
+
185  if (implementation) {
+
186  err = implementation->allocate(capacity, max_depth);
+
187  } else {
+
188  err = simdjson::get_active_implementation()->create_dom_parser_implementation(capacity, max_depth, implementation);
+
189  }
+
190  if (err) { return err; }
+
191  return SUCCESS;
+
192 }
+
193 
+
194 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
195 simdjson_warn_unused
+
196 inline bool parser::allocate_capacity(size_t capacity, size_t max_depth) noexcept {
+
197  return !allocate(capacity, max_depth);
+
198 }
+
199 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
200 
+
201 inline error_code parser::ensure_capacity(size_t desired_capacity) noexcept {
+
202  return ensure_capacity(doc, desired_capacity);
+
203 }
+
204 
+
205 
+
206 inline error_code parser::ensure_capacity(document& target_document, size_t desired_capacity) noexcept {
+
207  // 1. It is wasteful to allocate a document and a parser for documents spanning less than MINIMAL_DOCUMENT_CAPACITY bytes.
+
208  // 2. If we allow desired_capacity = 0 then it is possible to exit this function with implementation == nullptr.
+
209  if(desired_capacity < MINIMAL_DOCUMENT_CAPACITY) { desired_capacity = MINIMAL_DOCUMENT_CAPACITY; }
+
210  // If we don't have enough capacity, (try to) automatically bump it.
+
211  // If the document needs allocation, do it too.
+
212  // Both in one if statement to minimize unlikely branching.
+
213  //
+
214  // Note: we must make sure that this function is called if capacity() == 0. We do so because we
+
215  // ensure that desired_capacity > 0.
+
216  if (simdjson_unlikely(capacity() < desired_capacity || target_document.capacity() < desired_capacity)) {
+
217  if (desired_capacity > max_capacity()) {
+
218  return error = CAPACITY;
+
219  }
+
220  error_code err1 = target_document.capacity() < desired_capacity ? target_document.allocate(desired_capacity) : SUCCESS;
+
221  error_code err2 = capacity() < desired_capacity ? allocate(desired_capacity, max_depth()) : SUCCESS;
+
222  if(err1 != SUCCESS) { return error = err1; }
+
223  if(err2 != SUCCESS) { return error = err2; }
+
224  }
+
225  return SUCCESS;
+
226 }
+
227 
+
228 simdjson_inline void parser::set_max_capacity(size_t max_capacity) noexcept {
+
229  if(max_capacity < MINIMAL_DOCUMENT_CAPACITY) {
+
230  _max_capacity = max_capacity;
+
231  } else {
+
232  _max_capacity = MINIMAL_DOCUMENT_CAPACITY;
+
233  }
+
234 }
+
235 
+
236 } // namespace dom
+
237 } // namespace simdjson
+
238 
+
239 #endif // SIMDJSON_INLINE_PARSER_H
+
A forward-only stream of documents.
+
A parsed JSON document.
Definition: document.h:18
+
simdjson_inline parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
Create a JSON parser.
Definition: parser-inl.h:18
+
simdjson_result< element > parse(const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
Parse a JSON document and return a temporary reference to it.
Definition: parser-inl.h:138
+
simdjson_result< element > parse_into_document(document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
Parse a JSON document into a provide document instance and return a temporary reference to it.
Definition: parser-inl.h:104
+
simdjson_inline size_t max_depth() const noexcept
The maximum level of nested object and arrays supported by this parser.
Definition: parser-inl.h:175
+
simdjson_result< document_stream > load_many(const std::string &path, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
Load a file containing many JSON documents.
Definition: parser-inl.h:96
+
simdjson_inline void set_max_capacity(size_t max_capacity) noexcept
Set max_capacity.
Definition: parser-inl.h:228
+
simdjson_inline size_t max_capacity() const noexcept
The largest document this parser can automatically support.
Definition: parser-inl.h:172
+
simdjson_result< element > load(const std::string &path) &noexcept
Load a JSON document from a file and return a reference to it.
Definition: parser-inl.h:89
+
simdjson_inline size_t capacity() const noexcept
The largest document this parser can support without reallocating.
Definition: parser-inl.h:169
+
simdjson_inline parser & operator=(parser &&other) noexcept
Take another parser's buffers and state.
+
simdjson_warn_unused error_code allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max...
Definition: parser-inl.h:180
+
simdjson_result< document_stream > parse_many(const uint8_t *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
Parse a buffer containing many JSON documents.
Definition: parser-inl.h:155
+
An implementation of simdjson for a particular CPU architecture.
+
We want to support argument-dependent lookup (ADL).
+
const char * error_message(error_code error) noexcept
Get the error message for the given error code.
Definition: error-inl.h:21
+
constexpr size_t DEFAULT_MAX_DEPTH
By default, simdjson supports this many nested objects and arrays.
Definition: common_defs.h:52
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ IO_ERROR
Error reading a file.
Definition: error.h:38
+
SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr< const implementation > & get_active_implementation()
The active implementation.
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/dom_2parser_8h_source.html b/dom_2parser_8h_source.html new file mode 100644 index 000000000..4cbc79ffa --- /dev/null +++ b/dom_2parser_8h_source.html @@ -0,0 +1,281 @@ + + + + + + + +simdjson: include/simdjson/dom/parser.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
parser.h
+
+
+
1 #ifndef SIMDJSON_DOM_PARSER_H
+
2 #define SIMDJSON_DOM_PARSER_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/dom/document.h"
+
6 #include "simdjson/error.h"
+
7 #include "simdjson/internal/dom_parser_implementation.h"
+
8 #include "simdjson/internal/tape_ref.h"
+
9 #include "simdjson/padded_string.h"
+
10 #include "simdjson/portability.h"
+
11 #include <memory>
+
12 #include <ostream>
+
13 #include <string>
+
14 
+
15 namespace simdjson {
+
16 
+
17 namespace dom {
+
18 
+
19 class document_stream;
+
20 class element;
+
21 
+
23 static constexpr size_t DEFAULT_BATCH_SIZE = 1000000;
+
32 static constexpr size_t MINIMAL_BATCH_SIZE = 32;
+
33 
+
37 static constexpr size_t MINIMAL_DOCUMENT_CAPACITY = 32;
+
38 
+
58 class parser {
+
59 public:
+
71  simdjson_inline explicit parser(size_t max_capacity = SIMDJSON_MAXSIZE_BYTES) noexcept;
+
77  simdjson_inline parser(parser &&other) noexcept;
+
78  parser(const parser &) = delete;
+
84  simdjson_inline parser &operator=(parser &&other) noexcept;
+
85  parser &operator=(const parser &) = delete;
+
86 
+
88  ~parser()=default;
+
89 
+
124  inline simdjson_result<element> load(const std::string &path) & noexcept;
+
125  inline simdjson_result<element> load(const std::string &path) && = delete ;
+
191  inline simdjson_result<element> parse(const uint8_t *buf, size_t len, bool realloc_if_needed = true) & noexcept;
+
192  inline simdjson_result<element> parse(const uint8_t *buf, size_t len, bool realloc_if_needed = true) && =delete;
+
194  simdjson_inline simdjson_result<element> parse(const char *buf, size_t len, bool realloc_if_needed = true) & noexcept;
+
195  simdjson_inline simdjson_result<element> parse(const char *buf, size_t len, bool realloc_if_needed = true) && =delete;
+
197  simdjson_inline simdjson_result<element> parse(const std::string &s) & noexcept;
+
198  simdjson_inline simdjson_result<element> parse(const std::string &s) && =delete;
+
200  simdjson_inline simdjson_result<element> parse(const padded_string &s) & noexcept;
+
201  simdjson_inline simdjson_result<element> parse(const padded_string &s) && =delete;
+
203  simdjson_inline simdjson_result<element> parse(const padded_string_view &v) & noexcept;
+
204  simdjson_inline simdjson_result<element> parse(const padded_string_view &v) && =delete;
+
205 
+
207  simdjson_inline simdjson_result<element> parse(const char *buf) noexcept = delete;
+
208 
+
253  inline simdjson_result<element> parse_into_document(document& doc, const uint8_t *buf, size_t len, bool realloc_if_needed = true) & noexcept;
+
254  inline simdjson_result<element> parse_into_document(document& doc, const uint8_t *buf, size_t len, bool realloc_if_needed = true) && =delete;
+
256  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const char *buf, size_t len, bool realloc_if_needed = true) & noexcept;
+
257  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const char *buf, size_t len, bool realloc_if_needed = true) && =delete;
+
259  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const std::string &s) & noexcept;
+
260  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const std::string &s) && =delete;
+
262  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const padded_string &s) & noexcept;
+
263  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const padded_string &s) && =delete;
+
264 
+
266  simdjson_inline simdjson_result<element> parse_into_document(document& doc, const char *buf) noexcept = delete;
+
267 
+
341  inline simdjson_result<document_stream> load_many(const std::string &path, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept;
+
342 
+
435  inline simdjson_result<document_stream> parse_many(const uint8_t *buf, size_t len, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept;
+
437  inline simdjson_result<document_stream> parse_many(const char *buf, size_t len, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept;
+
439  inline simdjson_result<document_stream> parse_many(const std::string &s, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept;
+
440  inline simdjson_result<document_stream> parse_many(const std::string &&s, size_t batch_size) = delete;// unsafe
+
442  inline simdjson_result<document_stream> parse_many(const padded_string &s, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept;
+
443  inline simdjson_result<document_stream> parse_many(const padded_string &&s, size_t batch_size) = delete;// unsafe
+
444 
+
446  simdjson_result<document_stream> parse_many(const char *buf, size_t batch_size = dom::DEFAULT_BATCH_SIZE) noexcept = delete;
+
447 
+
456  simdjson_warn_unused inline error_code allocate(size_t capacity, size_t max_depth = DEFAULT_MAX_DEPTH) noexcept;
+
457 
+
458 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
470  [[deprecated("Use allocate() instead.")]]
+
471  simdjson_warn_unused inline bool allocate_capacity(size_t capacity, size_t max_depth = DEFAULT_MAX_DEPTH) noexcept;
+
472 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
478  simdjson_inline size_t capacity() const noexcept;
+
479 
+
487  simdjson_inline size_t max_capacity() const noexcept;
+
488 
+
494  simdjson_inline size_t max_depth() const noexcept;
+
495 
+
510  simdjson_inline void set_max_capacity(size_t max_capacity) noexcept;
+
511 
+
512 #ifdef SIMDJSON_THREADS_ENABLED
+
518  bool threaded{true};
+
519 #endif
+
521  class Iterator;
+
523  using InvalidJSON [[deprecated("Use simdjson_error instead")]] = simdjson_error;
+
524 
+
526  std::unique_ptr<internal::dom_parser_implementation> implementation{};
+
527 
+
529  bool valid{false};
+
531  error_code error{UNINITIALIZED};
+
532 
+
534  document doc{};
+
535 
+
537  [[deprecated("Use the result of parser.parse() instead")]]
+
538  inline bool is_valid() const noexcept;
+
539 
+
544  [[deprecated("Use the result of parser.parse() instead")]]
+
545  inline int get_error_code() const noexcept;
+
546 
+
548  [[deprecated("Use error_message() on the result of parser.parse() instead, or cout << error")]]
+
549  inline std::string get_error_message() const noexcept;
+
550 
+
552  [[deprecated("Use cout << on the result of parser.parse() instead")]]
+
553  inline bool print_json(std::ostream &os) const noexcept;
+
554 
+
556  inline bool dump_raw_tape(std::ostream &os) const noexcept;
+
557 
+
558 
+
559 private:
+
565  size_t _max_capacity;
+
566 
+
570  std::unique_ptr<char[]> loaded_bytes;
+
571 
+
573  size_t _loaded_bytes_capacity{0};
+
574 
+
575  // all nodes are stored on the doc.tape using a 64-bit word.
+
576  //
+
577  // strings, double and ints are stored as
+
578  // a 64-bit word with a pointer to the actual value
+
579  //
+
580  //
+
581  //
+
582  // for objects or arrays, store [ or { at the beginning and } and ] at the
+
583  // end. For the openings ([ or {), we annotate them with a reference to the
+
584  // location on the doc.tape of the end, and for then closings (} and ]), we
+
585  // annotate them with a reference to the location of the opening
+
586  //
+
587  //
+
588 
+
594  inline error_code ensure_capacity(size_t desired_capacity) noexcept;
+
600  inline error_code ensure_capacity(document& doc, size_t desired_capacity) noexcept;
+
601 
+
603  inline simdjson_result<size_t> read_file(const std::string &path) noexcept;
+
604 
+
605  friend class parser::Iterator;
+
606  friend class document_stream;
+
607 
+
608 
+
609 }; // class parser
+
610 
+
611 } // namespace dom
+
612 } // namespace simdjson
+
613 
+
614 #endif // SIMDJSON_DOM_PARSER_H
+
A parsed JSON document.
Definition: document.h:18
+
A persistent document parser.
Definition: parser.h:58
+
simdjson_inline parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
Create a JSON parser.
Definition: parser-inl.h:18
+
simdjson_result< element > parse(const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
Parse a JSON document and return a temporary reference to it.
Definition: parser-inl.h:138
+
simdjson_result< element > parse_into_document(document &doc, const uint8_t *buf, size_t len, bool realloc_if_needed=true) &noexcept
Parse a JSON document into a provide document instance and return a temporary reference to it.
Definition: parser-inl.h:104
+
simdjson_inline size_t max_depth() const noexcept
The maximum level of nested object and arrays supported by this parser.
Definition: parser-inl.h:175
+
simdjson_inline parser(parser &&other) noexcept
Take another parser's buffers and state.
+
simdjson_result< document_stream > load_many(const std::string &path, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
Load a file containing many JSON documents.
Definition: parser-inl.h:96
+
simdjson_inline void set_max_capacity(size_t max_capacity) noexcept
Set max_capacity.
Definition: parser-inl.h:228
+
simdjson_inline size_t max_capacity() const noexcept
The largest document this parser can automatically support.
Definition: parser-inl.h:172
+
simdjson_result< element > load(const std::string &path) &noexcept
Load a JSON document from a file and return a reference to it.
Definition: parser-inl.h:89
+
~parser()=default
Deallocate the JSON parser.
+
simdjson_inline size_t capacity() const noexcept
The largest document this parser can support without reallocating.
Definition: parser-inl.h:169
+
simdjson_inline parser & operator=(parser &&other) noexcept
Take another parser's buffers and state.
+
simdjson_warn_unused error_code allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max...
Definition: parser-inl.h:180
+
simdjson_result< document_stream > parse_many(const uint8_t *buf, size_t len, size_t batch_size=dom::DEFAULT_BATCH_SIZE) noexcept
Parse a buffer containing many JSON documents.
Definition: parser-inl.h:155
+
An implementation of simdjson for a particular CPU architecture.
+
User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
+
We want to support argument-dependent lookup (ADL).
+
const char * error_message(error_code error) noexcept
Get the error message for the given error code.
Definition: error-inl.h:21
+
constexpr size_t DEFAULT_MAX_DEPTH
By default, simdjson supports this many nested objects and arrays.
Definition: common_defs.h:52
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
constexpr size_t SIMDJSON_MAXSIZE_BYTES
The maximum document size supported by simdjson.
Definition: common_defs.h:35
+
String with extra allocation for ease of use with parser::parse()
Definition: padded_string.h:21
+
Exception thrown when an exception-supporting simdjson method is called.
Definition: error.h:72
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/dom_2serialization-inl_8h_source.html b/dom_2serialization-inl_8h_source.html new file mode 100644 index 000000000..546df0129 --- /dev/null +++ b/dom_2serialization-inl_8h_source.html @@ -0,0 +1,516 @@ + + + + + + + +simdjson: include/simdjson/dom/serialization-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
serialization-inl.h
+
+
+
1 
+
2 #ifndef SIMDJSON_SERIALIZATION_INL_H
+
3 #define SIMDJSON_SERIALIZATION_INL_H
+
4 
+
5 #include "simdjson/dom/serialization.h"
+
6 
+
7 #include <cinttypes>
+
8 #include <type_traits>
+
9 
+
10 namespace simdjson {
+
11 namespace dom {
+
12 inline bool parser::print_json(std::ostream &os) const noexcept {
+
13  if (!valid) { return false; }
+
14  simdjson::internal::string_builder<> sb;
+
15  sb.append(doc.root());
+
16  std::string_view answer = sb.str();
+
17  os << answer;
+
18  return true;
+
19 }
+
20 }
+
21 /***
+
22  * Number utility functions
+
23  **/
+
24 
+
25 
+
26 namespace {
+
31 struct escape_sequence {
+
32  uint8_t length;
+
33  const char string[7]; // technically, we only ever need 6 characters, we pad to 8
+
34 };
+
44 char *fast_itoa(char *output, int64_t value) noexcept {
+
45  // This is a standard implementation of itoa.
+
46  char buffer[20];
+
47  uint64_t value_positive;
+
48  // In general, negating a signed integer is unsafe.
+
49  if(value < 0) {
+
50  *output++ = '-';
+
51  // Doing value_positive = -value; while avoiding
+
52  // undefined behavior warnings.
+
53  // It assumes two complement's which is universal at this
+
54  // point in time.
+
55  std::memcpy(&value_positive, &value, sizeof(value));
+
56  value_positive = (~value_positive) + 1; // this is a negation
+
57  } else {
+
58  value_positive = value;
+
59  }
+
60  // We work solely with value_positive. It *might* be easier
+
61  // for an optimizing compiler to deal with an unsigned variable
+
62  // as far as performance goes.
+
63  const char *const end_buffer = buffer + 20;
+
64  char *write_pointer = buffer + 19;
+
65  // A faster approach is possible if we expect large integers:
+
66  // unroll the loop (work in 100s, 1000s) and use some kind of
+
67  // memoization.
+
68  while(value_positive >= 10) {
+
69  *write_pointer-- = char('0' + (value_positive % 10));
+
70  value_positive /= 10;
+
71  }
+
72  *write_pointer = char('0' + value_positive);
+
73  size_t len = end_buffer - write_pointer;
+
74  std::memcpy(output, write_pointer, len);
+
75  return output + len;
+
76 }
+
86 char *fast_itoa(char *output, uint64_t value) noexcept {
+
87  // This is a standard implementation of itoa.
+
88  char buffer[20];
+
89  const char *const end_buffer = buffer + 20;
+
90  char *write_pointer = buffer + 19;
+
91  // A faster approach is possible if we expect large integers:
+
92  // unroll the loop (work in 100s, 1000s) and use some kind of
+
93  // memoization.
+
94  while(value >= 10) {
+
95  *write_pointer-- = char('0' + (value % 10));
+
96  value /= 10;
+
97  };
+
98  *write_pointer = char('0' + value);
+
99  size_t len = end_buffer - write_pointer;
+
100  std::memcpy(output, write_pointer, len);
+
101  return output + len;
+
102 }
+
103 } // anonymous namespace
+
104 namespace internal {
+
105 
+
106 /***
+
107  * Minifier/formatter code.
+
108  **/
+
109 
+
110 simdjson_inline void mini_formatter::number(uint64_t x) {
+
111  char number_buffer[24];
+
112  char *newp = fast_itoa(number_buffer, x);
+
113  buffer.insert(buffer.end(), number_buffer, newp);
+
114 }
+
115 
+
116 simdjson_inline void mini_formatter::number(int64_t x) {
+
117  char number_buffer[24];
+
118  char *newp = fast_itoa(number_buffer, x);
+
119  buffer.insert(buffer.end(), number_buffer, newp);
+
120 }
+
121 
+
122 simdjson_inline void mini_formatter::number(double x) {
+
123  char number_buffer[24];
+
124  // Currently, passing the nullptr to the second argument is
+
125  // safe because our implementation does not check the second
+
126  // argument.
+
127  char *newp = internal::to_chars(number_buffer, nullptr, x);
+
128  buffer.insert(buffer.end(), number_buffer, newp);
+
129 }
+
130 
+
131 simdjson_inline void mini_formatter::start_array() { one_char('['); }
+
132 simdjson_inline void mini_formatter::end_array() { one_char(']'); }
+
133 simdjson_inline void mini_formatter::start_object() { one_char('{'); }
+
134 simdjson_inline void mini_formatter::end_object() { one_char('}'); }
+
135 simdjson_inline void mini_formatter::comma() { one_char(','); }
+
136 
+
137 
+
138 simdjson_inline void mini_formatter::true_atom() {
+
139  const char * s = "true";
+
140  buffer.insert(buffer.end(), s, s + 4);
+
141 }
+
142 simdjson_inline void mini_formatter::false_atom() {
+
143  const char * s = "false";
+
144  buffer.insert(buffer.end(), s, s + 5);
+
145 }
+
146 simdjson_inline void mini_formatter::null_atom() {
+
147  const char * s = "null";
+
148  buffer.insert(buffer.end(), s, s + 4);
+
149 }
+
150 simdjson_inline void mini_formatter::one_char(char c) { buffer.push_back(c); }
+
151 simdjson_inline void mini_formatter::key(std::string_view unescaped) {
+
152  string(unescaped);
+
153  one_char(':');
+
154 }
+
155 simdjson_inline void mini_formatter::string(std::string_view unescaped) {
+
156  one_char('\"');
+
157  size_t i = 0;
+
158  // Fast path for the case where we have no control character, no ", and no backslash.
+
159  // This should include most keys.
+
160  //
+
161  // We would like to use 'bool' but some compilers take offense to bitwise operation
+
162  // with bool types.
+
163  constexpr static char needs_escaping[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
164  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+
165  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
166  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+
167  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
168  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
169  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
170  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
171  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
172  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
173  for(;i + 8 <= unescaped.length(); i += 8) {
+
174  // Poor's man vectorization. This could get much faster if we used SIMD.
+
175  //
+
176  // It is not the case that replacing '|' with '||' would be neutral performance-wise.
+
177  if(needs_escaping[uint8_t(unescaped[i])] | needs_escaping[uint8_t(unescaped[i+1])]
+
178  | needs_escaping[uint8_t(unescaped[i+2])] | needs_escaping[uint8_t(unescaped[i+3])]
+
179  | needs_escaping[uint8_t(unescaped[i+4])] | needs_escaping[uint8_t(unescaped[i+5])]
+
180  | needs_escaping[uint8_t(unescaped[i+6])] | needs_escaping[uint8_t(unescaped[i+7])]
+
181  ) { break; }
+
182  }
+
183  for(;i < unescaped.length(); i++) {
+
184  if(needs_escaping[uint8_t(unescaped[i])]) { break; }
+
185  }
+
186  // The following is also possible and omits a 256-byte table, but it is slower:
+
187  // for (; (i < unescaped.length()) && (uint8_t(unescaped[i]) > 0x1F)
+
188  // && (unescaped[i] != '\"') && (unescaped[i] != '\\'); i++) {}
+
189 
+
190  // At least for long strings, the following should be fast. We could
+
191  // do better by integrating the checks and the insertion.
+
192  buffer.insert(buffer.end(), unescaped.data(), unescaped.data() + i);
+
193  // We caught a control character if we enter this loop (slow).
+
194  // Note that we are do not restart from the beginning, but rather we continue
+
195  // from the point where we encountered something that requires escaping.
+
196  for (; i < unescaped.length(); i++) {
+
197  switch (unescaped[i]) {
+
198  case '\"':
+
199  {
+
200  const char * s = "\\\"";
+
201  buffer.insert(buffer.end(), s, s + 2);
+
202  }
+
203  break;
+
204  case '\\':
+
205  {
+
206  const char * s = "\\\\";
+
207  buffer.insert(buffer.end(), s, s + 2);
+
208  }
+
209  break;
+
210  default:
+
211  if (uint8_t(unescaped[i]) <= 0x1F) {
+
212  // If packed, this uses 8 * 32 bytes.
+
213  // Note that we expect most compilers to embed this code in the data
+
214  // section.
+
215  constexpr static escape_sequence escaped[32] = {
+
216  {6, "\\u0000"}, {6, "\\u0001"}, {6, "\\u0002"}, {6, "\\u0003"},
+
217  {6, "\\u0004"}, {6, "\\u0005"}, {6, "\\u0006"}, {6, "\\u0007"},
+
218  {2, "\\b"}, {2, "\\t"}, {2, "\\n"}, {6, "\\u000b"},
+
219  {2, "\\f"}, {2, "\\r"}, {6, "\\u000e"}, {6, "\\u000f"},
+
220  {6, "\\u0010"}, {6, "\\u0011"}, {6, "\\u0012"}, {6, "\\u0013"},
+
221  {6, "\\u0014"}, {6, "\\u0015"}, {6, "\\u0016"}, {6, "\\u0017"},
+
222  {6, "\\u0018"}, {6, "\\u0019"}, {6, "\\u001a"}, {6, "\\u001b"},
+
223  {6, "\\u001c"}, {6, "\\u001d"}, {6, "\\u001e"}, {6, "\\u001f"}};
+
224  auto u = escaped[uint8_t(unescaped[i])];
+
225  buffer.insert(buffer.end(), u.string, u.string + u.length);
+
226  } else {
+
227  one_char(unescaped[i]);
+
228  }
+
229  } // switch
+
230  } // for
+
231  one_char('\"');
+
232 }
+
233 
+
234 inline void mini_formatter::clear() {
+
235  buffer.clear();
+
236 }
+
237 
+
238 simdjson_inline std::string_view mini_formatter::str() const {
+
239  return std::string_view(buffer.data(), buffer.size());
+
240 }
+
241 
+
242 
+
243 /***
+
244  * String building code.
+
245  **/
+
246 
+
247 template <class serializer>
+
248 inline void string_builder<serializer>::append(simdjson::dom::element value) {
+
249  // using tape_type = simdjson::internal::tape_type;
+
250  size_t depth = 0;
+
251  constexpr size_t MAX_DEPTH = 16;
+
252  bool is_object[MAX_DEPTH];
+
253  is_object[0] = false;
+
254  bool after_value = false;
+
255 
+
256  internal::tape_ref iter(value.tape);
+
257  do {
+
258  // print commas after each value
+
259  if (after_value) {
+
260  format.comma();
+
261  }
+
262  // If we are in an object, print the next key and :, and skip to the next
+
263  // value.
+
264  if (is_object[depth]) {
+
265  format.key(iter.get_string_view());
+
266  iter.json_index++;
+
267  }
+
268  switch (iter.tape_ref_type()) {
+
269 
+
270  // Arrays
+
271  case tape_type::START_ARRAY: {
+
272  // If we're too deep, we need to recurse to go deeper.
+
273  depth++;
+
274  if (simdjson_unlikely(depth >= MAX_DEPTH)) {
+
275  append(simdjson::dom::array(iter));
+
276  iter.json_index = iter.matching_brace_index() - 1; // Jump to the ]
+
277  depth--;
+
278  break;
+
279  }
+
280 
+
281  // Output start [
+
282  format.start_array();
+
283  iter.json_index++;
+
284 
+
285  // Handle empty [] (we don't want to come back around and print commas)
+
286  if (iter.tape_ref_type() == tape_type::END_ARRAY) {
+
287  format.end_array();
+
288  depth--;
+
289  break;
+
290  }
+
291 
+
292  is_object[depth] = false;
+
293  after_value = false;
+
294  continue;
+
295  }
+
296 
+
297  // Objects
+
298  case tape_type::START_OBJECT: {
+
299  // If we're too deep, we need to recurse to go deeper.
+
300  depth++;
+
301  if (simdjson_unlikely(depth >= MAX_DEPTH)) {
+
302  append(simdjson::dom::object(iter));
+
303  iter.json_index = iter.matching_brace_index() - 1; // Jump to the }
+
304  depth--;
+
305  break;
+
306  }
+
307 
+
308  // Output start {
+
309  format.start_object();
+
310  iter.json_index++;
+
311 
+
312  // Handle empty {} (we don't want to come back around and print commas)
+
313  if (iter.tape_ref_type() == tape_type::END_OBJECT) {
+
314  format.end_object();
+
315  depth--;
+
316  break;
+
317  }
+
318 
+
319  is_object[depth] = true;
+
320  after_value = false;
+
321  continue;
+
322  }
+
323 
+
324  // Scalars
+
325  case tape_type::STRING:
+
326  format.string(iter.get_string_view());
+
327  break;
+
328  case tape_type::INT64:
+
329  format.number(iter.next_tape_value<int64_t>());
+
330  iter.json_index++; // numbers take up 2 spots, so we need to increment
+
331  // extra
+
332  break;
+
333  case tape_type::UINT64:
+
334  format.number(iter.next_tape_value<uint64_t>());
+
335  iter.json_index++; // numbers take up 2 spots, so we need to increment
+
336  // extra
+
337  break;
+
338  case tape_type::DOUBLE:
+
339  format.number(iter.next_tape_value<double>());
+
340  iter.json_index++; // numbers take up 2 spots, so we need to increment
+
341  // extra
+
342  break;
+
343  case tape_type::TRUE_VALUE:
+
344  format.true_atom();
+
345  break;
+
346  case tape_type::FALSE_VALUE:
+
347  format.false_atom();
+
348  break;
+
349  case tape_type::NULL_VALUE:
+
350  format.null_atom();
+
351  break;
+
352 
+
353  // These are impossible
+
354  case tape_type::END_ARRAY:
+
355  case tape_type::END_OBJECT:
+
356  case tape_type::ROOT:
+
357  SIMDJSON_UNREACHABLE();
+
358  }
+
359  iter.json_index++;
+
360  after_value = true;
+
361 
+
362  // Handle multiple ends in a row
+
363  while (depth != 0 && (iter.tape_ref_type() == tape_type::END_ARRAY ||
+
364  iter.tape_ref_type() == tape_type::END_OBJECT)) {
+
365  if (iter.tape_ref_type() == tape_type::END_ARRAY) {
+
366  format.end_array();
+
367  } else {
+
368  format.end_object();
+
369  }
+
370  depth--;
+
371  iter.json_index++;
+
372  }
+
373 
+
374  // Stop when we're at depth 0
+
375  } while (depth != 0);
+
376 }
+
377 
+
378 template <class serializer>
+
379 inline void string_builder<serializer>::append(simdjson::dom::object value) {
+
380  format.start_object();
+
381  auto pair = value.begin();
+
382  auto end = value.end();
+
383  if (pair != end) {
+
384  append(*pair);
+
385  for (++pair; pair != end; ++pair) {
+
386  format.comma();
+
387  append(*pair);
+
388  }
+
389  }
+
390  format.end_object();
+
391 }
+
392 
+
393 template <class serializer>
+
394 inline void string_builder<serializer>::append(simdjson::dom::array value) {
+
395  format.start_array();
+
396  auto iter = value.begin();
+
397  auto end = value.end();
+
398  if (iter != end) {
+
399  append(*iter);
+
400  for (++iter; iter != end; ++iter) {
+
401  format.comma();
+
402  append(*iter);
+
403  }
+
404  }
+
405  format.end_array();
+
406 }
+
407 
+
408 template <class serializer>
+
409 simdjson_inline void string_builder<serializer>::append(simdjson::dom::key_value_pair kv) {
+
410  format.key(kv.key);
+
411  append(kv.value);
+
412 }
+
413 
+
414 template <class serializer>
+
415 simdjson_inline void string_builder<serializer>::clear() {
+
416  format.clear();
+
417 }
+
418 
+
419 template <class serializer>
+
420 simdjson_inline std::string_view string_builder<serializer>::str() const {
+
421  return format.str();
+
422 }
+
423 
+
424 
+
425 } // namespace internal
+
426 } // namespace simdjson
+
427 
+
428 #endif
+
JSON array.
Definition: array.h:22
+
A JSON element.
Definition: element.h:40
+
Key/value pair in an object.
Definition: object.h:222
+
std::string_view key
key in the key-value pair
Definition: object.h:225
+
element value
value in the key-value pair
Definition: object.h:227
+
JSON object.
Definition: object.h:22
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/dom_2serialization_8h_source.html b/dom_2serialization_8h_source.html new file mode 100644 index 000000000..cf851bd4f --- /dev/null +++ b/dom_2serialization_8h_source.html @@ -0,0 +1,248 @@ + + + + + + + +simdjson: include/simdjson/dom/serialization.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
serialization.h
+
+
+
1 #ifndef SIMDJSON_SERIALIZATION_H
+
2 #define SIMDJSON_SERIALIZATION_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/dom/document.h"
+
6 #include "simdjson/error.h"
+
7 #include "simdjson/internal/dom_parser_implementation.h"
+
8 #include "simdjson/internal/tape_ref.h"
+
9 #include "simdjson/padded_string.h"
+
10 #include "simdjson/portability.h"
+
11 #include <vector>
+
12 
+
13 namespace simdjson {
+
14 
+
20 namespace internal {
+
21 
+
22 class mini_formatter;
+
23 
+
31 template <class formatter = mini_formatter>
+
32 class string_builder {
+
33 public:
+
35  string_builder() = default;
+
37  inline void append(simdjson::dom::element value);
+
39  inline void append(simdjson::dom::array value);
+
41  inline void append(simdjson::dom::object value);
+
43  simdjson_inline void clear();
+
51  simdjson_inline std::string_view str() const;
+
53  simdjson_inline void append(simdjson::dom::key_value_pair value);
+
54 private:
+
55  formatter format{};
+
56 };
+
57 
+
63 class mini_formatter {
+
64 public:
+
65  mini_formatter() = default;
+
67  simdjson_inline void comma();
+
69  simdjson_inline void start_array();
+
71  simdjson_inline void end_array();
+
73  simdjson_inline void start_object();
+
75  simdjson_inline void end_object();
+
77  simdjson_inline void true_atom();
+
79  simdjson_inline void false_atom();
+
81  simdjson_inline void null_atom();
+
83  simdjson_inline void number(int64_t x);
+
85  simdjson_inline void number(uint64_t x);
+
87  simdjson_inline void number(double x);
+
89  simdjson_inline void key(std::string_view unescaped);
+
91  simdjson_inline void string(std::string_view unescaped);
+
93  simdjson_inline void clear();
+
98  simdjson_inline std::string_view str() const;
+
99 
+
100 private:
+
101  // implementation details (subject to change)
+
103  simdjson_inline void one_char(char c);
+
105  std::vector<char> buffer{}; // not ideal!
+
106 };
+
107 
+
108 } // internal
+
109 
+
110 namespace dom {
+
111 
+
119 inline std::ostream& operator<<(std::ostream& out, simdjson::dom::element value) {
+
120  simdjson::internal::string_builder<> sb;
+
121  sb.append(value);
+
122  return (out << sb.str());
+
123 }
+
124 #if SIMDJSON_EXCEPTIONS
+
125 inline std::ostream& operator<<(std::ostream& out, simdjson::simdjson_result<simdjson::dom::element> x) {
+
126  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
127  return (out << x.value());
+
128 }
+
129 #endif
+
137 inline std::ostream& operator<<(std::ostream& out, simdjson::dom::array value) {
+
138  simdjson::internal::string_builder<> sb;
+
139  sb.append(value);
+
140  return (out << sb.str());
+
141 }
+
142 #if SIMDJSON_EXCEPTIONS
+
143 inline std::ostream& operator<<(std::ostream& out, simdjson::simdjson_result<simdjson::dom::array> x) {
+
144  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
145  return (out << x.value());
+
146 }
+
147 #endif
+
155 inline std::ostream& operator<<(std::ostream& out, simdjson::dom::object value) {
+
156  simdjson::internal::string_builder<> sb;
+
157  sb.append(value);
+
158  return (out << sb.str());
+
159 }
+
160 #if SIMDJSON_EXCEPTIONS
+
161 inline std::ostream& operator<<(std::ostream& out, simdjson::simdjson_result<simdjson::dom::object> x) {
+
162  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
163  return (out << x.value());
+
164 }
+
165 #endif
+
166 } // namespace dom
+
167 
+
176 template <class T>
+
177 std::string to_string(T x) {
+
178  // in C++, to_string is standard: http://www.cplusplus.com/reference/string/to_string/
+
179  // Currently minify and to_string are identical but in the future, they may
+
180  // differ.
+
181  simdjson::internal::string_builder<> sb;
+
182  sb.append(x);
+
183  std::string_view answer = sb.str();
+
184  return std::string(answer.data(), answer.size());
+
185 }
+
186 #if SIMDJSON_EXCEPTIONS
+
187 template <class T>
+
188 std::string to_string(simdjson_result<T> x) {
+
189  if (x.error()) { throw simdjson_error(x.error()); }
+
190  return to_string(x.value());
+
191 }
+
192 #endif
+
193 
+
202 template <class T>
+
203 std::string minify(T x) {
+
204  return to_string(x);
+
205 }
+
206 
+
207 #if SIMDJSON_EXCEPTIONS
+
208 template <class T>
+
209 std::string minify(simdjson_result<T> x) {
+
210  if (x.error()) { throw simdjson_error(x.error()); }
+
211  return to_string(x.value());
+
212 }
+
213 #endif
+
214 
+
215 
+
216 } // namespace simdjson
+
217 
+
218 
+
219 #endif
+
JSON array.
Definition: array.h:22
+
A JSON element.
Definition: element.h:40
+
Key/value pair in an object.
Definition: object.h:222
+
JSON object.
Definition: object.h:22
+
@ number
A JSON number ( 1 or -2.3 or 4.5e6 ...)
+
We want to support argument-dependent lookup (ADL).
+
std::ostream & operator<<(std::ostream &out, error_code error) noexcept
Write the error message to the output stream.
Definition: error-inl.h:36
+
std::string to_string(T x)
Converts JSON to a string.
+
std::string minify(T x)
Minifies a JSON element or document, printing the smallest possible valid JSON.
+
Exception thrown when an exception-supporting simdjson method is called.
Definition: error.h:72
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/dom_8h_source.html b/dom_8h_source.html new file mode 100644 index 000000000..b1ae443ab --- /dev/null +++ b/dom_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/dom.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dom.h
+
+
+
1 #ifndef SIMDJSON_DOM_H
+
2 #define SIMDJSON_DOM_H
+
3 
+
4 #include "simdjson/base.h"
+
5 
+
6 SIMDJSON_PUSH_DISABLE_WARNINGS
+
7 SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
8 
+
9 #include "simdjson/dom/array.h"
+
10 #include "simdjson/dom/document_stream.h"
+
11 #include "simdjson/dom/document.h"
+
12 #include "simdjson/dom/element.h"
+
13 #include "simdjson/dom/object.h"
+
14 #include "simdjson/dom/parser.h"
+
15 #include "simdjson/dom/serialization.h"
+
16 
+
17 // Deprecated API
+
18 #include "simdjson/dom/jsonparser.h"
+
19 #include "simdjson/dom/parsedjson.h"
+
20 #include "simdjson/dom/parsedjson_iterator.h"
+
21 
+
22 // Inline functions
+
23 #include "simdjson/dom/array-inl.h"
+
24 #include "simdjson/dom/document_stream-inl.h"
+
25 #include "simdjson/dom/document-inl.h"
+
26 #include "simdjson/dom/element-inl.h"
+
27 #include "simdjson/dom/object-inl.h"
+
28 #include "simdjson/dom/parsedjson_iterator-inl.h"
+
29 #include "simdjson/dom/parser-inl.h"
+
30 #include "simdjson/internal/tape_ref-inl.h"
+
31 #include "simdjson/dom/serialization-inl.h"
+
32 
+
33 SIMDJSON_POP_DISABLE_WARNINGS
+
34 
+
35 #endif // SIMDJSON_DOM_H
+
+
+ + + + diff --git a/doxygen-awesome-darkmode-toggle.js b/doxygen-awesome-darkmode-toggle.js new file mode 100644 index 000000000..f2c5853f7 --- /dev/null +++ b/doxygen-awesome-darkmode-toggle.js @@ -0,0 +1,157 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeDarkModeToggle extends HTMLElement { + // SVG icons from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static lightModeIcon = `` + static darkModeIcon = `` + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + toggleButton.title = DoxygenAwesomeDarkModeToggle.title + toggleButton.updateIcon() + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + toggleButton.updateIcon() + }) + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + $(window).resize(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + } + + static set userPreference(userPreference) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference + if(!userPreference) { + if(DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + } + } + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() + } + + static enableDarkMode(enable) { + if(enable) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + } + + static onSystemPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference + this.updateIcon() + } + + updateIcon() { + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon + } else { + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon + } + } +} + +customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/doxygen-awesome-sidebar-only.css b/doxygen-awesome-sidebar-only.css new file mode 100644 index 000000000..656ebbf43 --- /dev/null +++ b/doxygen-awesome-sidebar-only.css @@ -0,0 +1,115 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/doxygen-awesome.css b/doxygen-awesome.css new file mode 100644 index 000000000..abd2893cc --- /dev/null +++ b/doxygen-awesome.css @@ -0,0 +1,2405 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #f8d1cc; + --warning-color-dark: #b61825; + --warning-color-darker: #75070f; + --note-color: #faf3d8; + --note-color-dark: #f3a600; + --note-color-darker: #5f4204; + --todo-color: #e4f3ff; + --todo-color-dark: #1879C4; + --todo-color-darker: #274a5c; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #e4dafd; + --bug-color-dark: #5b2bdd; + --bug-color-darker: #2a0d72; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsable table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: .9em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + background: var(--separator-color); + width: 1px; +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe { + filter: hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform 0.25s ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt { + color: var(--todo-color-dark); +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform 0.25s ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform .1s ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity .1s ease-in-out, color .1s ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 000000000..ffbff0224 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 000000000..d42dad52d --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 000000000..88f2c27e6 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,128 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +simdjson: include/simdjson/dom/element-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
element-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_ELEMENT_H
+
2 #define SIMDJSON_INLINE_ELEMENT_H
+
3 
+
4 #include "simdjson/dom/array.h"
+
5 #include "simdjson/dom/element.h"
+
6 #include "simdjson/dom/object.h"
+
7 #include <cstring>
+
8 #include <utility>
+
9 
+
10 namespace simdjson {
+
11 
+
12 //
+
13 // simdjson_result<dom::element> inline implementation
+
14 //
+
15 simdjson_inline simdjson_result<dom::element>::simdjson_result() noexcept
+
16  : internal::simdjson_result_base<dom::element>() {}
+
17 simdjson_inline simdjson_result<dom::element>::simdjson_result(dom::element &&value) noexcept
+
18  : internal::simdjson_result_base<dom::element>(std::forward<dom::element>(value)) {}
+
19 simdjson_inline simdjson_result<dom::element>::simdjson_result(error_code error) noexcept
+
20  : internal::simdjson_result_base<dom::element>(error) {}
+
21 inline simdjson_result<dom::element_type> simdjson_result<dom::element>::type() const noexcept {
+
22  if (error()) { return error(); }
+
23  return first.type();
+
24 }
+
25 
+
26 template<typename T>
+
27 simdjson_inline bool simdjson_result<dom::element>::is() const noexcept {
+
28  return !error() && first.is<T>();
+
29 }
+
30 template<typename T>
+
31 simdjson_inline simdjson_result<T> simdjson_result<dom::element>::get() const noexcept {
+
32  if (error()) { return error(); }
+
33  return first.get<T>();
+
34 }
+
35 template<typename T>
+
36 simdjson_warn_unused simdjson_inline error_code simdjson_result<dom::element>::get(T &value) const noexcept {
+
37  if (error()) { return error(); }
+
38  return first.get<T>(value);
+
39 }
+
40 
+
41 simdjson_inline simdjson_result<dom::array> simdjson_result<dom::element>::get_array() const noexcept {
+
42  if (error()) { return error(); }
+
43  return first.get_array();
+
44 }
+
45 simdjson_inline simdjson_result<dom::object> simdjson_result<dom::element>::get_object() const noexcept {
+
46  if (error()) { return error(); }
+
47  return first.get_object();
+
48 }
+
49 simdjson_inline simdjson_result<const char *> simdjson_result<dom::element>::get_c_str() const noexcept {
+
50  if (error()) { return error(); }
+
51  return first.get_c_str();
+
52 }
+
53 simdjson_inline simdjson_result<size_t> simdjson_result<dom::element>::get_string_length() const noexcept {
+
54  if (error()) { return error(); }
+
55  return first.get_string_length();
+
56 }
+
57 simdjson_inline simdjson_result<std::string_view> simdjson_result<dom::element>::get_string() const noexcept {
+
58  if (error()) { return error(); }
+
59  return first.get_string();
+
60 }
+
61 simdjson_inline simdjson_result<int64_t> simdjson_result<dom::element>::get_int64() const noexcept {
+
62  if (error()) { return error(); }
+
63  return first.get_int64();
+
64 }
+
65 simdjson_inline simdjson_result<uint64_t> simdjson_result<dom::element>::get_uint64() const noexcept {
+
66  if (error()) { return error(); }
+
67  return first.get_uint64();
+
68 }
+
69 simdjson_inline simdjson_result<double> simdjson_result<dom::element>::get_double() const noexcept {
+
70  if (error()) { return error(); }
+
71  return first.get_double();
+
72 }
+
73 simdjson_inline simdjson_result<bool> simdjson_result<dom::element>::get_bool() const noexcept {
+
74  if (error()) { return error(); }
+
75  return first.get_bool();
+
76 }
+
77 
+
78 simdjson_inline bool simdjson_result<dom::element>::is_array() const noexcept {
+
79  return !error() && first.is_array();
+
80 }
+
81 simdjson_inline bool simdjson_result<dom::element>::is_object() const noexcept {
+
82  return !error() && first.is_object();
+
83 }
+
84 simdjson_inline bool simdjson_result<dom::element>::is_string() const noexcept {
+
85  return !error() && first.is_string();
+
86 }
+
87 simdjson_inline bool simdjson_result<dom::element>::is_int64() const noexcept {
+
88  return !error() && first.is_int64();
+
89 }
+
90 simdjson_inline bool simdjson_result<dom::element>::is_uint64() const noexcept {
+
91  return !error() && first.is_uint64();
+
92 }
+
93 simdjson_inline bool simdjson_result<dom::element>::is_double() const noexcept {
+
94  return !error() && first.is_double();
+
95 }
+
96 simdjson_inline bool simdjson_result<dom::element>::is_number() const noexcept {
+
97  return !error() && first.is_number();
+
98 }
+
99 simdjson_inline bool simdjson_result<dom::element>::is_bool() const noexcept {
+
100  return !error() && first.is_bool();
+
101 }
+
102 
+
103 simdjson_inline bool simdjson_result<dom::element>::is_null() const noexcept {
+
104  return !error() && first.is_null();
+
105 }
+
106 
+
107 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::operator[](std::string_view key) const noexcept {
+
108  if (error()) { return error(); }
+
109  return first[key];
+
110 }
+
111 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::operator[](const char *key) const noexcept {
+
112  if (error()) { return error(); }
+
113  return first[key];
+
114 }
+
115 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::at_pointer(const std::string_view json_pointer) const noexcept {
+
116  if (error()) { return error(); }
+
117  return first.at_pointer(json_pointer);
+
118 }
+
119 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
120 [[deprecated("For standard compliance, use at_pointer instead, and prefix your pointers with a slash '/', see RFC6901 ")]]
+
121 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::at(const std::string_view json_pointer) const noexcept {
+
122 SIMDJSON_PUSH_DISABLE_WARNINGS
+
123 SIMDJSON_DISABLE_DEPRECATED_WARNING
+
124  if (error()) { return error(); }
+
125  return first.at(json_pointer);
+
126 SIMDJSON_POP_DISABLE_WARNINGS
+
127 }
+
128 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
129 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::at(size_t index) const noexcept {
+
130  if (error()) { return error(); }
+
131  return first.at(index);
+
132 }
+
133 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::at_key(std::string_view key) const noexcept {
+
134  if (error()) { return error(); }
+
135  return first.at_key(key);
+
136 }
+
137 simdjson_inline simdjson_result<dom::element> simdjson_result<dom::element>::at_key_case_insensitive(std::string_view key) const noexcept {
+
138  if (error()) { return error(); }
+
139  return first.at_key_case_insensitive(key);
+
140 }
+
141 
+
142 #if SIMDJSON_EXCEPTIONS
+
143 
+
144 simdjson_inline simdjson_result<dom::element>::operator bool() const noexcept(false) {
+
145  return get<bool>();
+
146 }
+
147 simdjson_inline simdjson_result<dom::element>::operator const char *() const noexcept(false) {
+
148  return get<const char *>();
+
149 }
+
150 simdjson_inline simdjson_result<dom::element>::operator std::string_view() const noexcept(false) {
+
151  return get<std::string_view>();
+
152 }
+
153 simdjson_inline simdjson_result<dom::element>::operator uint64_t() const noexcept(false) {
+
154  return get<uint64_t>();
+
155 }
+
156 simdjson_inline simdjson_result<dom::element>::operator int64_t() const noexcept(false) {
+
157  return get<int64_t>();
+
158 }
+
159 simdjson_inline simdjson_result<dom::element>::operator double() const noexcept(false) {
+
160  return get<double>();
+
161 }
+
162 simdjson_inline simdjson_result<dom::element>::operator dom::array() const noexcept(false) {
+
163  return get<dom::array>();
+
164 }
+
165 simdjson_inline simdjson_result<dom::element>::operator dom::object() const noexcept(false) {
+
166  return get<dom::object>();
+
167 }
+
168 
+
169 simdjson_inline dom::array::iterator simdjson_result<dom::element>::begin() const noexcept(false) {
+
170  if (error()) { throw simdjson_error(error()); }
+
171  return first.begin();
+
172 }
+
173 simdjson_inline dom::array::iterator simdjson_result<dom::element>::end() const noexcept(false) {
+
174  if (error()) { throw simdjson_error(error()); }
+
175  return first.end();
+
176 }
+
177 
+
178 #endif // SIMDJSON_EXCEPTIONS
+
179 
+
180 namespace dom {
+
181 
+
182 //
+
183 // element inline implementation
+
184 //
+
185 simdjson_inline element::element() noexcept : tape{} {}
+
186 simdjson_inline element::element(const internal::tape_ref &_tape) noexcept : tape{_tape} { }
+
187 
+
188 inline element_type element::type() const noexcept {
+
189  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
190  auto tape_type = tape.tape_ref_type();
+
191  return tape_type == internal::tape_type::FALSE_VALUE ? element_type::BOOL : static_cast<element_type>(tape_type);
+
192 }
+
193 
+
194 inline simdjson_result<bool> element::get_bool() const noexcept {
+
195  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
196  if(tape.is_true()) {
+
197  return true;
+
198  } else if(tape.is_false()) {
+
199  return false;
+
200  }
+
201  return INCORRECT_TYPE;
+
202 }
+ +
204  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
205  switch (tape.tape_ref_type()) {
+
206  case internal::tape_type::STRING: {
+
207  return tape.get_c_str();
+
208  }
+
209  default:
+
210  return INCORRECT_TYPE;
+
211  }
+
212 }
+ +
214  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
215  switch (tape.tape_ref_type()) {
+
216  case internal::tape_type::STRING: {
+
217  return tape.get_string_length();
+
218  }
+
219  default:
+
220  return INCORRECT_TYPE;
+
221  }
+
222 }
+ +
224  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
225  switch (tape.tape_ref_type()) {
+
226  case internal::tape_type::STRING:
+
227  return tape.get_string_view();
+
228  default:
+
229  return INCORRECT_TYPE;
+
230  }
+
231 }
+ +
233  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
234  if(simdjson_unlikely(!tape.is_uint64())) { // branch rarely taken
+
235  if(tape.is_int64()) {
+
236  int64_t result = tape.next_tape_value<int64_t>();
+
237  if (result < 0) {
+
238  return NUMBER_OUT_OF_RANGE;
+
239  }
+
240  return uint64_t(result);
+
241  }
+
242  return INCORRECT_TYPE;
+
243  }
+
244  return tape.next_tape_value<int64_t>();
+
245 }
+ +
247  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
248  if(simdjson_unlikely(!tape.is_int64())) { // branch rarely taken
+
249  if(tape.is_uint64()) {
+
250  uint64_t result = tape.next_tape_value<uint64_t>();
+
251  // Wrapping max in parens to handle Windows issue: https://stackoverflow.com/questions/11544073/how-do-i-deal-with-the-max-macro-in-windows-h-colliding-with-max-in-std
+
252  if (result > uint64_t((std::numeric_limits<int64_t>::max)())) {
+
253  return NUMBER_OUT_OF_RANGE;
+
254  }
+
255  return static_cast<int64_t>(result);
+
256  }
+
257  return INCORRECT_TYPE;
+
258  }
+
259  return tape.next_tape_value<int64_t>();
+
260 }
+ +
262  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
263  // Performance considerations:
+
264  // 1. Querying tape_ref_type() implies doing a shift, it is fast to just do a straight
+
265  // comparison.
+
266  // 2. Using a switch-case relies on the compiler guessing what kind of code generation
+
267  // we want... But the compiler cannot know that we expect the type to be "double"
+
268  // most of the time.
+
269  // We can expect get<double> to refer to a double type almost all the time.
+
270  // It is important to craft the code accordingly so that the compiler can use this
+
271  // information. (This could also be solved with profile-guided optimization.)
+
272  if(simdjson_unlikely(!tape.is_double())) { // branch rarely taken
+
273  if(tape.is_uint64()) {
+
274  return double(tape.next_tape_value<uint64_t>());
+
275  } else if(tape.is_int64()) {
+
276  return double(tape.next_tape_value<int64_t>());
+
277  }
+
278  return INCORRECT_TYPE;
+
279  }
+
280  // this is common:
+
281  return tape.next_tape_value<double>();
+
282 }
+ +
284  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
285  switch (tape.tape_ref_type()) {
+
286  case internal::tape_type::START_ARRAY:
+
287  return array(tape);
+
288  default:
+
289  return INCORRECT_TYPE;
+
290  }
+
291 }
+ +
293  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
294  switch (tape.tape_ref_type()) {
+
295  case internal::tape_type::START_OBJECT:
+
296  return object(tape);
+
297  default:
+
298  return INCORRECT_TYPE;
+
299  }
+
300 }
+
301 
+
302 template<typename T>
+
303 simdjson_warn_unused simdjson_inline error_code element::get(T &value) const noexcept {
+
304  return get<T>().get(value);
+
305 }
+
306 // An element-specific version prevents recursion with simdjson_result::get<element>(value)
+
307 template<>
+
308 simdjson_warn_unused simdjson_inline error_code element::get<element>(element &value) const noexcept {
+
309  value = element(tape);
+
310  return SUCCESS;
+
311 }
+
312 template<typename T>
+
313 inline void element::tie(T &value, error_code &error) && noexcept {
+
314  error = get<T>(value);
+
315 }
+
316 
+
317 template<typename T>
+
318 simdjson_inline bool element::is() const noexcept {
+
319  auto result = get<T>();
+
320  return !result.error();
+
321 }
+
322 
+
323 template<> inline simdjson_result<array> element::get<array>() const noexcept { return get_array(); }
+
324 template<> inline simdjson_result<object> element::get<object>() const noexcept { return get_object(); }
+
325 template<> inline simdjson_result<const char *> element::get<const char *>() const noexcept { return get_c_str(); }
+
326 template<> inline simdjson_result<std::string_view> element::get<std::string_view>() const noexcept { return get_string(); }
+
327 template<> inline simdjson_result<int64_t> element::get<int64_t>() const noexcept { return get_int64(); }
+
328 template<> inline simdjson_result<uint64_t> element::get<uint64_t>() const noexcept { return get_uint64(); }
+
329 template<> inline simdjson_result<double> element::get<double>() const noexcept { return get_double(); }
+
330 template<> inline simdjson_result<bool> element::get<bool>() const noexcept { return get_bool(); }
+
331 
+
332 inline bool element::is_array() const noexcept { return is<array>(); }
+
333 inline bool element::is_object() const noexcept { return is<object>(); }
+
334 inline bool element::is_string() const noexcept { return is<std::string_view>(); }
+
335 inline bool element::is_int64() const noexcept { return is<int64_t>(); }
+
336 inline bool element::is_uint64() const noexcept { return is<uint64_t>(); }
+
337 inline bool element::is_double() const noexcept { return is<double>(); }
+
338 inline bool element::is_bool() const noexcept { return is<bool>(); }
+
339 inline bool element::is_number() const noexcept { return is_int64() || is_uint64() || is_double(); }
+
340 
+
341 inline bool element::is_null() const noexcept {
+
342  return tape.is_null_on_tape();
+
343 }
+
344 
+
345 #if SIMDJSON_EXCEPTIONS
+
346 
+
347 inline element::operator bool() const noexcept(false) { return get<bool>(); }
+
348 inline element::operator const char*() const noexcept(false) { return get<const char *>(); }
+
349 inline element::operator std::string_view() const noexcept(false) { return get<std::string_view>(); }
+
350 inline element::operator uint64_t() const noexcept(false) { return get<uint64_t>(); }
+
351 inline element::operator int64_t() const noexcept(false) { return get<int64_t>(); }
+
352 inline element::operator double() const noexcept(false) { return get<double>(); }
+
353 inline element::operator array() const noexcept(false) { return get<array>(); }
+
354 inline element::operator object() const noexcept(false) { return get<object>(); }
+
355 
+
356 inline array::iterator element::begin() const noexcept(false) {
+
357  return get<array>().begin();
+
358 }
+
359 inline array::iterator element::end() const noexcept(false) {
+
360  return get<array>().end();
+
361 }
+
362 
+
363 #endif // SIMDJSON_EXCEPTIONS
+
364 
+
365 inline simdjson_result<element> element::operator[](std::string_view key) const noexcept {
+
366  return at_key(key);
+
367 }
+
368 inline simdjson_result<element> element::operator[](const char *key) const noexcept {
+
369  return at_key(key);
+
370 }
+
371 
+
372 inline simdjson_result<element> element::at_pointer(std::string_view json_pointer) const noexcept {
+
373  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
374  switch (tape.tape_ref_type()) {
+
375  case internal::tape_type::START_OBJECT:
+
376  return object(tape).at_pointer(json_pointer);
+
377  case internal::tape_type::START_ARRAY:
+
378  return array(tape).at_pointer(json_pointer);
+
379  default: {
+
380  if(!json_pointer.empty()) { // a non-empty string is invalid on an atom
+
381  return INVALID_JSON_POINTER;
+
382  }
+
383  // an empty string means that we return the current node
+
384  dom::element copy(*this);
+
385  return simdjson_result<element>(std::move(copy));
+
386  }
+
387  }
+
388 }
+
389 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
390 [[deprecated("For standard compliance, use at_pointer instead, and prefix your pointers with a slash '/', see RFC6901 ")]]
+
391 inline simdjson_result<element> element::at(std::string_view json_pointer) const noexcept {
+
392  // version 0.4 of simdjson allowed non-compliant pointers
+
393  auto std_pointer = (json_pointer.empty() ? "" : "/") + std::string(json_pointer.begin(), json_pointer.end());
+
394  return at_pointer(std_pointer);
+
395 }
+
396 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
397 
+
398 inline simdjson_result<element> element::at(size_t index) const noexcept {
+
399  return get<array>().at(index);
+
400 }
+
401 inline simdjson_result<element> element::at_key(std::string_view key) const noexcept {
+
402  return get<object>().at_key(key);
+
403 }
+
404 inline simdjson_result<element> element::at_key_case_insensitive(std::string_view key) const noexcept {
+
405  return get<object>().at_key_case_insensitive(key);
+
406 }
+
407 
+
408 inline bool element::dump_raw_tape(std::ostream &out) const noexcept {
+
409  SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914
+
410  return tape.doc->dump_raw_tape(out);
+
411 }
+
412 
+
413 
+
414 inline std::ostream& operator<<(std::ostream& out, element_type type) {
+
415  switch (type) {
+
416  case element_type::ARRAY:
+
417  return out << "array";
+
418  case element_type::OBJECT:
+
419  return out << "object";
+
420  case element_type::INT64:
+
421  return out << "int64_t";
+
422  case element_type::UINT64:
+
423  return out << "uint64_t";
+
424  case element_type::DOUBLE:
+
425  return out << "double";
+
426  case element_type::STRING:
+
427  return out << "string";
+
428  case element_type::BOOL:
+
429  return out << "bool";
+
430  case element_type::NULL_VALUE:
+
431  return out << "null";
+
432  default:
+
433  return out << "unexpected content!!!"; // abort() usage is forbidden in the library
+
434  }
+
435 }
+
436 
+
437 } // namespace dom
+
438 
+
439 } // namespace simdjson
+
440 
+
441 #endif // SIMDJSON_INLINE_ELEMENT_H
+ +
JSON array.
Definition: array.h:22
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: array-inl.h:71
+
A JSON element.
Definition: element.h:40
+
bool is_object() const noexcept
Whether this element is a json object.
Definition: element-inl.h:333
+
bool is_double() const noexcept
Whether this element is a json number that fits in a double.
Definition: element-inl.h:337
+
simdjson_inline element_type type() const noexcept
The type of this element.
Definition: element-inl.h:188
+
bool is_number() const noexcept
Whether this element is a json number.
Definition: element-inl.h:339
+
simdjson_result< const char * > get_c_str() const noexcept
Cast this element to a null-terminated C string.
Definition: element-inl.h:203
+
simdjson_result< element > at_pointer(const std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: element-inl.h:372
+
simdjson_result< double > get_double() const noexcept
Cast this element to a double floating-point.
Definition: element-inl.h:261
+
simdjson_result< T > get() const noexcept
Get the value as the provided type (T).
Definition: element.h:220
+
simdjson_inline bool is() const noexcept
Tell whether the value can be cast to provided type (T).
Definition: element-inl.h:318
+
simdjson_result< element > at_key_case_insensitive(std::string_view key) const noexcept
Get the value associated with the given key in a case-insensitive manner.
Definition: element-inl.h:404
+
void tie(T &value, error_code &error) &&noexcept
Get the value as the provided type (T), setting error if it's not the given type.
+
simdjson_result< bool > get_bool() const noexcept
Cast this element to a bool.
Definition: element-inl.h:194
+
bool is_string() const noexcept
Whether this element is a json string.
Definition: element-inl.h:334
+
simdjson_result< element > at_key(std::string_view key) const noexcept
Get the value associated with the given key.
Definition: element-inl.h:401
+
dom::array::iterator end() const noexcept(false)
Iterate over each element in this array.
Definition: element-inl.h:359
+
simdjson_result< array > get_array() const noexcept
Cast this element to an array.
Definition: element-inl.h:283
+
simdjson_result< size_t > get_string_length() const noexcept
Gives the length in bytes of the string.
Definition: element-inl.h:213
+
simdjson_inline element() noexcept
Create a new, invalid element.
Definition: element-inl.h:185
+
simdjson_result< uint64_t > get_uint64() const noexcept
Cast this element to an unsigned integer.
Definition: element-inl.h:232
+
dom::array::iterator begin() const noexcept(false)
Iterate over each element in this array.
Definition: element-inl.h:356
+
simdjson_result< element > at(const std::string_view json_pointer) const noexcept
Version 0.4 of simdjson used an incorrect interpretation of the JSON Pointer standard and allowed the...
Definition: element-inl.h:391
+
simdjson_result< int64_t > get_int64() const noexcept
Cast this element to a signed integer.
Definition: element-inl.h:246
+
simdjson_result< object > get_object() const noexcept
Cast this element to an object.
Definition: element-inl.h:292
+
bool is_uint64() const noexcept
Whether this element is a json number that fits in an unsigned 64-bit integer.
Definition: element-inl.h:336
+
simdjson_result< element > operator[](std::string_view key) const noexcept
Get the value associated with the given key.
Definition: element-inl.h:365
+
bool is_int64() const noexcept
Whether this element is a json number that fits in a signed 64-bit integer.
Definition: element-inl.h:335
+
bool is_null() const noexcept
Whether this element is a json null.
Definition: element-inl.h:341
+
simdjson_result< std::string_view > get_string() const noexcept
Cast this element to a string.
Definition: element-inl.h:223
+
bool is_array() const noexcept
Whether this element is a json array.
Definition: element-inl.h:332
+
bool is_bool() const noexcept
Whether this element is a json true or false.
Definition: element-inl.h:338
+
JSON object.
Definition: object.h:22
+
simdjson_result< element > at_pointer(std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: object-inl.h:86
+
We want to support argument-dependent lookup (ADL).
+
std::ostream & operator<<(std::ostream &out, error_code error) noexcept
Write the error message to the output stream.
Definition: error-inl.h:36
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ NUMBER_OUT_OF_RANGE
JSON number does not fit in 64 bits.
Definition: error.h:35
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
Definition: error-inl.h:127
+
+
+ + + + diff --git a/element_8h_source.html b/element_8h_source.html new file mode 100644 index 000000000..b8f8453ff --- /dev/null +++ b/element_8h_source.html @@ -0,0 +1,336 @@ + + + + + + + +simdjson: include/simdjson/dom/element.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
element.h
+
+
+
1 #ifndef SIMDJSON_DOM_ELEMENT_H
+
2 #define SIMDJSON_DOM_ELEMENT_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/error.h"
+
6 #include "simdjson/internal/tape_ref.h"
+
7 #include <ostream>
+
8 
+
9 namespace simdjson {
+
10 namespace internal {
+
11 template<typename T>
+
12 class string_builder;
+
13 }
+
14 namespace dom {
+
15 class array;
+
16 class document;
+
17 class object;
+
18 
+
23 enum class element_type {
+
24  ARRAY = '[',
+
25  OBJECT = '{',
+
26  INT64 = 'l',
+
27  UINT64 = 'u',
+
28  DOUBLE = 'd',
+
29  STRING = '"',
+
30  BOOL = 't',
+
31  NULL_VALUE = 'n'
+
32 };
+
33 
+
40 class element {
+
41 public:
+
43  simdjson_inline element() noexcept;
+
44 
+
46  simdjson_inline element_type type() const noexcept;
+
47 
+
54  inline simdjson_result<array> get_array() const noexcept;
+
61  inline simdjson_result<object> get_object() const noexcept;
+
78  inline simdjson_result<const char *> get_c_str() const noexcept;
+
88  inline simdjson_result<size_t> get_string_length() const noexcept;
+
98  inline simdjson_result<std::string_view> get_string() const noexcept;
+
106  inline simdjson_result<int64_t> get_int64() const noexcept;
+
114  inline simdjson_result<uint64_t> get_uint64() const noexcept;
+
121  inline simdjson_result<double> get_double() const noexcept;
+
128  inline simdjson_result<bool> get_bool() const noexcept;
+
129 
+
135  inline bool is_array() const noexcept;
+
141  inline bool is_object() const noexcept;
+
147  inline bool is_string() const noexcept;
+
153  inline bool is_int64() const noexcept;
+
159  inline bool is_uint64() const noexcept;
+
165  inline bool is_double() const noexcept;
+
166 
+
172  inline bool is_number() const noexcept;
+
173 
+
179  inline bool is_bool() const noexcept;
+
183  inline bool is_null() const noexcept;
+
184 
+
197  template<typename T>
+
198  simdjson_inline bool is() const noexcept;
+
199 
+
219  template<typename T>
+
220  inline simdjson_result<T> get() const noexcept {
+
221  // Unless the simdjson library provides an inline implementation, calling this method should
+
222  // immediately fail.
+
223  static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library.");
+
224  }
+
225 
+
242  template<typename T>
+
243  simdjson_warn_unused simdjson_inline error_code get(T &value) const noexcept;
+
244 
+
260  template<typename T>
+
261  inline void tie(T &value, error_code &error) && noexcept;
+
262 
+
263 #if SIMDJSON_EXCEPTIONS
+
270  inline operator bool() const noexcept(false);
+
271 
+
283  inline explicit operator const char*() const noexcept(false);
+
284 
+
294  inline operator std::string_view() const noexcept(false);
+
295 
+
303  inline operator uint64_t() const noexcept(false);
+
311  inline operator int64_t() const noexcept(false);
+
319  inline operator double() const noexcept(false);
+
326  inline operator array() const noexcept(false);
+
333  inline operator object() const noexcept(false);
+
334 
+
341  inline dom::array::iterator begin() const noexcept(false);
+
342 
+
349  inline dom::array::iterator end() const noexcept(false);
+
350 #endif // SIMDJSON_EXCEPTIONS
+
351 
+
365  inline simdjson_result<element> operator[](std::string_view key) const noexcept;
+
366 
+
380  inline simdjson_result<element> operator[](const char *key) const noexcept;
+
381 
+
404  inline simdjson_result<element> at_pointer(const std::string_view json_pointer) const noexcept;
+
405 
+
406 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
427  [[deprecated("For standard compliance, use at_pointer instead, and prefix your pointers with a slash '/', see RFC6901 ")]]
+
428  inline simdjson_result<element> at(const std::string_view json_pointer) const noexcept;
+
429 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
430 
+
437  inline simdjson_result<element> at(size_t index) const noexcept;
+
438 
+
451  inline simdjson_result<element> at_key(std::string_view key) const noexcept;
+
452 
+
461  inline simdjson_result<element> at_key_case_insensitive(std::string_view key) const noexcept;
+
462 
+
464  inline bool dump_raw_tape(std::ostream &out) const noexcept;
+
465 
+
466 private:
+
467  simdjson_inline element(const internal::tape_ref &tape) noexcept;
+
468  internal::tape_ref tape;
+
469  friend class document;
+
470  friend class object;
+
471  friend class array;
+
472  friend struct simdjson_result<element>;
+
473  template<typename T>
+
474  friend class simdjson::internal::string_builder;
+
475 
+
476 };
+
477 
+
478 } // namespace dom
+
479 
+
481 template<>
+
482 struct simdjson_result<dom::element> : public internal::simdjson_result_base<dom::element> {
+
483 public:
+
484  simdjson_inline simdjson_result() noexcept;
+
485  simdjson_inline simdjson_result(dom::element &&value) noexcept;
+
486  simdjson_inline simdjson_result(error_code error) noexcept;
+
487 
+
488  simdjson_inline simdjson_result<dom::element_type> type() const noexcept;
+
489  template<typename T>
+
490  simdjson_inline bool is() const noexcept;
+
491  template<typename T>
+
492  simdjson_inline simdjson_result<T> get() const noexcept;
+
493  template<typename T>
+
494  simdjson_warn_unused simdjson_inline error_code get(T &value) const noexcept;
+
495 
+
496  simdjson_inline simdjson_result<dom::array> get_array() const noexcept;
+
497  simdjson_inline simdjson_result<dom::object> get_object() const noexcept;
+
498  simdjson_inline simdjson_result<const char *> get_c_str() const noexcept;
+
499  simdjson_inline simdjson_result<size_t> get_string_length() const noexcept;
+
500  simdjson_inline simdjson_result<std::string_view> get_string() const noexcept;
+
501  simdjson_inline simdjson_result<int64_t> get_int64() const noexcept;
+
502  simdjson_inline simdjson_result<uint64_t> get_uint64() const noexcept;
+
503  simdjson_inline simdjson_result<double> get_double() const noexcept;
+
504  simdjson_inline simdjson_result<bool> get_bool() const noexcept;
+
505 
+
506  simdjson_inline bool is_array() const noexcept;
+
507  simdjson_inline bool is_object() const noexcept;
+
508  simdjson_inline bool is_string() const noexcept;
+
509  simdjson_inline bool is_int64() const noexcept;
+
510  simdjson_inline bool is_uint64() const noexcept;
+
511  simdjson_inline bool is_double() const noexcept;
+
512  simdjson_inline bool is_number() const noexcept;
+
513  simdjson_inline bool is_bool() const noexcept;
+
514  simdjson_inline bool is_null() const noexcept;
+
515 
+
516  simdjson_inline simdjson_result<dom::element> operator[](std::string_view key) const noexcept;
+
517  simdjson_inline simdjson_result<dom::element> operator[](const char *key) const noexcept;
+
518  simdjson_inline simdjson_result<dom::element> at_pointer(const std::string_view json_pointer) const noexcept;
+
519  [[deprecated("For standard compliance, use at_pointer instead, and prefix your pointers with a slash '/', see RFC6901 ")]]
+
520  simdjson_inline simdjson_result<dom::element> at(const std::string_view json_pointer) const noexcept;
+
521  simdjson_inline simdjson_result<dom::element> at(size_t index) const noexcept;
+
522  simdjson_inline simdjson_result<dom::element> at_key(std::string_view key) const noexcept;
+
523  simdjson_inline simdjson_result<dom::element> at_key_case_insensitive(std::string_view key) const noexcept;
+
524 
+
525 #if SIMDJSON_EXCEPTIONS
+
526  simdjson_inline operator bool() const noexcept(false);
+
527  simdjson_inline explicit operator const char*() const noexcept(false);
+
528  simdjson_inline operator std::string_view() const noexcept(false);
+
529  simdjson_inline operator uint64_t() const noexcept(false);
+
530  simdjson_inline operator int64_t() const noexcept(false);
+
531  simdjson_inline operator double() const noexcept(false);
+
532  simdjson_inline operator dom::array() const noexcept(false);
+
533  simdjson_inline operator dom::object() const noexcept(false);
+
534 
+
535  simdjson_inline dom::array::iterator begin() const noexcept(false);
+
536  simdjson_inline dom::array::iterator end() const noexcept(false);
+
537 #endif // SIMDJSON_EXCEPTIONS
+
538 };
+
539 
+
540 
+
541 } // namespace simdjson
+
542 
+
543 #endif // SIMDJSON_DOM_DOCUMENT_H
+ +
JSON array.
Definition: array.h:22
+
A parsed JSON document.
Definition: document.h:18
+
A JSON element.
Definition: element.h:40
+
bool is_object() const noexcept
Whether this element is a json object.
Definition: element-inl.h:333
+
bool is_double() const noexcept
Whether this element is a json number that fits in a double.
Definition: element-inl.h:337
+
simdjson_inline element_type type() const noexcept
The type of this element.
Definition: element-inl.h:188
+
bool is_number() const noexcept
Whether this element is a json number.
Definition: element-inl.h:339
+
simdjson_result< const char * > get_c_str() const noexcept
Cast this element to a null-terminated C string.
Definition: element-inl.h:203
+
simdjson_result< element > at_pointer(const std::string_view json_pointer) const noexcept
Get the value associated with the given JSON pointer.
Definition: element-inl.h:372
+
simdjson_result< double > get_double() const noexcept
Cast this element to a double floating-point.
Definition: element-inl.h:261
+
simdjson_result< T > get() const noexcept
Get the value as the provided type (T).
Definition: element.h:220
+
simdjson_inline bool is() const noexcept
Tell whether the value can be cast to provided type (T).
Definition: element-inl.h:318
+
simdjson_result< element > at_key_case_insensitive(std::string_view key) const noexcept
Get the value associated with the given key in a case-insensitive manner.
Definition: element-inl.h:404
+
void tie(T &value, error_code &error) &&noexcept
Get the value as the provided type (T), setting error if it's not the given type.
+
simdjson_result< bool > get_bool() const noexcept
Cast this element to a bool.
Definition: element-inl.h:194
+
bool is_string() const noexcept
Whether this element is a json string.
Definition: element-inl.h:334
+
simdjson_result< element > at_key(std::string_view key) const noexcept
Get the value associated with the given key.
Definition: element-inl.h:401
+
dom::array::iterator end() const noexcept(false)
Iterate over each element in this array.
Definition: element-inl.h:359
+
simdjson_result< array > get_array() const noexcept
Cast this element to an array.
Definition: element-inl.h:283
+
simdjson_result< size_t > get_string_length() const noexcept
Gives the length in bytes of the string.
Definition: element-inl.h:213
+
simdjson_inline element() noexcept
Create a new, invalid element.
Definition: element-inl.h:185
+
simdjson_result< uint64_t > get_uint64() const noexcept
Cast this element to an unsigned integer.
Definition: element-inl.h:232
+
dom::array::iterator begin() const noexcept(false)
Iterate over each element in this array.
Definition: element-inl.h:356
+
simdjson_result< element > at(const std::string_view json_pointer) const noexcept
Version 0.4 of simdjson used an incorrect interpretation of the JSON Pointer standard and allowed the...
Definition: element-inl.h:391
+
simdjson_result< int64_t > get_int64() const noexcept
Cast this element to a signed integer.
Definition: element-inl.h:246
+
simdjson_result< object > get_object() const noexcept
Cast this element to an object.
Definition: element-inl.h:292
+
bool is_uint64() const noexcept
Whether this element is a json number that fits in an unsigned 64-bit integer.
Definition: element-inl.h:336
+
simdjson_result< element > operator[](std::string_view key) const noexcept
Get the value associated with the given key.
Definition: element-inl.h:365
+
bool is_int64() const noexcept
Whether this element is a json number that fits in a signed 64-bit integer.
Definition: element-inl.h:335
+
bool is_null() const noexcept
Whether this element is a json null.
Definition: element-inl.h:341
+
simdjson_result< std::string_view > get_string() const noexcept
Cast this element to a string.
Definition: element-inl.h:223
+
bool is_array() const noexcept
Whether this element is a json array.
Definition: element-inl.h:332
+
bool is_bool() const noexcept
Whether this element is a json true or false.
Definition: element-inl.h:338
+
JSON object.
Definition: object.h:22
+
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
The result of a JSON conversion that may fail.
Definition: array.h:149
+
The result of a JSON navigation that may fail.
Definition: element.h:482
+
The result of a JSON conversion that may fail.
Definition: object.h:238
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
Definition: error-inl.h:127
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/error-inl_8h_source.html b/error-inl_8h_source.html new file mode 100644 index 000000000..6621d1859 --- /dev/null +++ b/error-inl_8h_source.html @@ -0,0 +1,299 @@ + + + + + + + +simdjson: include/simdjson/error-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
error-inl.h
+
+
+
1 #ifndef SIMDJSON_INLINE_ERROR_H
+
2 #define SIMDJSON_INLINE_ERROR_H
+
3 
+
4 #include <cstring>
+
5 #include <string>
+
6 #include <utility>
+
7 #include "simdjson/error.h"
+
8 
+
9 namespace simdjson {
+
10 namespace internal {
+
11  // We store the error code so we can validate the error message is associated with the right code
+
12  struct error_code_info {
+
13  error_code code;
+
14  const char* message; // do not use a fancy std::string where a simple C string will do (no alloc, no destructor)
+
15  };
+
16  // These MUST match the codes in error_code. We check this constraint in basictests.
+
17  extern SIMDJSON_DLLIMPORTEXPORT const error_code_info error_codes[];
+
18 } // namespace internal
+
19 
+
20 
+
21 inline const char *error_message(error_code error) noexcept {
+
22  // If you're using error_code, we're trusting you got it from the enum.
+
23  return internal::error_codes[int(error)].message;
+
24 }
+
25 
+
26 // deprecated function
+
27 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
28 inline const std::string error_message(int error) noexcept {
+
29  if (error < 0 || error >= error_code::NUM_ERROR_CODES) {
+
30  return internal::error_codes[UNEXPECTED_ERROR].message;
+
31  }
+
32  return internal::error_codes[error].message;
+
33 }
+
34 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
35 
+
36 inline std::ostream& operator<<(std::ostream& out, error_code error) noexcept {
+
37  return out << error_message(error);
+
38 }
+
39 
+
40 namespace internal {
+
41 
+
42 //
+
43 // internal::simdjson_result_base<T> inline implementation
+
44 //
+
45 
+
46 template<typename T>
+
47 simdjson_inline void simdjson_result_base<T>::tie(T &value, error_code &error) && noexcept {
+
48  error = this->second;
+
49  if (!error) {
+
50  value = std::forward<simdjson_result_base<T>>(*this).first;
+
51  }
+
52 }
+
53 
+
54 template<typename T>
+
55 simdjson_warn_unused simdjson_inline error_code simdjson_result_base<T>::get(T &value) && noexcept {
+
56  error_code error;
+
57  std::forward<simdjson_result_base<T>>(*this).tie(value, error);
+
58  return error;
+
59 }
+
60 
+
61 template<typename T>
+
62 simdjson_inline error_code simdjson_result_base<T>::error() const noexcept {
+
63  return this->second;
+
64 }
+
65 
+
66 #if SIMDJSON_EXCEPTIONS
+
67 
+
68 template<typename T>
+
69 simdjson_inline T& simdjson_result_base<T>::value() & noexcept(false) {
+
70  if (error()) { throw simdjson_error(error()); }
+
71  return this->first;
+
72 }
+
73 
+
74 template<typename T>
+
75 simdjson_inline T&& simdjson_result_base<T>::value() && noexcept(false) {
+
76  return std::forward<simdjson_result_base<T>>(*this).take_value();
+
77 }
+
78 
+
79 template<typename T>
+
80 simdjson_inline T&& simdjson_result_base<T>::take_value() && noexcept(false) {
+
81  if (error()) { throw simdjson_error(error()); }
+
82  return std::forward<T>(this->first);
+
83 }
+
84 
+
85 template<typename T>
+
86 simdjson_inline simdjson_result_base<T>::operator T&&() && noexcept(false) {
+
87  return std::forward<simdjson_result_base<T>>(*this).take_value();
+
88 }
+
89 
+
90 #endif // SIMDJSON_EXCEPTIONS
+
91 
+
92 template<typename T>
+
93 simdjson_inline const T& simdjson_result_base<T>::value_unsafe() const& noexcept {
+
94  return this->first;
+
95 }
+
96 
+
97 template<typename T>
+
98 simdjson_inline T&& simdjson_result_base<T>::value_unsafe() && noexcept {
+
99  return std::forward<T>(this->first);
+
100 }
+
101 
+
102 template<typename T>
+
103 simdjson_inline simdjson_result_base<T>::simdjson_result_base(T &&value, error_code error) noexcept
+
104  : std::pair<T, error_code>(std::forward<T>(value), error) {}
+
105 template<typename T>
+
106 simdjson_inline simdjson_result_base<T>::simdjson_result_base(error_code error) noexcept
+
107  : simdjson_result_base(T{}, error) {}
+
108 template<typename T>
+
109 simdjson_inline simdjson_result_base<T>::simdjson_result_base(T &&value) noexcept
+
110  : simdjson_result_base(std::forward<T>(value), SUCCESS) {}
+
111 template<typename T>
+
112 simdjson_inline simdjson_result_base<T>::simdjson_result_base() noexcept
+
113  : simdjson_result_base(T{}, UNINITIALIZED) {}
+
114 
+
115 } // namespace internal
+
116 
+
120 
+
121 template<typename T>
+
122 simdjson_inline void simdjson_result<T>::tie(T &value, error_code &error) && noexcept {
+
123  std::forward<internal::simdjson_result_base<T>>(*this).tie(value, error);
+
124 }
+
125 
+
126 template<typename T>
+
127 simdjson_warn_unused simdjson_inline error_code simdjson_result<T>::get(T &value) && noexcept {
+
128  return std::forward<internal::simdjson_result_base<T>>(*this).get(value);
+
129 }
+
130 
+
131 template<typename T>
+
132 simdjson_inline error_code simdjson_result<T>::error() const noexcept {
+
133  return internal::simdjson_result_base<T>::error();
+
134 }
+
135 
+
136 #if SIMDJSON_EXCEPTIONS
+
137 
+
138 template<typename T>
+
139 simdjson_inline T& simdjson_result<T>::value() & noexcept(false) {
+
140  return internal::simdjson_result_base<T>::value();
+
141 }
+
142 
+
143 template<typename T>
+
144 simdjson_inline T&& simdjson_result<T>::value() && noexcept(false) {
+
145  return std::forward<internal::simdjson_result_base<T>>(*this).value();
+
146 }
+
147 
+
148 template<typename T>
+
149 simdjson_inline T&& simdjson_result<T>::take_value() && noexcept(false) {
+
150  return std::forward<internal::simdjson_result_base<T>>(*this).take_value();
+
151 }
+
152 
+
153 template<typename T>
+
154 simdjson_inline simdjson_result<T>::operator T&&() && noexcept(false) {
+
155  return std::forward<internal::simdjson_result_base<T>>(*this).take_value();
+
156 }
+
157 
+
158 #endif // SIMDJSON_EXCEPTIONS
+
159 
+
160 template<typename T>
+
161 simdjson_inline const T& simdjson_result<T>::value_unsafe() const& noexcept {
+
162  return internal::simdjson_result_base<T>::value_unsafe();
+
163 }
+
164 
+
165 template<typename T>
+
166 simdjson_inline T&& simdjson_result<T>::value_unsafe() && noexcept {
+
167  return std::forward<internal::simdjson_result_base<T>>(*this).value_unsafe();
+
168 }
+
169 
+
170 template<typename T>
+
171 simdjson_inline simdjson_result<T>::simdjson_result(T &&value, error_code error) noexcept
+
172  : internal::simdjson_result_base<T>(std::forward<T>(value), error) {}
+
173 template<typename T>
+
174 simdjson_inline simdjson_result<T>::simdjson_result(error_code error) noexcept
+
175  : internal::simdjson_result_base<T>(error) {}
+
176 template<typename T>
+
177 simdjson_inline simdjson_result<T>::simdjson_result(T &&value) noexcept
+
178  : internal::simdjson_result_base<T>(std::forward<T>(value)) {}
+
179 template<typename T>
+
180 simdjson_inline simdjson_result<T>::simdjson_result() noexcept
+
181  : internal::simdjson_result_base<T>() {}
+
182 
+
183 } // namespace simdjson
+
184 
+
185 #endif // SIMDJSON_INLINE_ERROR_H
+
We want to support argument-dependent lookup (ADL).
+
std::ostream & operator<<(std::ostream &out, error_code error) noexcept
Write the error message to the output stream.
Definition: error-inl.h:36
+
const char * error_message(error_code error) noexcept
Get the error message for the given error code.
Definition: error-inl.h:21
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ UNEXPECTED_ERROR
indicative of a bug in simdjson
Definition: error.h:41
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline const T & value_unsafe() const &noexcept
Get the result value.
+
simdjson_inline T && take_value() &&noexcept(false)
Take the result value (move it).
Definition: error-inl.h:149
+
simdjson_inline void tie(T &value, error_code &error) &&noexcept
Move the value and the error to the provided variables.
Definition: error-inl.h:122
+
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
Definition: error-inl.h:127
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/error_8h_source.html b/error_8h_source.html new file mode 100644 index 000000000..0d68d5478 --- /dev/null +++ b/error_8h_source.html @@ -0,0 +1,284 @@ + + + + + + + +simdjson: include/simdjson/error.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
error.h
+
+
+
1 #ifndef SIMDJSON_ERROR_H
+
2 #define SIMDJSON_ERROR_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include <string>
+
6 
+
7 namespace simdjson {
+
8 
+
17 enum error_code {
+
18  SUCCESS = 0,
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
49  NUM_ERROR_CODES
+
50 };
+
51 
+
62 inline const char *error_message(error_code error) noexcept;
+
63 
+
67 inline std::ostream& operator<<(std::ostream& out, error_code error) noexcept;
+
68 
+
72 struct simdjson_error : public std::exception {
+
77  simdjson_error(error_code error) noexcept : _error{error} { }
+
79  const char *what() const noexcept { return error_message(error()); }
+
81  error_code error() const noexcept { return _error; }
+
82 private:
+
84  error_code _error;
+
85 };
+
86 
+
87 namespace internal {
+
88 
+
109 template<typename T>
+
110 struct simdjson_result_base : protected std::pair<T, error_code> {
+
111 
+
115  simdjson_inline simdjson_result_base() noexcept;
+
116 
+
120  simdjson_inline simdjson_result_base(error_code error) noexcept;
+
121 
+
125  simdjson_inline simdjson_result_base(T &&value) noexcept;
+
126 
+
130  simdjson_inline simdjson_result_base(T &&value, error_code error) noexcept;
+
131 
+
138  simdjson_inline void tie(T &value, error_code &error) && noexcept;
+
139 
+
145  simdjson_inline error_code get(T &value) && noexcept;
+
146 
+
150  simdjson_inline error_code error() const noexcept;
+
151 
+
152 #if SIMDJSON_EXCEPTIONS
+
153 
+
159  simdjson_inline T& value() & noexcept(false);
+
160 
+
166  simdjson_inline T&& value() && noexcept(false);
+
167 
+
173  simdjson_inline T&& take_value() && noexcept(false);
+
174 
+
180  simdjson_inline operator T&&() && noexcept(false);
+
181 #endif // SIMDJSON_EXCEPTIONS
+
182 
+
187  simdjson_inline const T& value_unsafe() const& noexcept;
+
188 
+
193  simdjson_inline T&& value_unsafe() && noexcept;
+
194 
+
195 }; // struct simdjson_result_base
+
196 
+
197 } // namespace internal
+
198 
+
204 template<typename T>
+
205 struct simdjson_result : public internal::simdjson_result_base<T> {
+
209  simdjson_inline simdjson_result() noexcept;
+
213  simdjson_inline simdjson_result(T &&value) noexcept;
+
217  simdjson_inline simdjson_result(error_code error_code) noexcept;
+
221  simdjson_inline simdjson_result(T &&value, error_code error) noexcept;
+
222 
+
229  simdjson_inline void tie(T &value, error_code &error) && noexcept;
+
230 
+
236  simdjson_warn_unused simdjson_inline error_code get(T &value) && noexcept;
+
237 
+
241  simdjson_inline error_code error() const noexcept;
+
242 
+
243 #if SIMDJSON_EXCEPTIONS
+
244 
+
250  simdjson_inline T& value() & noexcept(false);
+
251 
+
257  simdjson_inline T&& value() && noexcept(false);
+
258 
+
264  simdjson_inline T&& take_value() && noexcept(false);
+
265 
+
271  simdjson_inline operator T&&() && noexcept(false);
+
272 #endif // SIMDJSON_EXCEPTIONS
+
273 
+
278  simdjson_inline const T& value_unsafe() const& noexcept;
+
279 
+
284  simdjson_inline T&& value_unsafe() && noexcept;
+
285 
+
286 }; // struct simdjson_result
+
287 
+
288 #if SIMDJSON_EXCEPTIONS
+
289 
+
290 template<typename T>
+
291 inline std::ostream& operator<<(std::ostream& out, simdjson_result<T> value) { return out << value.value(); }
+
292 #endif // SIMDJSON_EXCEPTIONS
+
293 
+
294 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
298 using ErrorValues [[deprecated("This is an alias and will be removed, use error_code instead")]] = error_code;
+
299 
+
303 [[deprecated("Error codes should be stored and returned as `error_code`, use `error_message()` instead.")]]
+
304 inline const std::string error_message(int error) noexcept;
+
305 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
306 } // namespace simdjson
+
307 
+
308 #endif // SIMDJSON_ERROR_H
+
We want to support argument-dependent lookup (ADL).
+
std::ostream & operator<<(std::ostream &out, error_code error) noexcept
Write the error message to the output stream.
Definition: error-inl.h:36
+
const char * error_message(error_code error) noexcept
Get the error message for the given error code.
Definition: error-inl.h:21
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SCALAR_DOCUMENT_AS_VALUE
A scalar document is treated as a value.
Definition: error.h:46
+
@ DEPTH_ERROR
Your document exceeds the user-specified depth limitation.
Definition: error.h:22
+
@ UNCLOSED_STRING
missing quote at the end
Definition: error.h:32
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ OUT_OF_ORDER_ITERATION
tried to iterate an array or object out of order
Definition: error.h:43
+
@ UTF8_ERROR
the input is not valid UTF-8
Definition: error.h:28
+
@ OUT_OF_BOUNDS
Attempted to access location outside of document.
Definition: error.h:47
+
@ TAPE_ERROR
Something went wrong, this is a generic error.
Definition: error.h:21
+
@ NO_SUCH_FIELD
JSON field not found in object.
Definition: error.h:37
+
@ UNSUPPORTED_ARCHITECTURE
unsupported architecture
Definition: error.h:33
+
@ N_ATOM_ERROR
Problem while parsing an atom starting with the letter 'n'.
Definition: error.h:26
+
@ EMPTY
no structural element found
Definition: error.h:30
+
@ INVALID_URI_FRAGMENT
Invalid URI fragment.
Definition: error.h:40
+
@ INDEX_OUT_OF_BOUNDS
JSON array index too large.
Definition: error.h:36
+
@ NUMBER_OUT_OF_RANGE
JSON number does not fit in 64 bits.
Definition: error.h:35
+
@ STRING_ERROR
Problem while parsing a string.
Definition: error.h:23
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ T_ATOM_ERROR
Problem while parsing an atom starting with the letter 't'.
Definition: error.h:24
+
@ TRAILING_CONTENT
Unexpected trailing content in the JSON input.
Definition: error.h:48
+
@ INCOMPLETE_ARRAY_OR_OBJECT
The document ends early.
Definition: error.h:45
+
@ UNEXPECTED_ERROR
indicative of a bug in simdjson
Definition: error.h:41
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
@ UNESCAPED_CHARS
found unescaped characters in a string.
Definition: error.h:31
+
@ IO_ERROR
Error reading a file.
Definition: error.h:38
+
@ NUMBER_ERROR
Problem while parsing a number.
Definition: error.h:27
+
@ F_ATOM_ERROR
Problem while parsing an atom starting with the letter 'f'.
Definition: error.h:25
+
@ PARSER_IN_USE
parser is already in use.
Definition: error.h:42
+
@ INSUFFICIENT_PADDING
The JSON doesn't have enough padding for simdjson to safely parse it.
Definition: error.h:44
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
Exception thrown when an exception-supporting simdjson method is called.
Definition: error.h:72
+
const char * what() const noexcept
The error message.
Definition: error.h:79
+
error_code error() const noexcept
The error code.
Definition: error.h:81
+
simdjson_error(error_code error) noexcept
Create an exception from a simdjson error code.
Definition: error.h:77
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline const T & value_unsafe() const &noexcept
Get the result value.
+
simdjson_inline T && value() &&noexcept(false)
Take the result value (move it).
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/fallback_2begin_8h_source.html b/fallback_2begin_8h_source.html new file mode 100644 index 000000000..565625e77 --- /dev/null +++ b/fallback_2begin_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/fallback/begin.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
begin.h
+
+
+
1 #define SIMDJSON_IMPLEMENTATION fallback
+
+
+ + + + diff --git a/fallback_2bitmanipulation_8h_source.html b/fallback_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..55677dc3f --- /dev/null +++ b/fallback_2bitmanipulation_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: include/simdjson/fallback/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmanipulation.h
+
+
+
1 #ifndef SIMDJSON_FALLBACK_BITMANIPULATION_H
+
2 #define SIMDJSON_FALLBACK_BITMANIPULATION_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include <limits>
+
6 
+
7 namespace simdjson {
+
8 namespace SIMDJSON_IMPLEMENTATION {
+
9 namespace {
+
10 
+
11 #if defined(_MSC_VER) && !defined(_M_ARM64) && !defined(_M_X64)
+
12 static inline unsigned char _BitScanForward64(unsigned long* ret, uint64_t x) {
+
13  unsigned long x0 = (unsigned long)x, top, bottom;
+
14  _BitScanForward(&top, (unsigned long)(x >> 32));
+
15  _BitScanForward(&bottom, x0);
+
16  *ret = x0 ? bottom : 32 + top;
+
17  return x != 0;
+
18 }
+
19 static unsigned char _BitScanReverse64(unsigned long* ret, uint64_t x) {
+
20  unsigned long x1 = (unsigned long)(x >> 32), top, bottom;
+
21  _BitScanReverse(&top, x1);
+
22  _BitScanReverse(&bottom, (unsigned long)x);
+
23  *ret = x1 ? top + 32 : bottom;
+
24  return x != 0;
+
25 }
+
26 #endif
+
27 
+
28 /* result might be undefined when input_num is zero */
+
29 simdjson_inline int leading_zeroes(uint64_t input_num) {
+
30 #ifdef _MSC_VER
+
31  unsigned long leading_zero = 0;
+
32  // Search the mask data from most significant bit (MSB)
+
33  // to least significant bit (LSB) for a set bit (1).
+
34  if (_BitScanReverse64(&leading_zero, input_num))
+
35  return (int)(63 - leading_zero);
+
36  else
+
37  return 64;
+
38 #else
+
39  return __builtin_clzll(input_num);
+
40 #endif// _MSC_VER
+
41 }
+
42 
+
43 } // unnamed namespace
+
44 } // namespace SIMDJSON_IMPLEMENTATION
+
45 } // namespace simdjson
+
46 
+
47 #endif // SIMDJSON_FALLBACK_BITMANIPULATION_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/fallback_2end_8h_source.html b/fallback_2end_8h_source.html new file mode 100644 index 000000000..f656365ff --- /dev/null +++ b/fallback_2end_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/fallback/end.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
end.h
+
+
+
1 #undef SIMDJSON_IMPLEMENTATION
+
+
+ + + + diff --git a/fallback_2implementation_8h_source.html b/fallback_2implementation_8h_source.html new file mode 100644 index 000000000..eb136bf9f --- /dev/null +++ b/fallback_2implementation_8h_source.html @@ -0,0 +1,141 @@ + + + + + + + +simdjson: include/simdjson/fallback/implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation.h
+
+
+
1 #ifndef SIMDJSON_FALLBACK_IMPLEMENTATION_H
+
2 #define SIMDJSON_FALLBACK_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/implementation.h"
+
5 
+
6 namespace simdjson {
+
7 namespace fallback {
+
8 
+
9 namespace {
+
10 using namespace simdjson;
+
11 using namespace simdjson::dom;
+
12 }
+
13 
+
17 class implementation final : public simdjson::implementation {
+
18 public:
+
19  simdjson_inline implementation() : simdjson::implementation(
+
20  "fallback",
+
21  "Generic fallback implementation",
+
22  0
+
23  ) {}
+
24  simdjson_warn_unused error_code create_dom_parser_implementation(
+
25  size_t capacity,
+
26  size_t max_length,
+
27  std::unique_ptr<internal::dom_parser_implementation>& dst
+
28  ) const noexcept final;
+
29  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept final;
+
30  simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final;
+
31 };
+
32 
+
33 } // namespace fallback
+
34 } // namespace simdjson
+
35 
+
36 #endif // SIMDJSON_FALLBACK_IMPLEMENTATION_H
+
An implementation of simdjson for a particular CPU architecture.
+
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
std::string minify(T x)
Minifies a JSON element or document, printing the smallest possible valid JSON.
+
+
+ + + + diff --git a/fallback_2numberparsing_8h_source.html b/fallback_2numberparsing_8h_source.html new file mode 100644 index 000000000..9aa88b0fc --- /dev/null +++ b/fallback_2numberparsing_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/fallback/numberparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
numberparsing.h
+
+
+
1 #ifndef SIMDJSON_FALLBACK_NUMBERPARSING_H
+
2 #define SIMDJSON_FALLBACK_NUMBERPARSING_H
+
3 
+
4 #ifdef JSON_TEST_NUMBERS // for unit testing
+
5 void found_invalid_number(const uint8_t *buf);
+
6 void found_integer(int64_t result, const uint8_t *buf);
+
7 void found_unsigned_integer(uint64_t result, const uint8_t *buf);
+
8 void found_float(double result, const uint8_t *buf);
+
9 #endif
+
10 
+
11 namespace simdjson {
+
12 namespace SIMDJSON_IMPLEMENTATION {
+
13 namespace {
+
14 // credit: https://johnnylee-sde.github.io/Fast-numeric-string-to-int/
+
15 static simdjson_inline uint32_t parse_eight_digits_unrolled(const char *chars) {
+
16  uint64_t val;
+
17  memcpy(&val, chars, sizeof(uint64_t));
+
18  val = (val & 0x0F0F0F0F0F0F0F0F) * 2561 >> 8;
+
19  val = (val & 0x00FF00FF00FF00FF) * 6553601 >> 16;
+
20  return uint32_t((val & 0x0000FFFF0000FFFF) * 42949672960001 >> 32);
+
21 }
+
22 static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
+
23  return parse_eight_digits_unrolled(reinterpret_cast<const char *>(chars));
+
24 }
+
25 
+
26 } // unnamed namespace
+
27 } // namespace SIMDJSON_IMPLEMENTATION
+
28 } // namespace simdjson
+
29 
+
30 #define SIMDJSON_SWAR_NUMBER_PARSING 1
+
31 
+
32 #include "simdjson/generic/numberparsing.h"
+
33 
+
34 #endif // SIMDJSON_FALLBACK_NUMBERPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/fallback_2stringparsing_8h_source.html b/fallback_2stringparsing_8h_source.html new file mode 100644 index 000000000..0f268ac46 --- /dev/null +++ b/fallback_2stringparsing_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/fallback/stringparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
stringparsing.h
+
+
+
1 #ifndef SIMDJSON_FALLBACK_STRINGPARSING_H
+
2 #define SIMDJSON_FALLBACK_STRINGPARSING_H
+
3 
+
4 #include "simdjson/base.h"
+
5 
+
6 namespace simdjson {
+
7 namespace SIMDJSON_IMPLEMENTATION {
+
8 namespace {
+
9 
+
10 // Holds backslashes and quotes locations.
+
11 struct backslash_and_quote {
+
12 public:
+
13  static constexpr uint32_t BYTES_PROCESSED = 1;
+
14  simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
+
15 
+
16  simdjson_inline bool has_quote_first() { return c == '"'; }
+
17  simdjson_inline bool has_backslash() { return c == '\\'; }
+
18  simdjson_inline int quote_index() { return c == '"' ? 0 : 1; }
+
19  simdjson_inline int backslash_index() { return c == '\\' ? 0 : 1; }
+
20 
+
21  uint8_t c;
+
22 }; // struct backslash_and_quote
+
23 
+
24 simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
+
25  // store to dest unconditionally - we can overwrite the bits we don't like later
+
26  dst[0] = src[0];
+
27  return { src[0] };
+
28 }
+
29 
+
30 } // unnamed namespace
+
31 } // namespace SIMDJSON_IMPLEMENTATION
+
32 } // namespace simdjson
+
33 
+
34 #endif // SIMDJSON_FALLBACK_STRINGPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/fallback_8h_source.html b/fallback_8h_source.html new file mode 100644 index 000000000..fa6d5563a --- /dev/null +++ b/fallback_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +simdjson: include/simdjson/fallback.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
fallback.h
+
+
+
1 #ifndef SIMDJSON_FALLBACK_H
+
2 #define SIMDJSON_FALLBACK_H
+
3 
+ +
5 
+
6 #if SIMDJSON_IMPLEMENTATION_FALLBACK
+
7 
+
8 namespace simdjson {
+
12 namespace fallback {
+
13 } // namespace fallback
+
14 } // namespace simdjson
+
15 
+
16 #include "simdjson/fallback/implementation.h"
+
17 
+
18 #include "simdjson/fallback/begin.h"
+
19 
+
20 // Declarations
+
21 #include "simdjson/generic/dom_parser_implementation.h"
+
22 #include "simdjson/fallback/bitmanipulation.h"
+
23 #include "simdjson/generic/jsoncharutils.h"
+
24 #include "simdjson/generic/atomparsing.h"
+
25 #include "simdjson/fallback/stringparsing.h"
+
26 #include "simdjson/fallback/numberparsing.h"
+
27 #include "simdjson/fallback/end.h"
+
28 
+
29 #endif // SIMDJSON_IMPLEMENTATION_FALLBACK
+
30 #endif // SIMDJSON_FALLBACK_H
+
Includes common stuff needed for implementations.
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/field-inl_8h_source.html b/field-inl_8h_source.html new file mode 100644 index 000000000..be51fafc8 --- /dev/null +++ b/field-inl_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/field-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
field-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 // clang 6 doesn't think the default constructor can be noexcept, so we make it explicit
+
6 simdjson_inline field::field() noexcept : std::pair<raw_json_string, ondemand::value>() {}
+
7 
+
8 simdjson_inline field::field(raw_json_string key, ondemand::value &&value) noexcept
+
9  : std::pair<raw_json_string, ondemand::value>(key, std::forward<ondemand::value>(value))
+
10 {
+
11 }
+
12 
+
13 simdjson_inline simdjson_result<field> field::start(value_iterator &parent_iter) noexcept {
+
14  raw_json_string key;
+
15  SIMDJSON_TRY( parent_iter.field_key().get(key) );
+
16  SIMDJSON_TRY( parent_iter.field_value() );
+
17  return field::start(parent_iter, key);
+
18 }
+
19 
+
20 simdjson_inline simdjson_result<field> field::start(const value_iterator &parent_iter, raw_json_string key) noexcept {
+
21  return field(key, parent_iter.child());
+
22 }
+
23 
+
24 simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> field::unescaped_key() noexcept {
+
25  SIMDJSON_ASSUME(first.buf != nullptr); // We would like to call .alive() but Visual Studio won't let us.
+
26  simdjson_result<std::string_view> answer = first.unescape(second.iter.json_iter());
+
27  first.consume();
+
28  return answer;
+
29 }
+
30 
+
31 simdjson_inline raw_json_string field::key() const noexcept {
+
32  SIMDJSON_ASSUME(first.buf != nullptr); // We would like to call .alive() by Visual Studio won't let us.
+
33  return first;
+
34 }
+
35 
+
36 simdjson_inline value &field::value() & noexcept {
+
37  return second;
+
38 }
+
39 
+
40 simdjson_inline value field::value() && noexcept {
+
41  return std::forward<field>(*this).second;
+
42 }
+
43 
+
44 } // namespace ondemand
+
45 } // namespace SIMDJSON_IMPLEMENTATION
+
46 } // namespace simdjson
+
47 
+
48 namespace simdjson {
+
49 
+
50 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::simdjson_result(
+
51  SIMDJSON_IMPLEMENTATION::ondemand::field &&value
+
52 ) noexcept :
+
53  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::field>(
+
54  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::field>(value)
+
55  )
+
56 {
+
57 }
+
58 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::simdjson_result(
+
59  error_code error
+
60 ) noexcept :
+
61  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::field>(error)
+
62 {
+
63 }
+
64 
+
65 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::key() noexcept {
+
66  if (error()) { return error(); }
+
67  return first.key();
+
68 }
+
69 simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::unescaped_key() noexcept {
+
70  if (error()) { return error(); }
+
71  return first.unescaped_key();
+
72 }
+
73 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::value() noexcept {
+
74  if (error()) { return error(); }
+
75  return std::move(first.value());
+
76 }
+
77 
+
78 } // namespace simdjson
+
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > unescaped_key() noexcept
Get the key as a string_view (for higher speed, consider raw_key).
Definition: field-inl.h:24
+
simdjson_inline raw_json_string key() const noexcept
Get the key as a raw_json_string.
Definition: field-inl.h:31
+
simdjson_inline field() noexcept
Create a new invalid field.
Definition: field-inl.h:6
+
simdjson_inline ondemand::value & value() &noexcept
Get the field value.
Definition: field-inl.h:36
+
A string escaped per JSON rules, terminated with quote (").
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/field_8h_source.html b/field_8h_source.html new file mode 100644 index 000000000..6cbbcfbef --- /dev/null +++ b/field_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/field.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
field.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
14 class field : public std::pair<raw_json_string, value> {
+
15 public:
+
21  simdjson_inline field() noexcept;
+
22 
+
31  simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> unescaped_key() noexcept;
+
36  simdjson_inline raw_json_string key() const noexcept;
+
40  simdjson_inline ondemand::value &value() & noexcept;
+
44  simdjson_inline ondemand::value value() && noexcept;
+
45 
+
46 protected:
+
47  simdjson_inline field(raw_json_string key, ondemand::value &&value) noexcept;
+
48  static simdjson_inline simdjson_result<field> start(value_iterator &parent_iter) noexcept;
+
49  static simdjson_inline simdjson_result<field> start(const value_iterator &parent_iter, raw_json_string key) noexcept;
+
50  friend struct simdjson_result<field>;
+
51  friend class object_iterator;
+
52 };
+
53 
+
54 } // namespace ondemand
+
55 } // namespace SIMDJSON_IMPLEMENTATION
+
56 } // namespace simdjson
+
57 
+
58 namespace simdjson {
+
59 
+
60 template<>
+
61 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::field> {
+
62 public:
+ +
64  simdjson_inline simdjson_result(error_code error) noexcept;
+
65  simdjson_inline simdjson_result() noexcept = default;
+
66 
+
67  simdjson_inline simdjson_result<std::string_view> unescaped_key() noexcept;
+ + +
70 };
+
71 
+
72 } // namespace simdjson
+
A JSON field (key/value pair) in an object.
Definition: field.h:14
+
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > unescaped_key() noexcept
Get the key as a string_view (for higher speed, consider raw_key).
Definition: field-inl.h:24
+
simdjson_inline raw_json_string key() const noexcept
Get the key as a raw_json_string.
Definition: field-inl.h:31
+
simdjson_inline field() noexcept
Create a new invalid field.
Definition: field-inl.h:6
+
simdjson_inline ondemand::value & value() &noexcept
Get the field value.
Definition: field-inl.h:36
+ +
A string escaped per JSON rules, terminated with quote (").
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ + + +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 000000000..c80802a13 --- /dev/null +++ b/files.html @@ -0,0 +1,264 @@ + + + + + + + +simdjson: File List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  include
  simdjson
  arm64
  dom
  fallback
  generic
  haswell
  icelake
  internal
  nonstd
  ppc64
  westmere
 arm64.h
 base.h
 builtin.h
 common_defs.h
 compiler_check.h
 dom.h
 error-inl.h
 error.h
 fallback.h
 haswell.h
 icelake.h
 implementation-base.hIncludes common stuff needed for implementations
 implementation.h
 implementations.h
 jsonioutil.h
 minify.h
 padded_string-inl.h
 padded_string.h
 padded_string_view-inl.h
 padded_string_view.h
 portability.h
 ppc64.h
 simdjson.h
 simdjson_version.h
 westmere.h
+
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 000000000..f1749d909 --- /dev/null +++ b/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/functions.html b/functions.html new file mode 100644 index 000000000..acb8a6262 --- /dev/null +++ b/functions.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 000000000..e12218ef3 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,115 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 000000000..3f0e03793 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,132 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 000000000..d507de807 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/functions_dup.js b/functions_dup.js new file mode 100644 index 000000000..92e595d1f --- /dev/null +++ b/functions_dup.js @@ -0,0 +1,24 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "i", "functions_i.html", null ], + [ "k", "functions_k.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "u", "functions_u.html", null ], + [ "v", "functions_v.html", null ], + [ "w", "functions_w.html", null ], + [ "~", "functions_~.html", null ] +]; \ No newline at end of file diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 000000000..10a3fa9b3 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,121 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 000000000..e4ad13502 --- /dev/null +++ b/functions_f.html @@ -0,0 +1,120 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 000000000..7cff69072 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func.js b/functions_func.js new file mode 100644 index 000000000..421f98f4b --- /dev/null +++ b/functions_func.js @@ -0,0 +1,24 @@ +var functions_func = +[ + [ "a", "functions_func.html", null ], + [ "b", "functions_func_b.html", null ], + [ "c", "functions_func_c.html", null ], + [ "d", "functions_func_d.html", null ], + [ "e", "functions_func_e.html", null ], + [ "f", "functions_func_f.html", null ], + [ "g", "functions_func_g.html", null ], + [ "i", "functions_func_i.html", null ], + [ "k", "functions_func_k.html", null ], + [ "l", "functions_func_l.html", null ], + [ "m", "functions_func_m.html", null ], + [ "n", "functions_func_n.html", null ], + [ "o", "functions_func_o.html", null ], + [ "p", "functions_func_p.html", null ], + [ "r", "functions_func_r.html", null ], + [ "s", "functions_func_s.html", null ], + [ "t", "functions_func_t.html", null ], + [ "u", "functions_func_u.html", null ], + [ "v", "functions_func_v.html", null ], + [ "w", "functions_func_w.html", null ], + [ "~", "functions_func_~.html", null ] +]; \ No newline at end of file diff --git a/functions_func_b.html b/functions_func_b.html new file mode 100644 index 000000000..2fcae41f3 --- /dev/null +++ b/functions_func_b.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_c.html b/functions_func_c.html new file mode 100644 index 000000000..58418a73a --- /dev/null +++ b/functions_func_c.html @@ -0,0 +1,132 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_d.html b/functions_func_d.html new file mode 100644 index 000000000..dc140b9f7 --- /dev/null +++ b/functions_func_d.html @@ -0,0 +1,116 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_e.html b/functions_func_e.html new file mode 100644 index 000000000..37378b79e --- /dev/null +++ b/functions_func_e.html @@ -0,0 +1,121 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_f.html b/functions_func_f.html new file mode 100644 index 000000000..3b90b21da --- /dev/null +++ b/functions_func_f.html @@ -0,0 +1,117 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_g.html b/functions_func_g.html new file mode 100644 index 000000000..f7c6eea34 --- /dev/null +++ b/functions_func_g.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+
+ + + + diff --git a/functions_func_i.html b/functions_func_i.html new file mode 100644 index 000000000..f469adde8 --- /dev/null +++ b/functions_func_i.html @@ -0,0 +1,175 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+
+ + + + diff --git a/functions_func_k.html b/functions_func_k.html new file mode 100644 index 000000000..1c2db990a --- /dev/null +++ b/functions_func_k.html @@ -0,0 +1,118 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_l.html b/functions_func_l.html new file mode 100644 index 000000000..49ed85e90 --- /dev/null +++ b/functions_func_l.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+
+ + + + diff --git a/functions_func_m.html b/functions_func_m.html new file mode 100644 index 000000000..853a6aa05 --- /dev/null +++ b/functions_func_m.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_n.html b/functions_func_n.html new file mode 100644 index 000000000..00a5af4e0 --- /dev/null +++ b/functions_func_n.html @@ -0,0 +1,108 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- n -

+
+
+ + + + diff --git a/functions_func_o.html b/functions_func_o.html new file mode 100644 index 000000000..f39e82309 --- /dev/null +++ b/functions_func_o.html @@ -0,0 +1,197 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+
+ + + + diff --git a/functions_func_p.html b/functions_func_p.html new file mode 100644 index 000000000..0e5541920 --- /dev/null +++ b/functions_func_p.html @@ -0,0 +1,124 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- p -

+
+
+ + + + diff --git a/functions_func_r.html b/functions_func_r.html new file mode 100644 index 000000000..1c924d1c8 --- /dev/null +++ b/functions_func_r.html @@ -0,0 +1,133 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_s.html b/functions_func_s.html new file mode 100644 index 000000000..98f65ffb3 --- /dev/null +++ b/functions_func_s.html @@ -0,0 +1,139 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_t.html b/functions_func_t.html new file mode 100644 index 000000000..b74fec1e7 --- /dev/null +++ b/functions_func_t.html @@ -0,0 +1,124 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_u.html b/functions_func_u.html new file mode 100644 index 000000000..6746d5f56 --- /dev/null +++ b/functions_func_u.html @@ -0,0 +1,111 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_v.html b/functions_func_v.html new file mode 100644 index 000000000..de381d6f1 --- /dev/null +++ b/functions_func_v.html @@ -0,0 +1,116 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_func_w.html b/functions_func_w.html new file mode 100644 index 000000000..f930eacaf --- /dev/null +++ b/functions_func_w.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- w -

+
+
+ + + + diff --git a/functions_func_~.html b/functions_func_~.html new file mode 100644 index 000000000..0e0951767 --- /dev/null +++ b/functions_func_~.html @@ -0,0 +1,106 @@ + + + + + + + +simdjson: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 000000000..295422391 --- /dev/null +++ b/functions_g.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 000000000..c09462ecd --- /dev/null +++ b/functions_i.html @@ -0,0 +1,180 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 000000000..c33a729c8 --- /dev/null +++ b/functions_k.html @@ -0,0 +1,119 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 000000000..9b43e3176 --- /dev/null +++ b/functions_l.html @@ -0,0 +1,115 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 000000000..693ed7930 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 000000000..9c52cef72 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,108 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 000000000..2e68cf247 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,200 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 000000000..e624fe66e --- /dev/null +++ b/functions_p.html @@ -0,0 +1,127 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 000000000..501726803 --- /dev/null +++ b/functions_r.html @@ -0,0 +1,133 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 000000000..864202a59 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,142 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 000000000..6b339d3b0 --- /dev/null +++ b/functions_t.html @@ -0,0 +1,124 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 000000000..94ea92ae6 --- /dev/null +++ b/functions_u.html @@ -0,0 +1,111 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 000000000..0718b625a --- /dev/null +++ b/functions_v.html @@ -0,0 +1,117 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 000000000..a0b290a56 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,137 @@ + + + + + + + +simdjson: Class Members - Variables + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 000000000..199ddf357 --- /dev/null +++ b/functions_w.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+
+ + + + diff --git a/functions_~.html b/functions_~.html new file mode 100644 index 000000000..8376dd186 --- /dev/null +++ b/functions_~.html @@ -0,0 +1,106 @@ + + + + + + + +simdjson: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+
+ + + + diff --git a/generic_2dom__parser__implementation_8h_source.html b/generic_2dom__parser__implementation_8h_source.html new file mode 100644 index 000000000..aca2886b6 --- /dev/null +++ b/generic_2dom__parser__implementation_8h_source.html @@ -0,0 +1,194 @@ + + + + + + + +simdjson: include/simdjson/generic/dom_parser_implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dom_parser_implementation.h
+
+
+
1 #include "simdjson/base.h"
+
2 #include "simdjson/internal/isadetection.h"
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 
+
7 // expectation: sizeof(open_container) = 64/8.
+
8 struct open_container {
+
9  uint32_t tape_index; // where, on the tape, does the scope ([,{) begins
+
10  uint32_t count; // how many elements in the scope
+
11 }; // struct open_container
+
12 
+
13 static_assert(sizeof(open_container) == 64/8, "Open container must be 64 bits");
+
14 
+
15 class dom_parser_implementation final : public internal::dom_parser_implementation {
+
16 public:
+
18  std::unique_ptr<open_container[]> open_containers{};
+
20  std::unique_ptr<bool[]> is_array{};
+
22  const uint8_t *buf{};
+
24  size_t len{0};
+ +
27 
+
28  inline dom_parser_implementation() noexcept;
+ +
30  inline dom_parser_implementation &operator=(dom_parser_implementation &&other) noexcept;
+ +
32  dom_parser_implementation &operator=(const dom_parser_implementation &) = delete;
+
33 
+
34  simdjson_warn_unused error_code parse(const uint8_t *buf, size_t len, dom::document &doc) noexcept final;
+
35  simdjson_warn_unused error_code stage1(const uint8_t *buf, size_t len, stage1_mode partial) noexcept final;
+
36  simdjson_warn_unused error_code stage2(dom::document &doc) noexcept final;
+
37  simdjson_warn_unused error_code stage2_next(dom::document &doc) noexcept final;
+
38  simdjson_warn_unused uint8_t *parse_string(const uint8_t *src, uint8_t *dst) const noexcept final;
+
39  inline simdjson_warn_unused error_code set_capacity(size_t capacity) noexcept final;
+
40  inline simdjson_warn_unused error_code set_max_depth(size_t max_depth) noexcept final;
+
41 private:
+
42  simdjson_inline simdjson_warn_unused error_code set_capacity_stage1(size_t capacity);
+
43 
+
44 };
+
45 
+
46 } // namespace SIMDJSON_IMPLEMENTATION
+
47 } // namespace simdjson
+
48 
+
49 namespace simdjson {
+
50 namespace SIMDJSON_IMPLEMENTATION {
+
51 
+
52 inline dom_parser_implementation::dom_parser_implementation() noexcept = default;
+ +
54 inline dom_parser_implementation &dom_parser_implementation::operator=(dom_parser_implementation &&other) noexcept = default;
+
55 
+
56 // Leaving these here so they can be inlined if so desired
+
57 inline simdjson_warn_unused error_code dom_parser_implementation::set_capacity(size_t capacity) noexcept {
+
58  if(capacity > SIMDJSON_MAXSIZE_BYTES) { return CAPACITY; }
+
59  // Stage 1 index output
+
60  size_t max_structures = SIMDJSON_ROUNDUP_N(capacity, 64) + 2 + 7;
+
61  structural_indexes.reset( new (std::nothrow) uint32_t[max_structures] );
+
62  if (!structural_indexes) { _capacity = 0; return MEMALLOC; }
+
63  structural_indexes[0] = 0;
+
64  n_structural_indexes = 0;
+
65 
+
66  _capacity = capacity;
+
67  return SUCCESS;
+
68 }
+
69 
+
70 inline simdjson_warn_unused error_code dom_parser_implementation::set_max_depth(size_t max_depth) noexcept {
+
71  // Stage 2 stacks
+
72  open_containers.reset(new (std::nothrow) open_container[max_depth]);
+
73  is_array.reset(new (std::nothrow) bool[max_depth]);
+
74  if (!is_array || !open_containers) { _max_depth = 0; return MEMALLOC; }
+
75 
+
76  _max_depth = max_depth;
+
77  return SUCCESS;
+
78 }
+
79 
+
80 } // namespace SIMDJSON_IMPLEMENTATION
+
81 } // namespace simdjson
+ + + + +
std::unique_ptr< bool[]> is_array
Whether each open container is a [ or {.
+
std::unique_ptr< open_container[]> open_containers
Tape location of each open { or [.
+
A parsed JSON document.
Definition: document.h:18
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
constexpr size_t SIMDJSON_MAXSIZE_BYTES
The maximum document size supported by simdjson.
Definition: common_defs.h:35
+
stage1_mode
This enum is used with the dom_parser_implementation::stage1 function.
+ +
+
+ + + + diff --git a/generic_2numberparsing_8h_source.html b/generic_2numberparsing_8h_source.html new file mode 100644 index 000000000..e6b770d51 --- /dev/null +++ b/generic_2numberparsing_8h_source.html @@ -0,0 +1,1359 @@ + + + + + + + +simdjson: include/simdjson/generic/numberparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
numberparsing.h
+
+
+
1 #include "simdjson/internal/numberparsing_tables.h"
+
2 #include <limits>
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 
+
7 namespace ondemand {
+
11 enum class number_type {
+
12  floating_point_number=1,
+ + +
15 };
+
16 }
+
17 
+
18 namespace {
+
20 namespace numberparsing {
+
21 
+
22 
+
23 
+
24 #ifdef JSON_TEST_NUMBERS
+
25 #define INVALID_NUMBER(SRC) (found_invalid_number((SRC)), NUMBER_ERROR)
+
26 #define WRITE_INTEGER(VALUE, SRC, WRITER) (found_integer((VALUE), (SRC)), (WRITER).append_s64((VALUE)))
+
27 #define WRITE_UNSIGNED(VALUE, SRC, WRITER) (found_unsigned_integer((VALUE), (SRC)), (WRITER).append_u64((VALUE)))
+
28 #define WRITE_DOUBLE(VALUE, SRC, WRITER) (found_float((VALUE), (SRC)), (WRITER).append_double((VALUE)))
+
29 #else
+
30 #define INVALID_NUMBER(SRC) (NUMBER_ERROR)
+
31 #define WRITE_INTEGER(VALUE, SRC, WRITER) (WRITER).append_s64((VALUE))
+
32 #define WRITE_UNSIGNED(VALUE, SRC, WRITER) (WRITER).append_u64((VALUE))
+
33 #define WRITE_DOUBLE(VALUE, SRC, WRITER) (WRITER).append_double((VALUE))
+
34 #endif
+
35 
+
36 namespace {
+
37 // Convert a mantissa, an exponent and a sign bit into an ieee64 double.
+
38 // The real_exponent needs to be in [0, 2046] (technically real_exponent = 2047 would be acceptable).
+
39 // The mantissa should be in [0,1<<53). The bit at index (1ULL << 52) while be zeroed.
+
40 simdjson_inline double to_double(uint64_t mantissa, uint64_t real_exponent, bool negative) {
+
41  double d;
+
42  mantissa &= ~(1ULL << 52);
+
43  mantissa |= real_exponent << 52;
+
44  mantissa |= ((static_cast<uint64_t>(negative)) << 63);
+
45  std::memcpy(&d, &mantissa, sizeof(d));
+
46  return d;
+
47 }
+
48 }
+
49 // Attempts to compute i * 10^(power) exactly; and if "negative" is
+
50 // true, negate the result.
+
51 // This function will only work in some cases, when it does not work, success is
+
52 // set to false. This should work *most of the time* (like 99% of the time).
+
53 // We assume that power is in the [smallest_power,
+
54 // largest_power] interval: the caller is responsible for this check.
+
55 simdjson_inline bool compute_float_64(int64_t power, uint64_t i, bool negative, double &d) {
+
56  // we start with a fast path
+
57  // It was described in
+
58  // Clinger WD. How to read floating point numbers accurately.
+
59  // ACM SIGPLAN Notices. 1990
+
60 #ifndef FLT_EVAL_METHOD
+
61 #error "FLT_EVAL_METHOD should be defined, please include cfloat."
+
62 #endif
+
63 #if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0)
+
64  // We cannot be certain that x/y is rounded to nearest.
+
65  if (0 <= power && power <= 22 && i <= 9007199254740991) {
+
66 #else
+
67  if (-22 <= power && power <= 22 && i <= 9007199254740991) {
+
68 #endif
+
69  // convert the integer into a double. This is lossless since
+
70  // 0 <= i <= 2^53 - 1.
+
71  d = double(i);
+
72  //
+
73  // The general idea is as follows.
+
74  // If 0 <= s < 2^53 and if 10^0 <= p <= 10^22 then
+
75  // 1) Both s and p can be represented exactly as 64-bit floating-point
+
76  // values
+
77  // (binary64).
+
78  // 2) Because s and p can be represented exactly as floating-point values,
+
79  // then s * p
+
80  // and s / p will produce correctly rounded values.
+
81  //
+
82  if (power < 0) {
+
83  d = d / simdjson::internal::power_of_ten[-power];
+
84  } else {
+
85  d = d * simdjson::internal::power_of_ten[power];
+
86  }
+
87  if (negative) {
+
88  d = -d;
+
89  }
+
90  return true;
+
91  }
+
92  // When 22 < power && power < 22 + 16, we could
+
93  // hope for another, secondary fast path. It was
+
94  // described by David M. Gay in "Correctly rounded
+
95  // binary-decimal and decimal-binary conversions." (1990)
+
96  // If you need to compute i * 10^(22 + x) for x < 16,
+
97  // first compute i * 10^x, if you know that result is exact
+
98  // (e.g., when i * 10^x < 2^53),
+
99  // then you can still proceed and do (i * 10^x) * 10^22.
+
100  // Is this worth your time?
+
101  // You need 22 < power *and* power < 22 + 16 *and* (i * 10^(x-22) < 2^53)
+
102  // for this second fast path to work.
+
103  // If you you have 22 < power *and* power < 22 + 16, and then you
+
104  // optimistically compute "i * 10^(x-22)", there is still a chance that you
+
105  // have wasted your time if i * 10^(x-22) >= 2^53. It makes the use cases of
+
106  // this optimization maybe less common than we would like. Source:
+
107  // http://www.exploringbinary.com/fast-path-decimal-to-floating-point-conversion/
+
108  // also used in RapidJSON: https://rapidjson.org/strtod_8h_source.html
+
109 
+
110  // The fast path has now failed, so we are failing back on the slower path.
+
111 
+
112  // In the slow path, we need to adjust i so that it is > 1<<63 which is always
+
113  // possible, except if i == 0, so we handle i == 0 separately.
+
114  if(i == 0) {
+
115  d = negative ? -0.0 : 0.0;
+
116  return true;
+
117  }
+
118 
+
119 
+
120  // The exponent is 1024 + 63 + power
+
121  // + floor(log(5**power)/log(2)).
+
122  // The 1024 comes from the ieee64 standard.
+
123  // The 63 comes from the fact that we use a 64-bit word.
+
124  //
+
125  // Computing floor(log(5**power)/log(2)) could be
+
126  // slow. Instead we use a fast function.
+
127  //
+
128  // For power in (-400,350), we have that
+
129  // (((152170 + 65536) * power ) >> 16);
+
130  // is equal to
+
131  // floor(log(5**power)/log(2)) + power when power >= 0
+
132  // and it is equal to
+
133  // ceil(log(5**-power)/log(2)) + power when power < 0
+
134  //
+
135  // The 65536 is (1<<16) and corresponds to
+
136  // (65536 * power) >> 16 ---> power
+
137  //
+
138  // ((152170 * power ) >> 16) is equal to
+
139  // floor(log(5**power)/log(2))
+
140  //
+
141  // Note that this is not magic: 152170/(1<<16) is
+
142  // approximatively equal to log(5)/log(2).
+
143  // The 1<<16 value is a power of two; we could use a
+
144  // larger power of 2 if we wanted to.
+
145  //
+
146  int64_t exponent = (((152170 + 65536) * power) >> 16) + 1024 + 63;
+
147 
+
148 
+
149  // We want the most significant bit of i to be 1. Shift if needed.
+
150  int lz = leading_zeroes(i);
+
151  i <<= lz;
+
152 
+
153 
+
154  // We are going to need to do some 64-bit arithmetic to get a precise product.
+
155  // We use a table lookup approach.
+
156  // It is safe because
+
157  // power >= smallest_power
+
158  // and power <= largest_power
+
159  // We recover the mantissa of the power, it has a leading 1. It is always
+
160  // rounded down.
+
161  //
+
162  // We want the most significant 64 bits of the product. We know
+
163  // this will be non-zero because the most significant bit of i is
+
164  // 1.
+
165  const uint32_t index = 2 * uint32_t(power - simdjson::internal::smallest_power);
+
166  // Optimization: It may be that materializing the index as a variable might confuse some compilers and prevent effective complex-addressing loads. (Done for code clarity.)
+
167  //
+
168  // The full_multiplication function computes the 128-bit product of two 64-bit words
+
169  // with a returned value of type value128 with a "low component" corresponding to the
+
170  // 64-bit least significant bits of the product and with a "high component" corresponding
+
171  // to the 64-bit most significant bits of the product.
+
172  simdjson::internal::value128 firstproduct = jsoncharutils::full_multiplication(i, simdjson::internal::power_of_five_128[index]);
+
173  // Both i and power_of_five_128[index] have their most significant bit set to 1 which
+
174  // implies that the either the most or the second most significant bit of the product
+
175  // is 1. We pack values in this manner for efficiency reasons: it maximizes the use
+
176  // we make of the product. It also makes it easy to reason about the product: there
+
177  // is 0 or 1 leading zero in the product.
+
178 
+
179  // Unless the least significant 9 bits of the high (64-bit) part of the full
+
180  // product are all 1s, then we know that the most significant 55 bits are
+
181  // exact and no further work is needed. Having 55 bits is necessary because
+
182  // we need 53 bits for the mantissa but we have to have one rounding bit and
+
183  // we can waste a bit if the most significant bit of the product is zero.
+
184  if((firstproduct.high & 0x1FF) == 0x1FF) {
+
185  // We want to compute i * 5^q, but only care about the top 55 bits at most.
+
186  // Consider the scenario where q>=0. Then 5^q may not fit in 64-bits. Doing
+
187  // the full computation is wasteful. So we do what is called a "truncated
+
188  // multiplication".
+
189  // We take the most significant 64-bits, and we put them in
+
190  // power_of_five_128[index]. Usually, that's good enough to approximate i * 5^q
+
191  // to the desired approximation using one multiplication. Sometimes it does not suffice.
+
192  // Then we store the next most significant 64 bits in power_of_five_128[index + 1], and
+
193  // then we get a better approximation to i * 5^q. In very rare cases, even that
+
194  // will not suffice, though it is seemingly very hard to find such a scenario.
+
195  //
+
196  // That's for when q>=0. The logic for q<0 is somewhat similar but it is somewhat
+
197  // more complicated.
+
198  //
+
199  // There is an extra layer of complexity in that we need more than 55 bits of
+
200  // accuracy in the round-to-even scenario.
+
201  //
+
202  // The full_multiplication function computes the 128-bit product of two 64-bit words
+
203  // with a returned value of type value128 with a "low component" corresponding to the
+
204  // 64-bit least significant bits of the product and with a "high component" corresponding
+
205  // to the 64-bit most significant bits of the product.
+
206  simdjson::internal::value128 secondproduct = jsoncharutils::full_multiplication(i, simdjson::internal::power_of_five_128[index + 1]);
+
207  firstproduct.low += secondproduct.high;
+
208  if(secondproduct.high > firstproduct.low) { firstproduct.high++; }
+
209  // At this point, we might need to add at most one to firstproduct, but this
+
210  // can only change the value of firstproduct.high if firstproduct.low is maximal.
+
211  if(simdjson_unlikely(firstproduct.low == 0xFFFFFFFFFFFFFFFF)) {
+
212  // This is very unlikely, but if so, we need to do much more work!
+
213  return false;
+
214  }
+
215  }
+
216  uint64_t lower = firstproduct.low;
+
217  uint64_t upper = firstproduct.high;
+
218  // The final mantissa should be 53 bits with a leading 1.
+
219  // We shift it so that it occupies 54 bits with a leading 1.
+
221  uint64_t upperbit = upper >> 63;
+
222  uint64_t mantissa = upper >> (upperbit + 9);
+
223  lz += int(1 ^ upperbit);
+
224 
+
225  // Here we have mantissa < (1<<54).
+
226  int64_t real_exponent = exponent - lz;
+
227  if (simdjson_unlikely(real_exponent <= 0)) { // we have a subnormal?
+
228  // Here have that real_exponent <= 0 so -real_exponent >= 0
+
229  if(-real_exponent + 1 >= 64) { // if we have more than 64 bits below the minimum exponent, you have a zero for sure.
+
230  d = negative ? -0.0 : 0.0;
+
231  return true;
+
232  }
+
233  // next line is safe because -real_exponent + 1 < 0
+
234  mantissa >>= -real_exponent + 1;
+
235  // Thankfully, we can't have both "round-to-even" and subnormals because
+
236  // "round-to-even" only occurs for powers close to 0.
+
237  mantissa += (mantissa & 1); // round up
+
238  mantissa >>= 1;
+
239  // There is a weird scenario where we don't have a subnormal but just.
+
240  // Suppose we start with 2.2250738585072013e-308, we end up
+
241  // with 0x3fffffffffffff x 2^-1023-53 which is technically subnormal
+
242  // whereas 0x40000000000000 x 2^-1023-53 is normal. Now, we need to round
+
243  // up 0x3fffffffffffff x 2^-1023-53 and once we do, we are no longer
+
244  // subnormal, but we can only know this after rounding.
+
245  // So we only declare a subnormal if we are smaller than the threshold.
+
246  real_exponent = (mantissa < (uint64_t(1) << 52)) ? 0 : 1;
+
247  d = to_double(mantissa, real_exponent, negative);
+
248  return true;
+
249  }
+
250  // We have to round to even. The "to even" part
+
251  // is only a problem when we are right in between two floats
+
252  // which we guard against.
+
253  // If we have lots of trailing zeros, we may fall right between two
+
254  // floating-point values.
+
255  //
+
256  // The round-to-even cases take the form of a number 2m+1 which is in (2^53,2^54]
+
257  // times a power of two. That is, it is right between a number with binary significand
+
258  // m and another number with binary significand m+1; and it must be the case
+
259  // that it cannot be represented by a float itself.
+
260  //
+
261  // We must have that w * 10 ^q == (2m+1) * 2^p for some power of two 2^p.
+
262  // Recall that 10^q = 5^q * 2^q.
+
263  // When q >= 0, we must have that (2m+1) is divible by 5^q, so 5^q <= 2^54. We have that
+
264  // 5^23 <= 2^54 and it is the last power of five to qualify, so q <= 23.
+
265  // When q<0, we have w >= (2m+1) x 5^{-q}. We must have that w<2^{64} so
+
266  // (2m+1) x 5^{-q} < 2^{64}. We have that 2m+1>2^{53}. Hence, we must have
+
267  // 2^{53} x 5^{-q} < 2^{64}.
+
268  // Hence we have 5^{-q} < 2^{11}$ or q>= -4.
+
269  //
+
270  // We require lower <= 1 and not lower == 0 because we could not prove that
+
271  // that lower == 0 is implied; but we could prove that lower <= 1 is a necessary and sufficient test.
+
272  if (simdjson_unlikely((lower <= 1) && (power >= -4) && (power <= 23) && ((mantissa & 3) == 1))) {
+
273  if((mantissa << (upperbit + 64 - 53 - 2)) == upper) {
+
274  mantissa &= ~1; // flip it so that we do not round up
+
275  }
+
276  }
+
277 
+
278  mantissa += mantissa & 1;
+
279  mantissa >>= 1;
+
280 
+
281  // Here we have mantissa < (1<<53), unless there was an overflow
+
282  if (mantissa >= (1ULL << 53)) {
+
284  // This will happen when parsing values such as 7.2057594037927933e+16
+
286  mantissa = (1ULL << 52);
+
287  real_exponent++;
+
288  }
+
289  mantissa &= ~(1ULL << 52);
+
290  // we have to check that real_exponent is in range, otherwise we bail out
+
291  if (simdjson_unlikely(real_exponent > 2046)) {
+
292  // We have an infinite value!!! We could actually throw an error here if we could.
+
293  return false;
+
294  }
+
295  d = to_double(mantissa, real_exponent, negative);
+
296  return true;
+
297 }
+
298 
+
299 // We call a fallback floating-point parser that might be slow. Note
+
300 // it will accept JSON numbers, but the JSON spec. is more restrictive so
+
301 // before you call parse_float_fallback, you need to have validated the input
+
302 // string with the JSON grammar.
+
303 // It will return an error (false) if the parsed number is infinite.
+
304 // The string parsing itself always succeeds. We know that there is at least
+
305 // one digit.
+
306 static bool parse_float_fallback(const uint8_t *ptr, double *outDouble) {
+
307  *outDouble = simdjson::internal::from_chars(reinterpret_cast<const char *>(ptr));
+
308  // We do not accept infinite values.
+
309 
+
310  // Detecting finite values in a portable manner is ridiculously hard, ideally
+
311  // we would want to do:
+
312  // return !std::isfinite(*outDouble);
+
313  // but that mysteriously fails under legacy/old libc++ libraries, see
+
314  // https://github.com/simdjson/simdjson/issues/1286
+
315  //
+
316  // Therefore, fall back to this solution (the extra parens are there
+
317  // to handle that max may be a macro on windows).
+
318  return !(*outDouble > (std::numeric_limits<double>::max)() || *outDouble < std::numeric_limits<double>::lowest());
+
319 }
+
320 static bool parse_float_fallback(const uint8_t *ptr, const uint8_t *end_ptr, double *outDouble) {
+
321  *outDouble = simdjson::internal::from_chars(reinterpret_cast<const char *>(ptr), reinterpret_cast<const char *>(end_ptr));
+
322  // We do not accept infinite values.
+
323 
+
324  // Detecting finite values in a portable manner is ridiculously hard, ideally
+
325  // we would want to do:
+
326  // return !std::isfinite(*outDouble);
+
327  // but that mysteriously fails under legacy/old libc++ libraries, see
+
328  // https://github.com/simdjson/simdjson/issues/1286
+
329  //
+
330  // Therefore, fall back to this solution (the extra parens are there
+
331  // to handle that max may be a macro on windows).
+
332  return !(*outDouble > (std::numeric_limits<double>::max)() || *outDouble < std::numeric_limits<double>::lowest());
+
333 }
+
334 
+
335 // check quickly whether the next 8 chars are made of digits
+
336 // at a glance, it looks better than Mula's
+
337 // http://0x80.pl/articles/swar-digits-validate.html
+
338 simdjson_inline bool is_made_of_eight_digits_fast(const uint8_t *chars) {
+
339  uint64_t val;
+
340  // this can read up to 7 bytes beyond the buffer size, but we require
+
341  // SIMDJSON_PADDING of padding
+
342  static_assert(7 <= SIMDJSON_PADDING, "SIMDJSON_PADDING must be bigger than 7");
+
343  std::memcpy(&val, chars, 8);
+
344  // a branchy method might be faster:
+
345  // return (( val & 0xF0F0F0F0F0F0F0F0 ) == 0x3030303030303030)
+
346  // && (( (val + 0x0606060606060606) & 0xF0F0F0F0F0F0F0F0 ) ==
+
347  // 0x3030303030303030);
+
348  return (((val & 0xF0F0F0F0F0F0F0F0) |
+
349  (((val + 0x0606060606060606) & 0xF0F0F0F0F0F0F0F0) >> 4)) ==
+
350  0x3333333333333333);
+
351 }
+
352 
+
353 template<typename W>
+
354 error_code slow_float_parsing(simdjson_unused const uint8_t * src, W writer) {
+
355  double d;
+
356  if (parse_float_fallback(src, &d)) {
+
357  writer.append_double(d);
+
358  return SUCCESS;
+
359  }
+
360  return INVALID_NUMBER(src);
+
361 }
+
362 
+
363 template<typename I>
+
364 SIMDJSON_NO_SANITIZE_UNDEFINED // We deliberately allow overflow here and check later
+
365 simdjson_inline bool parse_digit(const uint8_t c, I &i) {
+
366  const uint8_t digit = static_cast<uint8_t>(c - '0');
+
367  if (digit > 9) {
+
368  return false;
+
369  }
+
370  // PERF NOTE: multiplication by 10 is cheaper than arbitrary integer multiplication
+
371  i = 10 * i + digit; // might overflow, we will handle the overflow later
+
372  return true;
+
373 }
+
374 
+
375 simdjson_inline error_code parse_decimal(simdjson_unused const uint8_t *const src, const uint8_t *&p, uint64_t &i, int64_t &exponent) {
+
376  // we continue with the fiction that we have an integer. If the
+
377  // floating point number is representable as x * 10^z for some integer
+
378  // z that fits in 53 bits, then we will be able to convert back the
+
379  // the integer into a float in a lossless manner.
+
380  const uint8_t *const first_after_period = p;
+
381 
+
382 #ifdef SIMDJSON_SWAR_NUMBER_PARSING
+
383 #if SIMDJSON_SWAR_NUMBER_PARSING
+
384  // this helps if we have lots of decimals!
+
385  // this turns out to be frequent enough.
+
386  if (is_made_of_eight_digits_fast(p)) {
+
387  i = i * 100000000 + parse_eight_digits_unrolled(p);
+
388  p += 8;
+
389  }
+
390 #endif // SIMDJSON_SWAR_NUMBER_PARSING
+
391 #endif // #ifdef SIMDJSON_SWAR_NUMBER_PARSING
+
392  // Unrolling the first digit makes a small difference on some implementations (e.g. westmere)
+
393  if (parse_digit(*p, i)) { ++p; }
+
394  while (parse_digit(*p, i)) { p++; }
+
395  exponent = first_after_period - p;
+
396  // Decimal without digits (123.) is illegal
+
397  if (exponent == 0) {
+
398  return INVALID_NUMBER(src);
+
399  }
+
400  return SUCCESS;
+
401 }
+
402 
+
403 simdjson_inline error_code parse_exponent(simdjson_unused const uint8_t *const src, const uint8_t *&p, int64_t &exponent) {
+
404  // Exp Sign: -123.456e[-]78
+
405  bool neg_exp = ('-' == *p);
+
406  if (neg_exp || '+' == *p) { p++; } // Skip + as well
+
407 
+
408  // Exponent: -123.456e-[78]
+
409  auto start_exp = p;
+
410  int64_t exp_number = 0;
+
411  while (parse_digit(*p, exp_number)) { ++p; }
+
412  // It is possible for parse_digit to overflow.
+
413  // In particular, it could overflow to INT64_MIN, and we cannot do - INT64_MIN.
+
414  // Thus we *must* check for possible overflow before we negate exp_number.
+
415 
+
416  // Performance notes: it may seem like combining the two "simdjson_unlikely checks" below into
+
417  // a single simdjson_unlikely path would be faster. The reasoning is sound, but the compiler may
+
418  // not oblige and may, in fact, generate two distinct paths in any case. It might be
+
419  // possible to do uint64_t(p - start_exp - 1) >= 18 but it could end up trading off
+
420  // instructions for a simdjson_likely branch, an unconclusive gain.
+
421 
+
422  // If there were no digits, it's an error.
+
423  if (simdjson_unlikely(p == start_exp)) {
+
424  return INVALID_NUMBER(src);
+
425  }
+
426  // We have a valid positive exponent in exp_number at this point, except that
+
427  // it may have overflowed.
+
428 
+
429  // If there were more than 18 digits, we may have overflowed the integer. We have to do
+
430  // something!!!!
+
431  if (simdjson_unlikely(p > start_exp+18)) {
+
432  // Skip leading zeroes: 1e000000000000000000001 is technically valid and doesn't overflow
+
433  while (*start_exp == '0') { start_exp++; }
+
434  // 19 digits could overflow int64_t and is kind of absurd anyway. We don't
+
435  // support exponents smaller than -999,999,999,999,999,999 and bigger
+
436  // than 999,999,999,999,999,999.
+
437  // We can truncate.
+
438  // Note that 999999999999999999 is assuredly too large. The maximal ieee64 value before
+
439  // infinity is ~1.8e308. The smallest subnormal is ~5e-324. So, actually, we could
+
440  // truncate at 324.
+
441  // Note that there is no reason to fail per se at this point in time.
+
442  // E.g., 0e999999999999999999999 is a fine number.
+
443  if (p > start_exp+18) { exp_number = 999999999999999999; }
+
444  }
+
445  // At this point, we know that exp_number is a sane, positive, signed integer.
+
446  // It is <= 999,999,999,999,999,999. As long as 'exponent' is in
+
447  // [-8223372036854775808, 8223372036854775808], we won't overflow. Because 'exponent'
+
448  // is bounded in magnitude by the size of the JSON input, we are fine in this universe.
+
449  // To sum it up: the next line should never overflow.
+
450  exponent += (neg_exp ? -exp_number : exp_number);
+
451  return SUCCESS;
+
452 }
+
453 
+
454 simdjson_inline size_t significant_digits(const uint8_t * start_digits, size_t digit_count) {
+
455  // It is possible that the integer had an overflow.
+
456  // We have to handle the case where we have 0.0000somenumber.
+
457  const uint8_t *start = start_digits;
+
458  while ((*start == '0') || (*start == '.')) { ++start; }
+
459  // we over-decrement by one when there is a '.'
+
460  return digit_count - size_t(start - start_digits);
+
461 }
+
462 
+
463 template<typename W>
+
464 simdjson_inline error_code write_float(const uint8_t *const src, bool negative, uint64_t i, const uint8_t * start_digits, size_t digit_count, int64_t exponent, W &writer) {
+
465  // If we frequently had to deal with long strings of digits,
+
466  // we could extend our code by using a 128-bit integer instead
+
467  // of a 64-bit integer. However, this is uncommon in practice.
+
468  //
+
469  // 9999999999999999999 < 2**64 so we can accommodate 19 digits.
+
470  // If we have a decimal separator, then digit_count - 1 is the number of digits, but we
+
471  // may not have a decimal separator!
+
472  if (simdjson_unlikely(digit_count > 19 && significant_digits(start_digits, digit_count) > 19)) {
+
473  // Ok, chances are good that we had an overflow!
+
474  // this is almost never going to get called!!!
+
475  // we start anew, going slowly!!!
+
476  // This will happen in the following examples:
+
477  // 10000000000000000000000000000000000000000000e+308
+
478  // 3.1415926535897932384626433832795028841971693993751
+
479  //
+
480  // NOTE: This makes a *copy* of the writer and passes it to slow_float_parsing. This happens
+
481  // because slow_float_parsing is a non-inlined function. If we passed our writer reference to
+
482  // it, it would force it to be stored in memory, preventing the compiler from picking it apart
+
483  // and putting into registers. i.e. if we pass it as reference, it gets slow.
+
484  // This is what forces the skip_double, as well.
+
485  error_code error = slow_float_parsing(src, writer);
+
486  writer.skip_double();
+
487  return error;
+
488  }
+
489  // NOTE: it's weird that the simdjson_unlikely() only wraps half the if, but it seems to get slower any other
+
490  // way we've tried: https://github.com/simdjson/simdjson/pull/990#discussion_r448497331
+
491  // To future reader: we'd love if someone found a better way, or at least could explain this result!
+
492  if (simdjson_unlikely(exponent < simdjson::internal::smallest_power) || (exponent > simdjson::internal::largest_power)) {
+
493  //
+
494  // Important: smallest_power is such that it leads to a zero value.
+
495  // Observe that 18446744073709551615e-343 == 0, i.e. (2**64 - 1) e -343 is zero
+
496  // so something x 10^-343 goes to zero, but not so with something x 10^-342.
+
497  static_assert(simdjson::internal::smallest_power <= -342, "smallest_power is not small enough");
+
498  //
+
499  if((exponent < simdjson::internal::smallest_power) || (i == 0)) {
+
500  // E.g. Parse "-0.0e-999" into the same value as "-0.0". See https://en.wikipedia.org/wiki/Signed_zero
+
501  WRITE_DOUBLE(negative ? -0.0 : 0.0, src, writer);
+
502  return SUCCESS;
+
503  } else { // (exponent > largest_power) and (i != 0)
+
504  // We have, for sure, an infinite value and simdjson refuses to parse infinite values.
+
505  return INVALID_NUMBER(src);
+
506  }
+
507  }
+
508  double d;
+
509  if (!compute_float_64(exponent, i, negative, d)) {
+
510  // we are almost never going to get here.
+
511  if (!parse_float_fallback(src, &d)) { return INVALID_NUMBER(src); }
+
512  }
+
513  WRITE_DOUBLE(d, src, writer);
+
514  return SUCCESS;
+
515 }
+
516 
+
517 // for performance analysis, it is sometimes useful to skip parsing
+
518 #ifdef SIMDJSON_SKIPNUMBERPARSING
+
519 
+
520 template<typename W>
+
521 simdjson_inline error_code parse_number(const uint8_t *const, W &writer) {
+
522  writer.append_s64(0); // always write zero
+
523  return SUCCESS; // always succeeds
+
524 }
+
525 
+
526 simdjson_unused simdjson_inline simdjson_result<uint64_t> parse_unsigned(const uint8_t * const src) noexcept { return 0; }
+
527 simdjson_unused simdjson_inline simdjson_result<int64_t> parse_integer(const uint8_t * const src) noexcept { return 0; }
+
528 simdjson_unused simdjson_inline simdjson_result<double> parse_double(const uint8_t * const src) noexcept { return 0; }
+
529 simdjson_unused simdjson_inline simdjson_result<uint64_t> parse_unsigned_in_string(const uint8_t * const src) noexcept { return 0; }
+
530 simdjson_unused simdjson_inline simdjson_result<int64_t> parse_integer_in_string(const uint8_t * const src) noexcept { return 0; }
+
531 simdjson_unused simdjson_inline simdjson_result<double> parse_double_in_string(const uint8_t * const src) noexcept { return 0; }
+
532 simdjson_unused simdjson_inline bool is_negative(const uint8_t * src) noexcept { return false; }
+
533 simdjson_unused simdjson_inline simdjson_result<bool> is_integer(const uint8_t * src) noexcept { return false; }
+
534 simdjson_unused simdjson_inline simdjson_result<ondemand::number_type> get_number_type(const uint8_t * src) noexcept { return ondemand::number_type::signed_integer; }
+
535 #else
+
536 
+
537 // parse the number at src
+
538 // define JSON_TEST_NUMBERS for unit testing
+
539 //
+
540 // It is assumed that the number is followed by a structural ({,},],[) character
+
541 // or a white space character. If that is not the case (e.g., when the JSON
+
542 // document is made of a single number), then it is necessary to copy the
+
543 // content and append a space before calling this function.
+
544 //
+
545 // Our objective is accurate parsing (ULP of 0) at high speed.
+
546 template<typename W>
+
547 simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
+
548 
+
549  //
+
550  // Check for minus sign
+
551  //
+
552  bool negative = (*src == '-');
+
553  const uint8_t *p = src + uint8_t(negative);
+
554 
+
555  //
+
556  // Parse the integer part.
+
557  //
+
558  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
559  const uint8_t *const start_digits = p;
+
560  uint64_t i = 0;
+
561  while (parse_digit(*p, i)) { p++; }
+
562 
+
563  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
564  // Optimization note: size_t is expected to be unsigned.
+
565  size_t digit_count = size_t(p - start_digits);
+
566  if (digit_count == 0 || ('0' == *start_digits && digit_count > 1)) { return INVALID_NUMBER(src); }
+
567 
+
568  //
+
569  // Handle floats if there is a . or e (or both)
+
570  //
+
571  int64_t exponent = 0;
+
572  bool is_float = false;
+
573  if ('.' == *p) {
+
574  is_float = true;
+
575  ++p;
+
576  SIMDJSON_TRY( parse_decimal(src, p, i, exponent) );
+
577  digit_count = int(p - start_digits); // used later to guard against overflows
+
578  }
+
579  if (('e' == *p) || ('E' == *p)) {
+
580  is_float = true;
+
581  ++p;
+
582  SIMDJSON_TRY( parse_exponent(src, p, exponent) );
+
583  }
+
584  if (is_float) {
+
585  const bool dirty_end = jsoncharutils::is_not_structural_or_whitespace(*p);
+
586  SIMDJSON_TRY( write_float(src, negative, i, start_digits, digit_count, exponent, writer) );
+
587  if (dirty_end) { return INVALID_NUMBER(src); }
+
588  return SUCCESS;
+
589  }
+
590 
+
591  // The longest negative 64-bit number is 19 digits.
+
592  // The longest positive 64-bit number is 20 digits.
+
593  // We do it this way so we don't trigger this branch unless we must.
+
594  size_t longest_digit_count = negative ? 19 : 20;
+
595  if (digit_count > longest_digit_count) { return INVALID_NUMBER(src); }
+
596  if (digit_count == longest_digit_count) {
+
597  if (negative) {
+
598  // Anything negative above INT64_MAX+1 is invalid
+
599  if (i > uint64_t(INT64_MAX)+1) { return INVALID_NUMBER(src); }
+
600  WRITE_INTEGER(~i+1, src, writer);
+
601  if (jsoncharutils::is_not_structural_or_whitespace(*p)) { return INVALID_NUMBER(src); }
+
602  return SUCCESS;
+
603  // Positive overflow check:
+
604  // - A 20 digit number starting with 2-9 is overflow, because 18,446,744,073,709,551,615 is the
+
605  // biggest uint64_t.
+
606  // - A 20 digit number starting with 1 is overflow if it is less than INT64_MAX.
+
607  // If we got here, it's a 20 digit number starting with the digit "1".
+
608  // - If a 20 digit number starting with 1 overflowed (i*10+digit), the result will be smaller
+
609  // than 1,553,255,926,290,448,384.
+
610  // - That is smaller than the smallest possible 20-digit number the user could write:
+
611  // 10,000,000,000,000,000,000.
+
612  // - Therefore, if the number is positive and lower than that, it's overflow.
+
613  // - The value we are looking at is less than or equal to INT64_MAX.
+
614  //
+
615  } else if (src[0] != uint8_t('1') || i <= uint64_t(INT64_MAX)) { return INVALID_NUMBER(src); }
+
616  }
+
617 
+
618  // Write unsigned if it doesn't fit in a signed integer.
+
619  if (i > uint64_t(INT64_MAX)) {
+
620  WRITE_UNSIGNED(i, src, writer);
+
621  } else {
+
622  WRITE_INTEGER(negative ? (~i+1) : i, src, writer);
+
623  }
+
624  if (jsoncharutils::is_not_structural_or_whitespace(*p)) { return INVALID_NUMBER(src); }
+
625  return SUCCESS;
+
626 }
+
627 
+
628 // Inlineable functions
+
629 namespace {
+
630 
+
631 // This table can be used to characterize the final character of an integer
+
632 // string. For JSON structural character and allowable white space characters,
+
633 // we return SUCCESS. For 'e', '.' and 'E', we return INCORRECT_TYPE. Otherwise
+
634 // we return NUMBER_ERROR.
+
635 // Optimization note: we could easily reduce the size of the table by half (to 128)
+
636 // at the cost of an extra branch.
+
637 // Optimization note: we want the values to use at most 8 bits (not, e.g., 32 bits):
+
638 static_assert(error_code(uint8_t(NUMBER_ERROR))== NUMBER_ERROR, "bad NUMBER_ERROR cast");
+
639 static_assert(error_code(uint8_t(SUCCESS))== SUCCESS, "bad NUMBER_ERROR cast");
+
640 static_assert(error_code(uint8_t(INCORRECT_TYPE))== INCORRECT_TYPE, "bad NUMBER_ERROR cast");
+
641 
+
642 const uint8_t integer_string_finisher[256] = {
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
694  NUMBER_ERROR};
+
695 
+
696 // Parse any number from 0 to 18,446,744,073,709,551,615
+
697 simdjson_unused simdjson_inline simdjson_result<uint64_t> parse_unsigned(const uint8_t * const src) noexcept {
+
698  const uint8_t *p = src;
+
699  //
+
700  // Parse the integer part.
+
701  //
+
702  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
703  const uint8_t *const start_digits = p;
+
704  uint64_t i = 0;
+
705  while (parse_digit(*p, i)) { p++; }
+
706 
+
707  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
708  // Optimization note: size_t is expected to be unsigned.
+
709  size_t digit_count = size_t(p - start_digits);
+
710  // The longest positive 64-bit number is 20 digits.
+
711  // We do it this way so we don't trigger this branch unless we must.
+
712  // Optimization note: the compiler can probably merge
+
713  // ((digit_count == 0) || (digit_count > 20))
+
714  // into a single branch since digit_count is unsigned.
+
715  if ((digit_count == 0) || (digit_count > 20)) { return INCORRECT_TYPE; }
+
716  // Here digit_count > 0.
+
717  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
718  // We can do the following...
+
719  // if (!jsoncharutils::is_structural_or_whitespace(*p)) {
+
720  // return (*p == '.' || *p == 'e' || *p == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
721  // }
+
722  // as a single table lookup:
+
723  if (integer_string_finisher[*p] != SUCCESS) { return error_code(integer_string_finisher[*p]); }
+
724 
+
725  if (digit_count == 20) {
+
726  // Positive overflow check:
+
727  // - A 20 digit number starting with 2-9 is overflow, because 18,446,744,073,709,551,615 is the
+
728  // biggest uint64_t.
+
729  // - A 20 digit number starting with 1 is overflow if it is less than INT64_MAX.
+
730  // If we got here, it's a 20 digit number starting with the digit "1".
+
731  // - If a 20 digit number starting with 1 overflowed (i*10+digit), the result will be smaller
+
732  // than 1,553,255,926,290,448,384.
+
733  // - That is smaller than the smallest possible 20-digit number the user could write:
+
734  // 10,000,000,000,000,000,000.
+
735  // - Therefore, if the number is positive and lower than that, it's overflow.
+
736  // - The value we are looking at is less than or equal to INT64_MAX.
+
737  //
+
738  if (src[0] != uint8_t('1') || i <= uint64_t(INT64_MAX)) { return INCORRECT_TYPE; }
+
739  }
+
740 
+
741  return i;
+
742 }
+
743 
+
744 
+
745 // Parse any number from 0 to 18,446,744,073,709,551,615
+
746 // Never read at src_end or beyond
+
747 simdjson_unused simdjson_inline simdjson_result<uint64_t> parse_unsigned(const uint8_t * const src, const uint8_t * const src_end) noexcept {
+
748  const uint8_t *p = src;
+
749  //
+
750  // Parse the integer part.
+
751  //
+
752  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
753  const uint8_t *const start_digits = p;
+
754  uint64_t i = 0;
+
755  while ((p != src_end) && parse_digit(*p, i)) { p++; }
+
756 
+
757  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
758  // Optimization note: size_t is expected to be unsigned.
+
759  size_t digit_count = size_t(p - start_digits);
+
760  // The longest positive 64-bit number is 20 digits.
+
761  // We do it this way so we don't trigger this branch unless we must.
+
762  // Optimization note: the compiler can probably merge
+
763  // ((digit_count == 0) || (digit_count > 20))
+
764  // into a single branch since digit_count is unsigned.
+
765  if ((digit_count == 0) || (digit_count > 20)) { return INCORRECT_TYPE; }
+
766  // Here digit_count > 0.
+
767  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
768  // We can do the following...
+
769  // if (!jsoncharutils::is_structural_or_whitespace(*p)) {
+
770  // return (*p == '.' || *p == 'e' || *p == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
771  // }
+
772  // as a single table lookup:
+
773  if ((p != src_end) && integer_string_finisher[*p] != SUCCESS) { return error_code(integer_string_finisher[*p]); }
+
774 
+
775  if (digit_count == 20) {
+
776  // Positive overflow check:
+
777  // - A 20 digit number starting with 2-9 is overflow, because 18,446,744,073,709,551,615 is the
+
778  // biggest uint64_t.
+
779  // - A 20 digit number starting with 1 is overflow if it is less than INT64_MAX.
+
780  // If we got here, it's a 20 digit number starting with the digit "1".
+
781  // - If a 20 digit number starting with 1 overflowed (i*10+digit), the result will be smaller
+
782  // than 1,553,255,926,290,448,384.
+
783  // - That is smaller than the smallest possible 20-digit number the user could write:
+
784  // 10,000,000,000,000,000,000.
+
785  // - Therefore, if the number is positive and lower than that, it's overflow.
+
786  // - The value we are looking at is less than or equal to INT64_MAX.
+
787  //
+
788  if (src[0] != uint8_t('1') || i <= uint64_t(INT64_MAX)) { return INCORRECT_TYPE; }
+
789  }
+
790 
+
791  return i;
+
792 }
+
793 
+
794 // Parse any number from 0 to 18,446,744,073,709,551,615
+
795 simdjson_unused simdjson_inline simdjson_result<uint64_t> parse_unsigned_in_string(const uint8_t * const src) noexcept {
+
796  const uint8_t *p = src + 1;
+
797  //
+
798  // Parse the integer part.
+
799  //
+
800  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
801  const uint8_t *const start_digits = p;
+
802  uint64_t i = 0;
+
803  while (parse_digit(*p, i)) { p++; }
+
804 
+
805  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
806  // Optimization note: size_t is expected to be unsigned.
+
807  size_t digit_count = size_t(p - start_digits);
+
808  // The longest positive 64-bit number is 20 digits.
+
809  // We do it this way so we don't trigger this branch unless we must.
+
810  // Optimization note: the compiler can probably merge
+
811  // ((digit_count == 0) || (digit_count > 20))
+
812  // into a single branch since digit_count is unsigned.
+
813  if ((digit_count == 0) || (digit_count > 20)) { return INCORRECT_TYPE; }
+
814  // Here digit_count > 0.
+
815  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
816  // We can do the following...
+
817  // if (!jsoncharutils::is_structural_or_whitespace(*p)) {
+
818  // return (*p == '.' || *p == 'e' || *p == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
819  // }
+
820  // as a single table lookup:
+
821  if (*p != '"') { return NUMBER_ERROR; }
+
822 
+
823  if (digit_count == 20) {
+
824  // Positive overflow check:
+
825  // - A 20 digit number starting with 2-9 is overflow, because 18,446,744,073,709,551,615 is the
+
826  // biggest uint64_t.
+
827  // - A 20 digit number starting with 1 is overflow if it is less than INT64_MAX.
+
828  // If we got here, it's a 20 digit number starting with the digit "1".
+
829  // - If a 20 digit number starting with 1 overflowed (i*10+digit), the result will be smaller
+
830  // than 1,553,255,926,290,448,384.
+
831  // - That is smaller than the smallest possible 20-digit number the user could write:
+
832  // 10,000,000,000,000,000,000.
+
833  // - Therefore, if the number is positive and lower than that, it's overflow.
+
834  // - The value we are looking at is less than or equal to INT64_MAX.
+
835  //
+
836  // Note: we use src[1] and not src[0] because src[0] is the quote character in this
+
837  // instance.
+
838  if (src[1] != uint8_t('1') || i <= uint64_t(INT64_MAX)) { return INCORRECT_TYPE; }
+
839  }
+
840 
+
841  return i;
+
842 }
+
843 
+
844 // Parse any number from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
845 simdjson_unused simdjson_inline simdjson_result<int64_t> parse_integer(const uint8_t *src) noexcept {
+
846  //
+
847  // Check for minus sign
+
848  //
+
849  bool negative = (*src == '-');
+
850  const uint8_t *p = src + uint8_t(negative);
+
851 
+
852  //
+
853  // Parse the integer part.
+
854  //
+
855  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
856  const uint8_t *const start_digits = p;
+
857  uint64_t i = 0;
+
858  while (parse_digit(*p, i)) { p++; }
+
859 
+
860  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
861  // Optimization note: size_t is expected to be unsigned.
+
862  size_t digit_count = size_t(p - start_digits);
+
863  // We go from
+
864  // -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
865  // so we can never represent numbers that have more than 19 digits.
+
866  size_t longest_digit_count = 19;
+
867  // Optimization note: the compiler can probably merge
+
868  // ((digit_count == 0) || (digit_count > longest_digit_count))
+
869  // into a single branch since digit_count is unsigned.
+
870  if ((digit_count == 0) || (digit_count > longest_digit_count)) { return INCORRECT_TYPE; }
+
871  // Here digit_count > 0.
+
872  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
873  // We can do the following...
+
874  // if (!jsoncharutils::is_structural_or_whitespace(*p)) {
+
875  // return (*p == '.' || *p == 'e' || *p == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
876  // }
+
877  // as a single table lookup:
+
878  if(integer_string_finisher[*p] != SUCCESS) { return error_code(integer_string_finisher[*p]); }
+
879  // Negative numbers have can go down to - INT64_MAX - 1 whereas positive numbers are limited to INT64_MAX.
+
880  // Performance note: This check is only needed when digit_count == longest_digit_count but it is
+
881  // so cheap that we might as well always make it.
+
882  if(i > uint64_t(INT64_MAX) + uint64_t(negative)) { return INCORRECT_TYPE; }
+
883  return negative ? (~i+1) : i;
+
884 }
+
885 
+
886 // Parse any number from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
887 // Never read at src_end or beyond
+
888 simdjson_unused simdjson_inline simdjson_result<int64_t> parse_integer(const uint8_t * const src, const uint8_t * const src_end) noexcept {
+
889  //
+
890  // Check for minus sign
+
891  //
+
892  if(src == src_end) { return NUMBER_ERROR; }
+
893  bool negative = (*src == '-');
+
894  const uint8_t *p = src + uint8_t(negative);
+
895 
+
896  //
+
897  // Parse the integer part.
+
898  //
+
899  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
900  const uint8_t *const start_digits = p;
+
901  uint64_t i = 0;
+
902  while ((p != src_end) && parse_digit(*p, i)) { p++; }
+
903 
+
904  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
905  // Optimization note: size_t is expected to be unsigned.
+
906  size_t digit_count = size_t(p - start_digits);
+
907  // We go from
+
908  // -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
909  // so we can never represent numbers that have more than 19 digits.
+
910  size_t longest_digit_count = 19;
+
911  // Optimization note: the compiler can probably merge
+
912  // ((digit_count == 0) || (digit_count > longest_digit_count))
+
913  // into a single branch since digit_count is unsigned.
+
914  if ((digit_count == 0) || (digit_count > longest_digit_count)) { return INCORRECT_TYPE; }
+
915  // Here digit_count > 0.
+
916  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
917  // We can do the following...
+
918  // if (!jsoncharutils::is_structural_or_whitespace(*p)) {
+
919  // return (*p == '.' || *p == 'e' || *p == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
920  // }
+
921  // as a single table lookup:
+
922  if((p != src_end) && integer_string_finisher[*p] != SUCCESS) { return error_code(integer_string_finisher[*p]); }
+
923  // Negative numbers have can go down to - INT64_MAX - 1 whereas positive numbers are limited to INT64_MAX.
+
924  // Performance note: This check is only needed when digit_count == longest_digit_count but it is
+
925  // so cheap that we might as well always make it.
+
926  if(i > uint64_t(INT64_MAX) + uint64_t(negative)) { return INCORRECT_TYPE; }
+
927  return negative ? (~i+1) : i;
+
928 }
+
929 
+
930 // Parse any number from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
931 simdjson_unused simdjson_inline simdjson_result<int64_t> parse_integer_in_string(const uint8_t *src) noexcept {
+
932  //
+
933  // Check for minus sign
+
934  //
+
935  bool negative = (*(src + 1) == '-');
+
936  src += uint8_t(negative) + 1;
+
937 
+
938  //
+
939  // Parse the integer part.
+
940  //
+
941  // PERF NOTE: we don't use is_made_of_eight_digits_fast because large integers like 123456789 are rare
+
942  const uint8_t *const start_digits = src;
+
943  uint64_t i = 0;
+
944  while (parse_digit(*src, i)) { src++; }
+
945 
+
946  // If there were no digits, or if the integer starts with 0 and has more than one digit, it's an error.
+
947  // Optimization note: size_t is expected to be unsigned.
+
948  size_t digit_count = size_t(src - start_digits);
+
949  // We go from
+
950  // -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
+
951  // so we can never represent numbers that have more than 19 digits.
+
952  size_t longest_digit_count = 19;
+
953  // Optimization note: the compiler can probably merge
+
954  // ((digit_count == 0) || (digit_count > longest_digit_count))
+
955  // into a single branch since digit_count is unsigned.
+
956  if ((digit_count == 0) || (digit_count > longest_digit_count)) { return INCORRECT_TYPE; }
+
957  // Here digit_count > 0.
+
958  if (('0' == *start_digits) && (digit_count > 1)) { return NUMBER_ERROR; }
+
959  // We can do the following...
+
960  // if (!jsoncharutils::is_structural_or_whitespace(*src)) {
+
961  // return (*src == '.' || *src == 'e' || *src == 'E') ? INCORRECT_TYPE : NUMBER_ERROR;
+
962  // }
+
963  // as a single table lookup:
+
964  if(*src != '"') { return NUMBER_ERROR; }
+
965  // Negative numbers have can go down to - INT64_MAX - 1 whereas positive numbers are limited to INT64_MAX.
+
966  // Performance note: This check is only needed when digit_count == longest_digit_count but it is
+
967  // so cheap that we might as well always make it.
+
968  if(i > uint64_t(INT64_MAX) + uint64_t(negative)) { return INCORRECT_TYPE; }
+
969  return negative ? (~i+1) : i;
+
970 }
+
971 
+
972 simdjson_unused simdjson_inline simdjson_result<double> parse_double(const uint8_t * src) noexcept {
+
973  //
+
974  // Check for minus sign
+
975  //
+
976  bool negative = (*src == '-');
+
977  src += uint8_t(negative);
+
978 
+
979  //
+
980  // Parse the integer part.
+
981  //
+
982  uint64_t i = 0;
+
983  const uint8_t *p = src;
+
984  p += parse_digit(*p, i);
+
985  bool leading_zero = (i == 0);
+
986  while (parse_digit(*p, i)) { p++; }
+
987  // no integer digits, or 0123 (zero must be solo)
+
988  if ( p == src ) { return INCORRECT_TYPE; }
+
989  if ( (leading_zero && p != src+1)) { return NUMBER_ERROR; }
+
990 
+
991  //
+
992  // Parse the decimal part.
+
993  //
+
994  int64_t exponent = 0;
+
995  bool overflow;
+
996  if (simdjson_likely(*p == '.')) {
+
997  p++;
+
998  const uint8_t *start_decimal_digits = p;
+
999  if (!parse_digit(*p, i)) { return NUMBER_ERROR; } // no decimal digits
+
1000  p++;
+
1001  while (parse_digit(*p, i)) { p++; }
+
1002  exponent = -(p - start_decimal_digits);
+
1003 
+
1004  // Overflow check. More than 19 digits (minus the decimal) may be overflow.
+
1005  overflow = p-src-1 > 19;
+
1006  if (simdjson_unlikely(overflow && leading_zero)) {
+
1007  // Skip leading 0.00000 and see if it still overflows
+
1008  const uint8_t *start_digits = src + 2;
+
1009  while (*start_digits == '0') { start_digits++; }
+
1010  overflow = start_digits-src > 19;
+
1011  }
+
1012  } else {
+
1013  overflow = p-src > 19;
+
1014  }
+
1015 
+
1016  //
+
1017  // Parse the exponent
+
1018  //
+
1019  if (*p == 'e' || *p == 'E') {
+
1020  p++;
+
1021  bool exp_neg = *p == '-';
+
1022  p += exp_neg || *p == '+';
+
1023 
+
1024  uint64_t exp = 0;
+
1025  const uint8_t *start_exp_digits = p;
+
1026  while (parse_digit(*p, exp)) { p++; }
+
1027  // no exp digits, or 20+ exp digits
+
1028  if (p-start_exp_digits == 0 || p-start_exp_digits > 19) { return NUMBER_ERROR; }
+
1029 
+
1030  exponent += exp_neg ? 0-exp : exp;
+
1031  }
+
1032 
+
1033  if (jsoncharutils::is_not_structural_or_whitespace(*p)) { return NUMBER_ERROR; }
+
1034 
+
1035  overflow = overflow || exponent < simdjson::internal::smallest_power || exponent > simdjson::internal::largest_power;
+
1036 
+
1037  //
+
1038  // Assemble (or slow-parse) the float
+
1039  //
+
1040  double d;
+
1041  if (simdjson_likely(!overflow)) {
+
1042  if (compute_float_64(exponent, i, negative, d)) { return d; }
+
1043  }
+
1044  if (!parse_float_fallback(src - uint8_t(negative), &d)) {
+
1045  return NUMBER_ERROR;
+
1046  }
+
1047  return d;
+
1048 }
+
1049 
+
1050 simdjson_unused simdjson_inline bool is_negative(const uint8_t * src) noexcept {
+
1051  return (*src == '-');
+
1052 }
+
1053 
+
1054 simdjson_unused simdjson_inline simdjson_result<bool> is_integer(const uint8_t * src) noexcept {
+
1055  bool negative = (*src == '-');
+
1056  src += uint8_t(negative);
+
1057  const uint8_t *p = src;
+
1058  while(static_cast<uint8_t>(*p - '0') <= 9) { p++; }
+
1059  if ( p == src ) { return NUMBER_ERROR; }
+
1060  if (jsoncharutils::is_structural_or_whitespace(*p)) { return true; }
+
1061  return false;
+
1062 }
+
1063 
+
1064 simdjson_unused simdjson_inline simdjson_result<ondemand::number_type> get_number_type(const uint8_t * src) noexcept {
+
1065  bool negative = (*src == '-');
+
1066  src += uint8_t(negative);
+
1067  const uint8_t *p = src;
+
1068  while(static_cast<uint8_t>(*p - '0') <= 9) { p++; }
+
1069  if ( p == src ) { return NUMBER_ERROR; }
+
1070  if (jsoncharutils::is_structural_or_whitespace(*p)) {
+
1071  // We have an integer.
+
1072  // If the number is negative and valid, it must be a signed integer.
+
1073  if(negative) { return ondemand::number_type::signed_integer; }
+
1074  // We want values larger or equal to 9223372036854775808 to be unsigned
+
1075  // integers, and the other values to be signed integers.
+
1076  int digit_count = int(p - src);
+
1077  if(digit_count >= 19) {
+
1078  const uint8_t * smaller_big_integer = reinterpret_cast<const uint8_t *>("9223372036854775808");
+
1079  if((digit_count >= 20) || (memcmp(src, smaller_big_integer, 19) >= 0)) {
+ +
1081  }
+
1082  }
+ +
1084  }
+
1085  // Hopefully, we have 'e' or 'E' or '.'.
+
1086  return ondemand::number_type::floating_point_number;
+
1087 }
+
1088 
+
1089 // Never read at src_end or beyond
+
1090 simdjson_unused simdjson_inline simdjson_result<double> parse_double(const uint8_t * src, const uint8_t * const src_end) noexcept {
+
1091  if(src == src_end) { return NUMBER_ERROR; }
+
1092  //
+
1093  // Check for minus sign
+
1094  //
+
1095  bool negative = (*src == '-');
+
1096  src += uint8_t(negative);
+
1097 
+
1098  //
+
1099  // Parse the integer part.
+
1100  //
+
1101  uint64_t i = 0;
+
1102  const uint8_t *p = src;
+
1103  if(p == src_end) { return NUMBER_ERROR; }
+
1104  p += parse_digit(*p, i);
+
1105  bool leading_zero = (i == 0);
+
1106  while ((p != src_end) && parse_digit(*p, i)) { p++; }
+
1107  // no integer digits, or 0123 (zero must be solo)
+
1108  if ( p == src ) { return INCORRECT_TYPE; }
+
1109  if ( (leading_zero && p != src+1)) { return NUMBER_ERROR; }
+
1110 
+
1111  //
+
1112  // Parse the decimal part.
+
1113  //
+
1114  int64_t exponent = 0;
+
1115  bool overflow;
+
1116  if (simdjson_likely((p != src_end) && (*p == '.'))) {
+
1117  p++;
+
1118  const uint8_t *start_decimal_digits = p;
+
1119  if ((p == src_end) || !parse_digit(*p, i)) { return NUMBER_ERROR; } // no decimal digits
+
1120  p++;
+
1121  while ((p != src_end) && parse_digit(*p, i)) { p++; }
+
1122  exponent = -(p - start_decimal_digits);
+
1123 
+
1124  // Overflow check. More than 19 digits (minus the decimal) may be overflow.
+
1125  overflow = p-src-1 > 19;
+
1126  if (simdjson_unlikely(overflow && leading_zero)) {
+
1127  // Skip leading 0.00000 and see if it still overflows
+
1128  const uint8_t *start_digits = src + 2;
+
1129  while (*start_digits == '0') { start_digits++; }
+
1130  overflow = start_digits-src > 19;
+
1131  }
+
1132  } else {
+
1133  overflow = p-src > 19;
+
1134  }
+
1135 
+
1136  //
+
1137  // Parse the exponent
+
1138  //
+
1139  if ((p != src_end) && (*p == 'e' || *p == 'E')) {
+
1140  p++;
+
1141  if(p == src_end) { return NUMBER_ERROR; }
+
1142  bool exp_neg = *p == '-';
+
1143  p += exp_neg || *p == '+';
+
1144 
+
1145  uint64_t exp = 0;
+
1146  const uint8_t *start_exp_digits = p;
+
1147  while ((p != src_end) && parse_digit(*p, exp)) { p++; }
+
1148  // no exp digits, or 20+ exp digits
+
1149  if (p-start_exp_digits == 0 || p-start_exp_digits > 19) { return NUMBER_ERROR; }
+
1150 
+
1151  exponent += exp_neg ? 0-exp : exp;
+
1152  }
+
1153 
+
1154  if ((p != src_end) && jsoncharutils::is_not_structural_or_whitespace(*p)) { return NUMBER_ERROR; }
+
1155 
+
1156  overflow = overflow || exponent < simdjson::internal::smallest_power || exponent > simdjson::internal::largest_power;
+
1157 
+
1158  //
+
1159  // Assemble (or slow-parse) the float
+
1160  //
+
1161  double d;
+
1162  if (simdjson_likely(!overflow)) {
+
1163  if (compute_float_64(exponent, i, negative, d)) { return d; }
+
1164  }
+
1165  if (!parse_float_fallback(src - uint8_t(negative), src_end, &d)) {
+
1166  return NUMBER_ERROR;
+
1167  }
+
1168  return d;
+
1169 }
+
1170 
+
1171 simdjson_unused simdjson_inline simdjson_result<double> parse_double_in_string(const uint8_t * src) noexcept {
+
1172  //
+
1173  // Check for minus sign
+
1174  //
+
1175  bool negative = (*(src + 1) == '-');
+
1176  src += uint8_t(negative) + 1;
+
1177 
+
1178  //
+
1179  // Parse the integer part.
+
1180  //
+
1181  uint64_t i = 0;
+
1182  const uint8_t *p = src;
+
1183  p += parse_digit(*p, i);
+
1184  bool leading_zero = (i == 0);
+
1185  while (parse_digit(*p, i)) { p++; }
+
1186  // no integer digits, or 0123 (zero must be solo)
+
1187  if ( p == src ) { return INCORRECT_TYPE; }
+
1188  if ( (leading_zero && p != src+1)) { return NUMBER_ERROR; }
+
1189 
+
1190  //
+
1191  // Parse the decimal part.
+
1192  //
+
1193  int64_t exponent = 0;
+
1194  bool overflow;
+
1195  if (simdjson_likely(*p == '.')) {
+
1196  p++;
+
1197  const uint8_t *start_decimal_digits = p;
+
1198  if (!parse_digit(*p, i)) { return NUMBER_ERROR; } // no decimal digits
+
1199  p++;
+
1200  while (parse_digit(*p, i)) { p++; }
+
1201  exponent = -(p - start_decimal_digits);
+
1202 
+
1203  // Overflow check. More than 19 digits (minus the decimal) may be overflow.
+
1204  overflow = p-src-1 > 19;
+
1205  if (simdjson_unlikely(overflow && leading_zero)) {
+
1206  // Skip leading 0.00000 and see if it still overflows
+
1207  const uint8_t *start_digits = src + 2;
+
1208  while (*start_digits == '0') { start_digits++; }
+
1209  overflow = start_digits-src > 19;
+
1210  }
+
1211  } else {
+
1212  overflow = p-src > 19;
+
1213  }
+
1214 
+
1215  //
+
1216  // Parse the exponent
+
1217  //
+
1218  if (*p == 'e' || *p == 'E') {
+
1219  p++;
+
1220  bool exp_neg = *p == '-';
+
1221  p += exp_neg || *p == '+';
+
1222 
+
1223  uint64_t exp = 0;
+
1224  const uint8_t *start_exp_digits = p;
+
1225  while (parse_digit(*p, exp)) { p++; }
+
1226  // no exp digits, or 20+ exp digits
+
1227  if (p-start_exp_digits == 0 || p-start_exp_digits > 19) { return NUMBER_ERROR; }
+
1228 
+
1229  exponent += exp_neg ? 0-exp : exp;
+
1230  }
+
1231 
+
1232  if (*p != '"') { return NUMBER_ERROR; }
+
1233 
+
1234  overflow = overflow || exponent < simdjson::internal::smallest_power || exponent > simdjson::internal::largest_power;
+
1235 
+
1236  //
+
1237  // Assemble (or slow-parse) the float
+
1238  //
+
1239  double d;
+
1240  if (simdjson_likely(!overflow)) {
+
1241  if (compute_float_64(exponent, i, negative, d)) { return d; }
+
1242  }
+
1243  if (!parse_float_fallback(src - uint8_t(negative), &d)) {
+
1244  return NUMBER_ERROR;
+
1245  }
+
1246  return d;
+
1247 }
+
1248 } //namespace {}
+
1249 #endif // SIMDJSON_SKIPNUMBERPARSING
+
1250 
+
1251 } // namespace numberparsing
+
1252 } // unnamed namespace
+
1253 } // namespace SIMDJSON_IMPLEMENTATION
+
1254 } // namespace simdjson
+ +
@ unsigned_integer
a signed integer that fits in a 64-bit word using two's complement
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ NUMBER_ERROR
Problem while parsing a number.
Definition: error.h:27
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/generic_2ondemand_2array-inl_8h_source.html b/generic_2ondemand_2array-inl_8h_source.html new file mode 100644 index 000000000..42a87917f --- /dev/null +++ b/generic_2ondemand_2array-inl_8h_source.html @@ -0,0 +1,336 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/array-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 //
+
6 // ### Live States
+
7 //
+
8 // While iterating or looking up values, depth >= iter->depth. at_start may vary. Error is
+
9 // always SUCCESS:
+
10 //
+
11 // - Start: This is the state when the array is first found and the iterator is just past the `{`.
+
12 // In this state, at_start == true.
+
13 // - Next: After we hand a scalar value to the user, or an array/object which they then fully
+
14 // iterate over, the iterator is at the `,` before the next value (or `]`). In this state,
+
15 // depth == iter->depth, at_start == false, and error == SUCCESS.
+
16 // - Unfinished Business: When we hand an array/object to the user which they do not fully
+
17 // iterate over, we need to finish that iteration by skipping child values until we reach the
+
18 // Next state. In this state, depth > iter->depth, at_start == false, and error == SUCCESS.
+
19 //
+
20 // ## Error States
+
21 //
+
22 // In error states, we will yield exactly one more value before stopping. iter->depth == depth
+
23 // and at_start is always false. We decrement after yielding the error, moving to the Finished
+
24 // state.
+
25 //
+
26 // - Chained Error: When the array iterator is part of an error chain--for example, in
+
27 // `for (auto tweet : doc["tweets"])`, where the tweet element may be missing or not be an
+
28 // array--we yield that error in the loop, exactly once. In this state, error != SUCCESS and
+
29 // iter->depth == depth, and at_start == false. We decrement depth when we yield the error.
+
30 // - Missing Comma Error: When the iterator ++ method discovers there is no comma between elements,
+
31 // we flag that as an error and treat it exactly the same as a Chained Error. In this state,
+
32 // error == TAPE_ERROR, iter->depth == depth, and at_start == false.
+
33 //
+
34 // ## Terminal State
+
35 //
+
36 // The terminal state has iter->depth < depth. at_start is always false.
+
37 //
+
38 // - Finished: When we have reached a `]` or have reported an error, we are finished. We signal this
+
39 // by decrementing depth. In this state, iter->depth < depth, at_start == false, and
+
40 // error == SUCCESS.
+
41 //
+
42 
+
43 simdjson_inline array::array(const value_iterator &_iter) noexcept
+
44  : iter{_iter}
+
45 {
+
46 }
+
47 
+
48 simdjson_inline simdjson_result<array> array::start(value_iterator &iter) noexcept {
+
49  // We don't need to know if the array is empty to start iteration, but we do want to know if there
+
50  // is an error--thus `simdjson_unused`.
+
51  simdjson_unused bool has_value;
+
52  SIMDJSON_TRY( iter.start_array().get(has_value) );
+
53  return array(iter);
+
54 }
+
55 simdjson_inline simdjson_result<array> array::start_root(value_iterator &iter) noexcept {
+
56  simdjson_unused bool has_value;
+
57  SIMDJSON_TRY( iter.start_root_array().get(has_value) );
+
58  return array(iter);
+
59 }
+
60 simdjson_inline simdjson_result<array> array::started(value_iterator &iter) noexcept {
+
61  bool has_value;
+
62  SIMDJSON_TRY(iter.started_array().get(has_value));
+
63  return array(iter);
+
64 }
+
65 
+
66 simdjson_inline simdjson_result<array_iterator> array::begin() noexcept {
+
67 #if SIMDJSON_DEVELOPMENT_CHECKS
+
68  if (!iter.is_at_iterator_start()) { return OUT_OF_ORDER_ITERATION; }
+
69 #endif
+
70  return array_iterator(iter);
+
71 }
+
72 simdjson_inline simdjson_result<array_iterator> array::end() noexcept {
+
73  return array_iterator(iter);
+
74 }
+
75 simdjson_inline error_code array::consume() noexcept {
+
76  auto error = iter.json_iter().skip_child(iter.depth()-1);
+
77  if(error) { iter.abandon(); }
+
78  return error;
+
79 }
+
80 
+ +
82  const uint8_t * starting_point{iter.peek_start()};
+
83  auto error = consume();
+
84  if(error) { return error; }
+
85  // After 'consume()', we could be left pointing just beyond the document, but that
+
86  // is ok because we are not going to dereference the final pointer position, we just
+
87  // use it to compute the length in bytes.
+
88  const uint8_t * final_point{iter._json_iter->unsafe_pointer()};
+
89  return std::string_view(reinterpret_cast<const char*>(starting_point), size_t(final_point - starting_point));
+
90 }
+
91 
+
92 SIMDJSON_PUSH_DISABLE_WARNINGS
+
93 SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
+
94 simdjson_inline simdjson_result<size_t> array::count_elements() & noexcept {
+
95  size_t count{0};
+
96  // Important: we do not consume any of the values.
+
97  for(simdjson_unused auto v : *this) { count++; }
+
98  // The above loop will always succeed, but we want to report errors.
+
99  if(iter.error()) { return iter.error(); }
+
100  // We need to move back at the start because we expect users to iterate through
+
101  // the array after counting the number of elements.
+
102  iter.reset_array();
+
103  return count;
+
104 }
+
105 SIMDJSON_POP_DISABLE_WARNINGS
+
106 
+
107 simdjson_inline simdjson_result<bool> array::is_empty() & noexcept {
+
108  bool is_not_empty;
+
109  auto error = iter.reset_array().get(is_not_empty);
+
110  if(error) { return error; }
+
111  return !is_not_empty;
+
112 }
+
113 
+
114 inline simdjson_result<bool> array::reset() & noexcept {
+
115  return iter.reset_array();
+
116 }
+
117 
+
118 inline simdjson_result<value> array::at_pointer(std::string_view json_pointer) noexcept {
+
119  if (json_pointer[0] != '/') { return INVALID_JSON_POINTER; }
+
120  json_pointer = json_pointer.substr(1);
+
121  // - means "the append position" or "the element after the end of the array"
+
122  // We don't support this, because we're returning a real element, not a position.
+
123  if (json_pointer == "-") { return INDEX_OUT_OF_BOUNDS; }
+
124 
+
125  // Read the array index
+
126  size_t array_index = 0;
+
127  size_t i;
+
128  for (i = 0; i < json_pointer.length() && json_pointer[i] != '/'; i++) {
+
129  uint8_t digit = uint8_t(json_pointer[i] - '0');
+
130  // Check for non-digit in array index. If it's there, we're trying to get a field in an object
+
131  if (digit > 9) { return INCORRECT_TYPE; }
+
132  array_index = array_index*10 + digit;
+
133  }
+
134 
+
135  // 0 followed by other digits is invalid
+
136  if (i > 1 && json_pointer[0] == '0') { return INVALID_JSON_POINTER; } // "JSON pointer array index has other characters after 0"
+
137 
+
138  // Empty string is invalid; so is a "/" with no digits before it
+
139  if (i == 0) { return INVALID_JSON_POINTER; } // "Empty string in JSON pointer array index"
+
140  // Get the child
+
141  auto child = at(array_index);
+
142  // If there is an error, it ends here
+
143  if(child.error()) {
+
144  return child;
+
145  }
+
146 
+
147  // If there is a /, we're not done yet, call recursively.
+
148  if (i < json_pointer.length()) {
+
149  child = child.at_pointer(json_pointer.substr(i));
+
150  }
+
151  return child;
+
152 }
+
153 
+
154 simdjson_inline simdjson_result<value> array::at(size_t index) noexcept {
+
155  size_t i = 0;
+
156  for (auto value : *this) {
+
157  if (i == index) { return value; }
+
158  i++;
+
159  }
+
160  return INDEX_OUT_OF_BOUNDS;
+
161 }
+
162 
+
163 } // namespace ondemand
+
164 } // namespace SIMDJSON_IMPLEMENTATION
+
165 } // namespace simdjson
+
166 
+
167 namespace simdjson {
+
168 
+
169 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::simdjson_result(
+
170  SIMDJSON_IMPLEMENTATION::ondemand::array &&value
+
171 ) noexcept
+
172  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array>(
+
173  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::array>(value)
+
174  )
+
175 {
+
176 }
+
177 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::simdjson_result(
+
178  error_code error
+
179 ) noexcept
+
180  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array>(error)
+
181 {
+
182 }
+
183 
+
184 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::begin() noexcept {
+
185  if (error()) { return error(); }
+
186  return first.begin();
+
187 }
+
188 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::end() noexcept {
+
189  if (error()) { return error(); }
+
190  return first.end();
+
191 }
+
192 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::count_elements() & noexcept {
+
193  if (error()) { return error(); }
+
194  return first.count_elements();
+
195 }
+
196 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::is_empty() & noexcept {
+
197  if (error()) { return error(); }
+
198  return first.is_empty();
+
199 }
+
200 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::at(size_t index) noexcept {
+
201  if (error()) { return error(); }
+
202  return first.at(index);
+
203 }
+
204 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array>::at_pointer(std::string_view json_pointer) noexcept {
+
205  if (error()) { return error(); }
+
206  return first.at_pointer(json_pointer);
+
207 }
+
208 } // namespace simdjson
+ + +
simdjson_inline simdjson_result< value > at(size_t index) noexcept
Get the value at the given index.
Definition: array-inl.h:154
+
value_iterator iter
Iterator marking current position.
Definition: array.h:160
+
simdjson_inline simdjson_result< bool > is_empty() &noexcept
This method scans the beginning of the array and checks whether the array is empty.
Definition: array-inl.h:107
+
simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: array-inl.h:118
+
static simdjson_inline simdjson_result< array > start(value_iterator &iter) noexcept
Begin array iteration.
Definition: array-inl.h:48
+
simdjson_inline simdjson_result< array_iterator > begin() noexcept
Begin array iteration.
Definition: array-inl.h:66
+
simdjson_inline array() noexcept=default
Create a new invalid array.
+
simdjson_inline error_code consume() noexcept
Go to the end of the array, no matter where you are right now.
Definition: array-inl.h:75
+
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
Definition: array-inl.h:94
+
static simdjson_inline simdjson_result< array > start_root(value_iterator &iter) noexcept
Begin array iteration from the root.
Definition: array-inl.h:55
+
static simdjson_inline simdjson_result< array > started(value_iterator &iter) noexcept
Begin array iteration.
Definition: array-inl.h:60
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the array and returns a string_view instance corresponding to the array as represented in JS...
Definition: array-inl.h:81
+
simdjson_inline simdjson_result< array_iterator > end() noexcept
Sentinel representing the end of the array.
Definition: array-inl.h:72
+
simdjson_result< bool > reset() &noexcept
Reset the iterator so that we are pointing back at the beginning of the array.
Definition: array-inl.h:114
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ OUT_OF_ORDER_ITERATION
tried to iterate an array or object out of order
Definition: error.h:43
+
@ INDEX_OUT_OF_BOUNDS
JSON array index too large.
Definition: error.h:36
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/generic_2ondemand_2array_8h_source.html b/generic_2ondemand_2array_8h_source.html new file mode 100644 index 000000000..f7c44142d --- /dev/null +++ b/generic_2ondemand_2array_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/array.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
array.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
7 class value;
+
8 class document;
+
9 
+
13 class array {
+
14 public:
+
20  simdjson_inline array() noexcept = default;
+
21 
+
27  simdjson_inline simdjson_result<array_iterator> begin() noexcept;
+
33  simdjson_inline simdjson_result<array_iterator> end() noexcept;
+
48  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
+
58  simdjson_inline simdjson_result<bool> is_empty() & noexcept;
+
69  inline simdjson_result<bool> reset() & noexcept;
+
98  inline simdjson_result<value> at_pointer(std::string_view json_pointer) noexcept;
+
103  simdjson_inline simdjson_result<std::string_view> raw_json() noexcept;
+
104 
+
112  simdjson_inline simdjson_result<value> at(size_t index) noexcept;
+
113 protected:
+
117  simdjson_inline error_code consume() noexcept;
+
118 
+
126  static simdjson_inline simdjson_result<array> start(value_iterator &iter) noexcept;
+
135  static simdjson_inline simdjson_result<array> start_root(value_iterator &iter) noexcept;
+
144  static simdjson_inline simdjson_result<array> started(value_iterator &iter) noexcept;
+
145 
+
153  simdjson_inline array(const value_iterator &iter) noexcept;
+
154 
+
160  value_iterator iter{};
+
161 
+
162  friend class value;
+
163  friend class document;
+
164  friend struct simdjson_result<value>;
+
165  friend struct simdjson_result<array>;
+
166  friend class array_iterator;
+
167 };
+
168 
+
169 } // namespace ondemand
+
170 } // namespace SIMDJSON_IMPLEMENTATION
+
171 } // namespace simdjson
+
172 
+
173 namespace simdjson {
+
174 
+
175 template<>
+
176 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::array> {
+
177 public:
+ +
179  simdjson_inline simdjson_result(error_code error) noexcept;
+
180  simdjson_inline simdjson_result() noexcept = default;
+
181 
+ + +
184  inline simdjson_result<size_t> count_elements() & noexcept;
+
185  inline simdjson_result<bool> is_empty() & noexcept;
+
186  inline simdjson_result<bool> reset() & noexcept;
+
187  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at(size_t index) noexcept;
+
188  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at_pointer(std::string_view json_pointer) noexcept;
+
189 };
+
190 
+
191 } // namespace simdjson
+ + +
simdjson_inline simdjson_result< value > at(size_t index) noexcept
Get the value at the given index.
Definition: array-inl.h:154
+
value_iterator iter
Iterator marking current position.
Definition: array.h:160
+
simdjson_inline simdjson_result< bool > is_empty() &noexcept
This method scans the beginning of the array and checks whether the array is empty.
Definition: array-inl.h:107
+
simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: array-inl.h:118
+
static simdjson_inline simdjson_result< array > start(value_iterator &iter) noexcept
Begin array iteration.
Definition: array-inl.h:48
+
simdjson_inline simdjson_result< array_iterator > begin() noexcept
Begin array iteration.
Definition: array-inl.h:66
+
simdjson_inline array() noexcept=default
Create a new invalid array.
+
simdjson_inline error_code consume() noexcept
Go to the end of the array, no matter where you are right now.
Definition: array-inl.h:75
+
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
Definition: array-inl.h:94
+
static simdjson_inline simdjson_result< array > start_root(value_iterator &iter) noexcept
Begin array iteration from the root.
Definition: array-inl.h:55
+
static simdjson_inline simdjson_result< array > started(value_iterator &iter) noexcept
Begin array iteration.
Definition: array-inl.h:60
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the array and returns a string_view instance corresponding to the array as represented in JS...
Definition: array-inl.h:81
+
simdjson_inline simdjson_result< array_iterator > end() noexcept
Sentinel representing the end of the array.
Definition: array-inl.h:72
+
simdjson_result< bool > reset() &noexcept
Reset the iterator so that we are pointing back at the beginning of the array.
Definition: array-inl.h:114
+ +
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ + + +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/generic_2ondemand_2document-inl_8h_source.html b/generic_2ondemand_2document-inl_8h_source.html new file mode 100644 index 000000000..c95186870 --- /dev/null +++ b/generic_2ondemand_2document-inl_8h_source.html @@ -0,0 +1,909 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/document-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 simdjson_inline document::document(ondemand::json_iterator &&_iter) noexcept
+
6  : iter{std::forward<json_iterator>(_iter)}
+
7 {
+
8  logger::log_start_value(iter, "document");
+
9 }
+
10 
+
11 simdjson_inline document document::start(json_iterator &&iter) noexcept {
+
12  return document(std::forward<json_iterator>(iter));
+
13 }
+
14 
+
15 inline void document::rewind() noexcept {
+
16  iter.rewind();
+
17 }
+
18 
+
19 inline std::string document::to_debug_string() noexcept {
+
20  return iter.to_string();
+
21 }
+
22 
+ +
24  return iter.current_location();
+
25 }
+
26 
+
27 inline int32_t document::current_depth() const noexcept {
+
28  return iter.depth();
+
29 }
+
30 
+
31 inline bool document::is_alive() noexcept {
+
32  return iter.is_alive();
+
33 }
+
34 simdjson_inline value_iterator document::resume_value_iterator() noexcept {
+
35  return value_iterator(&iter, 1, iter.root_position());
+
36 }
+
37 simdjson_inline value_iterator document::get_root_value_iterator() noexcept {
+
38  return resume_value_iterator();
+
39 }
+
40 simdjson_inline simdjson_result<object> document::start_or_resume_object() noexcept {
+
41  if (iter.at_root()) {
+
42  return get_object();
+
43  } else {
+
44  return object::resume(resume_value_iterator());
+
45  }
+
46 }
+
47 simdjson_inline simdjson_result<value> document::get_value() noexcept {
+
48  // Make sure we start any arrays or objects before returning, so that start_root_<object/array>()
+
49  // gets called.
+
50  iter.assert_at_document_depth();
+
51  switch (*iter.peek()) {
+
52  case '[':
+
53  case '{':
+
54  return value(get_root_value_iterator());
+
55  default:
+
56  // Unfortunately, scalar documents are a special case in simdjson and they cannot
+
57  // be safely converted to value instances.
+ +
59  // return value(get_root_value_iterator());
+
60  }
+
61 }
+
62 simdjson_inline simdjson_result<array> document::get_array() & noexcept {
+
63  auto value = get_root_value_iterator();
+
64  return array::start_root(value);
+
65 }
+
66 simdjson_inline simdjson_result<object> document::get_object() & noexcept {
+
67  auto value = get_root_value_iterator();
+
68  return object::start_root(value);
+
69 }
+
70 
+
79 simdjson_inline simdjson_result<uint64_t> document::get_uint64() noexcept {
+
80  return get_root_value_iterator().get_root_uint64(true);
+
81 }
+ +
83  return get_root_value_iterator().get_root_uint64_in_string(true);
+
84 }
+
85 simdjson_inline simdjson_result<int64_t> document::get_int64() noexcept {
+
86  return get_root_value_iterator().get_root_int64(true);
+
87 }
+ +
89  return get_root_value_iterator().get_root_int64_in_string(true);
+
90 }
+
91 simdjson_inline simdjson_result<double> document::get_double() noexcept {
+
92  return get_root_value_iterator().get_root_double(true);
+
93 }
+ +
95  return get_root_value_iterator().get_root_double_in_string(true);
+
96 }
+ +
98  return get_root_value_iterator().get_root_string(true);
+
99 }
+ +
101  return get_root_value_iterator().get_root_raw_json_string(true);
+
102 }
+
103 simdjson_inline simdjson_result<bool> document::get_bool() noexcept {
+
104  return get_root_value_iterator().get_root_bool(true);
+
105 }
+
106 simdjson_inline simdjson_result<bool> document::is_null() noexcept {
+
107  return get_root_value_iterator().is_root_null(true);
+
108 }
+
109 
+
110 template<> simdjson_inline simdjson_result<array> document::get() & noexcept { return get_array(); }
+
111 template<> simdjson_inline simdjson_result<object> document::get() & noexcept { return get_object(); }
+
112 template<> simdjson_inline simdjson_result<raw_json_string> document::get() & noexcept { return get_raw_json_string(); }
+
113 template<> simdjson_inline simdjson_result<std::string_view> document::get() & noexcept { return get_string(); }
+
114 template<> simdjson_inline simdjson_result<double> document::get() & noexcept { return get_double(); }
+
115 template<> simdjson_inline simdjson_result<uint64_t> document::get() & noexcept { return get_uint64(); }
+
116 template<> simdjson_inline simdjson_result<int64_t> document::get() & noexcept { return get_int64(); }
+
117 template<> simdjson_inline simdjson_result<bool> document::get() & noexcept { return get_bool(); }
+
118 template<> simdjson_inline simdjson_result<value> document::get() & noexcept { return get_value(); }
+
119 
+
120 template<> simdjson_inline simdjson_result<raw_json_string> document::get() && noexcept { return get_raw_json_string(); }
+
121 template<> simdjson_inline simdjson_result<std::string_view> document::get() && noexcept { return get_string(); }
+
122 template<> simdjson_inline simdjson_result<double> document::get() && noexcept { return std::forward<document>(*this).get_double(); }
+
123 template<> simdjson_inline simdjson_result<uint64_t> document::get() && noexcept { return std::forward<document>(*this).get_uint64(); }
+
124 template<> simdjson_inline simdjson_result<int64_t> document::get() && noexcept { return std::forward<document>(*this).get_int64(); }
+
125 template<> simdjson_inline simdjson_result<bool> document::get() && noexcept { return std::forward<document>(*this).get_bool(); }
+
126 template<> simdjson_inline simdjson_result<value> document::get() && noexcept { return get_value(); }
+
127 
+
128 template<typename T> simdjson_inline error_code document::get(T &out) & noexcept {
+
129  return get<T>().get(out);
+
130 }
+
131 template<typename T> simdjson_inline error_code document::get(T &out) && noexcept {
+
132  return std::forward<document>(*this).get<T>().get(out);
+
133 }
+
134 
+
135 #if SIMDJSON_EXCEPTIONS
+
136 simdjson_inline document::operator array() & noexcept(false) { return get_array(); }
+
137 simdjson_inline document::operator object() & noexcept(false) { return get_object(); }
+
138 simdjson_inline document::operator uint64_t() noexcept(false) { return get_uint64(); }
+
139 simdjson_inline document::operator int64_t() noexcept(false) { return get_int64(); }
+
140 simdjson_inline document::operator double() noexcept(false) { return get_double(); }
+
141 simdjson_inline document::operator std::string_view() noexcept(false) { return get_string(); }
+
142 simdjson_inline document::operator raw_json_string() noexcept(false) { return get_raw_json_string(); }
+
143 simdjson_inline document::operator bool() noexcept(false) { return get_bool(); }
+
144 simdjson_inline document::operator value() noexcept(false) { return get_value(); }
+
145 
+
146 #endif
+
147 simdjson_inline simdjson_result<size_t> document::count_elements() & noexcept {
+
148  auto a = get_array();
+
149  simdjson_result<size_t> answer = a.count_elements();
+
150  /* If there was an array, we are now left pointing at its first element. */
+
151  if(answer.error() == SUCCESS) { rewind(); }
+
152  return answer;
+
153 }
+
154 simdjson_inline simdjson_result<size_t> document::count_fields() & noexcept {
+
155  auto a = get_object();
+
156  simdjson_result<size_t> answer = a.count_fields();
+
157  /* If there was an object, we are now left pointing at its first element. */
+
158  if(answer.error() == SUCCESS) { rewind(); }
+
159  return answer;
+
160 }
+
161 simdjson_inline simdjson_result<value> document::at(size_t index) & noexcept {
+
162  auto a = get_array();
+
163  return a.at(index);
+
164 }
+
165 simdjson_inline simdjson_result<array_iterator> document::begin() & noexcept {
+
166  return get_array().begin();
+
167 }
+
168 simdjson_inline simdjson_result<array_iterator> document::end() & noexcept {
+
169  return {};
+
170 }
+
171 
+
172 simdjson_inline simdjson_result<value> document::find_field(std::string_view key) & noexcept {
+
173  return start_or_resume_object().find_field(key);
+
174 }
+
175 simdjson_inline simdjson_result<value> document::find_field(const char *key) & noexcept {
+
176  return start_or_resume_object().find_field(key);
+
177 }
+
178 simdjson_inline simdjson_result<value> document::find_field_unordered(std::string_view key) & noexcept {
+
179  return start_or_resume_object().find_field_unordered(key);
+
180 }
+
181 simdjson_inline simdjson_result<value> document::find_field_unordered(const char *key) & noexcept {
+
182  return start_or_resume_object().find_field_unordered(key);
+
183 }
+
184 simdjson_inline simdjson_result<value> document::operator[](std::string_view key) & noexcept {
+
185  return start_or_resume_object()[key];
+
186 }
+
187 simdjson_inline simdjson_result<value> document::operator[](const char *key) & noexcept {
+
188  return start_or_resume_object()[key];
+
189 }
+
190 
+
191 simdjson_inline error_code document::consume() noexcept {
+
192  auto error = iter.skip_child(0);
+
193  if(error) { iter.abandon(); }
+
194  return error;
+
195 }
+
196 
+ +
198  auto _iter = get_root_value_iterator();
+
199  const uint8_t * starting_point{_iter.peek_start()};
+
200  auto error = consume();
+
201  if(error) { return error; }
+
202  // After 'consume()', we could be left pointing just beyond the document, but that
+
203  // is ok because we are not going to dereference the final pointer position, we just
+
204  // use it to compute the length in bytes.
+
205  const uint8_t * final_point{iter.unsafe_pointer()};
+
206  return std::string_view(reinterpret_cast<const char*>(starting_point), size_t(final_point - starting_point));
+
207 }
+
208 
+
209 simdjson_inline simdjson_result<json_type> document::type() noexcept {
+
210  return get_root_value_iterator().type();
+
211 }
+
212 
+
213 simdjson_inline simdjson_result<bool> document::is_scalar() noexcept {
+
214  json_type this_type;
+
215  auto error = type().get(this_type);
+
216  if(error) { return error; }
+
217  return ! ((this_type == json_type::array) || (this_type == json_type::object));
+
218 }
+
219 
+
220 simdjson_inline bool document::is_negative() noexcept {
+
221  return get_root_value_iterator().is_root_negative();
+
222 }
+
223 
+
224 simdjson_inline simdjson_result<bool> document::is_integer() noexcept {
+
225  return get_root_value_iterator().is_root_integer(true);
+
226 }
+
227 
+ +
229  return get_root_value_iterator().get_root_number_type(true);
+
230 }
+
231 
+
232 simdjson_inline simdjson_result<number> document::get_number() noexcept {
+
233  return get_root_value_iterator().get_root_number(true);
+
234 }
+
235 
+
236 
+ +
238  auto _iter = get_root_value_iterator();
+
239  return std::string_view(reinterpret_cast<const char*>(_iter.peek_start()), _iter.peek_start_length());
+
240 }
+
241 
+
242 simdjson_inline simdjson_result<value> document::at_pointer(std::string_view json_pointer) noexcept {
+
243  rewind(); // Rewind the document each time at_pointer is called
+
244  if (json_pointer.empty()) {
+
245  return this->get_value();
+
246  }
+
247  json_type t;
+
248  SIMDJSON_TRY(type().get(t));
+
249  switch (t)
+
250  {
+
251  case json_type::array:
+
252  return (*this).get_array().at_pointer(json_pointer);
+
253  case json_type::object:
+
254  return (*this).get_object().at_pointer(json_pointer);
+
255  default:
+
256  return INVALID_JSON_POINTER;
+
257  }
+
258 }
+
259 
+
260 } // namespace ondemand
+
261 } // namespace SIMDJSON_IMPLEMENTATION
+
262 } // namespace simdjson
+
263 
+
264 namespace simdjson {
+
265 
+
266 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::simdjson_result(
+
267  SIMDJSON_IMPLEMENTATION::ondemand::document &&value
+
268 ) noexcept :
+
269  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document>(
+
270  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(value)
+
271  )
+
272 {
+
273 }
+
274 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::simdjson_result(
+
275  error_code error
+
276 ) noexcept :
+
277  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document>(
+
278  error
+
279  )
+
280 {
+
281 }
+
282 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::count_elements() & noexcept {
+
283  if (error()) { return error(); }
+
284  return first.count_elements();
+
285 }
+
286 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::count_fields() & noexcept {
+
287  if (error()) { return error(); }
+
288  return first.count_fields();
+
289 }
+
290 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::at(size_t index) & noexcept {
+
291  if (error()) { return error(); }
+
292  return first.at(index);
+
293 }
+
294 simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::rewind() noexcept {
+
295  if (error()) { return error(); }
+
296  first.rewind();
+
297  return SUCCESS;
+
298 }
+
299 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::begin() & noexcept {
+
300  if (error()) { return error(); }
+
301  return first.begin();
+
302 }
+
303 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::end() & noexcept {
+
304  return {};
+
305 }
+
306 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field_unordered(std::string_view key) & noexcept {
+
307  if (error()) { return error(); }
+
308  return first.find_field_unordered(key);
+
309 }
+
310 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field_unordered(const char *key) & noexcept {
+
311  if (error()) { return error(); }
+
312  return first.find_field_unordered(key);
+
313 }
+
314 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator[](std::string_view key) & noexcept {
+
315  if (error()) { return error(); }
+
316  return first[key];
+
317 }
+
318 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator[](const char *key) & noexcept {
+
319  if (error()) { return error(); }
+
320  return first[key];
+
321 }
+
322 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field(std::string_view key) & noexcept {
+
323  if (error()) { return error(); }
+
324  return first.find_field(key);
+
325 }
+
326 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field(const char *key) & noexcept {
+
327  if (error()) { return error(); }
+
328  return first.find_field(key);
+
329 }
+
330 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_array() & noexcept {
+
331  if (error()) { return error(); }
+
332  return first.get_array();
+
333 }
+
334 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_object() & noexcept {
+
335  if (error()) { return error(); }
+
336  return first.get_object();
+
337 }
+
338 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_uint64() noexcept {
+
339  if (error()) { return error(); }
+
340  return first.get_uint64();
+
341 }
+
342 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_uint64_in_string() noexcept {
+
343  if (error()) { return error(); }
+
344  return first.get_uint64_in_string();
+
345 }
+
346 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_int64() noexcept {
+
347  if (error()) { return error(); }
+
348  return first.get_int64();
+
349 }
+
350 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_int64_in_string() noexcept {
+
351  if (error()) { return error(); }
+
352  return first.get_int64_in_string();
+
353 }
+
354 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_double() noexcept {
+
355  if (error()) { return error(); }
+
356  return first.get_double();
+
357 }
+
358 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_double_in_string() noexcept {
+
359  if (error()) { return error(); }
+
360  return first.get_double_in_string();
+
361 }
+
362 simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_string() noexcept {
+
363  if (error()) { return error(); }
+
364  return first.get_string();
+
365 }
+
366 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_raw_json_string() noexcept {
+
367  if (error()) { return error(); }
+
368  return first.get_raw_json_string();
+
369 }
+
370 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_bool() noexcept {
+
371  if (error()) { return error(); }
+
372  return first.get_bool();
+
373 }
+
374 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_value() noexcept {
+
375  if (error()) { return error(); }
+
376  return first.get_value();
+
377 }
+
378 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_null() noexcept {
+
379  if (error()) { return error(); }
+
380  return first.is_null();
+
381 }
+
382 
+
383 template<typename T>
+
384 simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() & noexcept {
+
385  if (error()) { return error(); }
+
386  return first.get<T>();
+
387 }
+
388 template<typename T>
+
389 simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() && noexcept {
+
390  if (error()) { return error(); }
+
391  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first).get<T>();
+
392 }
+
393 template<typename T>
+ +
395  if (error()) { return error(); }
+
396  return first.get<T>(out);
+
397 }
+
398 template<typename T>
+ +
400  if (error()) { return error(); }
+
401  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first).get<T>(out);
+
402 }
+
403 
+
404 template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() & noexcept = delete;
+
405 template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() && noexcept {
+
406  if (error()) { return error(); }
+
407  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first);
+
408 }
+
409 template<> simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>(SIMDJSON_IMPLEMENTATION::ondemand::document &out) & noexcept = delete;
+
410 template<> simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>(SIMDJSON_IMPLEMENTATION::ondemand::document &out) && noexcept {
+
411  if (error()) { return error(); }
+
412  out = std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first);
+
413  return SUCCESS;
+
414 }
+
415 
+
416 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::type() noexcept {
+
417  if (error()) { return error(); }
+
418  return first.type();
+
419 }
+
420 
+
421 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_scalar() noexcept {
+
422  if (error()) { return error(); }
+
423  return first.is_scalar();
+
424 }
+
425 
+
426 
+
427 simdjson_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_negative() noexcept {
+
428  if (error()) { return error(); }
+
429  return first.is_negative();
+
430 }
+
431 
+
432 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_integer() noexcept {
+
433  if (error()) { return error(); }
+
434  return first.is_integer();
+
435 }
+
436 
+
437 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_number_type() noexcept {
+
438  if (error()) { return error(); }
+
439  return first.get_number_type();
+
440 }
+
441 
+
442 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_number() noexcept {
+
443  if (error()) { return error(); }
+
444  return first.get_number();
+
445 }
+
446 
+
447 
+
448 #if SIMDJSON_EXCEPTIONS
+
449 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::array() & noexcept(false) {
+
450  if (error()) { throw simdjson_error(error()); }
+
451  return first;
+
452 }
+
453 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::object() & noexcept(false) {
+
454  if (error()) { throw simdjson_error(error()); }
+
455  return first;
+
456 }
+
457 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator uint64_t() noexcept(false) {
+
458  if (error()) { throw simdjson_error(error()); }
+
459  return first;
+
460 }
+
461 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator int64_t() noexcept(false) {
+
462  if (error()) { throw simdjson_error(error()); }
+
463  return first;
+
464 }
+
465 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator double() noexcept(false) {
+
466  if (error()) { throw simdjson_error(error()); }
+
467  return first;
+
468 }
+
469 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator std::string_view() noexcept(false) {
+
470  if (error()) { throw simdjson_error(error()); }
+
471  return first;
+
472 }
+
473 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) {
+
474  if (error()) { throw simdjson_error(error()); }
+
475  return first;
+
476 }
+
477 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator bool() noexcept(false) {
+
478  if (error()) { throw simdjson_error(error()); }
+
479  return first;
+
480 }
+
481 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) {
+
482  if (error()) { throw simdjson_error(error()); }
+
483  return first;
+
484 }
+
485 #endif
+
486 
+
487 
+
488 simdjson_inline simdjson_result<const char *> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::current_location() noexcept {
+
489  if (error()) { return error(); }
+
490  return first.current_location();
+
491 }
+
492 
+
493 simdjson_inline int32_t simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::current_depth() const noexcept {
+
494  if (error()) { return error(); }
+
495  return first.current_depth();
+
496 }
+
497 
+ +
499  if (error()) { return error(); }
+
500  return first.raw_json_token();
+
501 }
+
502 
+ +
504  if (error()) { return error(); }
+
505  return first.at_pointer(json_pointer);
+
506 }
+
507 
+
508 
+
509 } // namespace simdjson
+
510 
+
511 
+
512 namespace simdjson {
+
513 namespace SIMDJSON_IMPLEMENTATION {
+
514 namespace ondemand {
+
515 
+
516 simdjson_inline document_reference::document_reference() noexcept : doc{nullptr} {}
+
517 simdjson_inline document_reference::document_reference(document &d) noexcept : doc(&d) {}
+
518 simdjson_inline void document_reference::rewind() noexcept { doc->rewind(); }
+
519 simdjson_inline simdjson_result<array> document_reference::get_array() & noexcept { return doc->get_array(); }
+
520 simdjson_inline simdjson_result<object> document_reference::get_object() & noexcept { return doc->get_object(); }
+
535 simdjson_inline simdjson_result<uint64_t> document_reference::get_uint64() noexcept { return doc->get_root_value_iterator().get_root_uint64(false); }
+
536 simdjson_inline simdjson_result<uint64_t> document_reference::get_uint64_in_string() noexcept { return doc->get_root_value_iterator().get_root_uint64_in_string(false); }
+
537 simdjson_inline simdjson_result<int64_t> document_reference::get_int64() noexcept { return doc->get_root_value_iterator().get_root_int64(false); }
+
538 simdjson_inline simdjson_result<int64_t> document_reference::get_int64_in_string() noexcept { return doc->get_root_value_iterator().get_root_int64_in_string(false); }
+
539 simdjson_inline simdjson_result<double> document_reference::get_double() noexcept { return doc->get_root_value_iterator().get_root_double(false); }
+
540 simdjson_inline simdjson_result<double> document_reference::get_double_in_string() noexcept { return doc->get_root_value_iterator().get_root_double(false); }
+
541 simdjson_inline simdjson_result<std::string_view> document_reference::get_string() noexcept { return doc->get_root_value_iterator().get_root_string(false); }
+
542 simdjson_inline simdjson_result<raw_json_string> document_reference::get_raw_json_string() noexcept { return doc->get_root_value_iterator().get_root_raw_json_string(false); }
+
543 simdjson_inline simdjson_result<bool> document_reference::get_bool() noexcept { return doc->get_root_value_iterator().get_root_bool(false); }
+
544 simdjson_inline simdjson_result<value> document_reference::get_value() noexcept { return doc->get_value(); }
+
545 simdjson_inline simdjson_result<bool> document_reference::is_null() noexcept { return doc->get_root_value_iterator().is_root_null(false); }
+
546 
+
547 #if SIMDJSON_EXCEPTIONS
+
548 simdjson_inline document_reference::operator array() & noexcept(false) { return array(*doc); }
+
549 simdjson_inline document_reference::operator object() & noexcept(false) { return object(*doc); }
+
550 simdjson_inline document_reference::operator uint64_t() noexcept(false) { return get_uint64(); }
+
551 simdjson_inline document_reference::operator int64_t() noexcept(false) { return get_int64(); }
+
552 simdjson_inline document_reference::operator double() noexcept(false) { return get_double(); }
+
553 simdjson_inline document_reference::operator std::string_view() noexcept(false) { return std::string_view(*doc); }
+
554 simdjson_inline document_reference::operator raw_json_string() noexcept(false) { return raw_json_string(*doc); }
+
555 simdjson_inline document_reference::operator bool() noexcept(false) { return get_bool(); }
+
556 simdjson_inline document_reference::operator value() noexcept(false) { return value(*doc); }
+
557 #endif
+
558 simdjson_inline simdjson_result<size_t> document_reference::count_elements() & noexcept { return doc->count_elements(); }
+
559 simdjson_inline simdjson_result<size_t> document_reference::count_fields() & noexcept { return doc->count_fields(); }
+
560 simdjson_inline simdjson_result<value> document_reference::at(size_t index) & noexcept { return doc->at(index); }
+
561 simdjson_inline simdjson_result<array_iterator> document_reference::begin() & noexcept { return doc->begin(); }
+
562 simdjson_inline simdjson_result<array_iterator> document_reference::end() & noexcept { return doc->end(); }
+
563 simdjson_inline simdjson_result<value> document_reference::find_field(std::string_view key) & noexcept { return doc->find_field(key); }
+
564 simdjson_inline simdjson_result<value> document_reference::find_field(const char *key) & noexcept { return doc->find_field(key); }
+
565 simdjson_inline simdjson_result<value> document_reference::operator[](std::string_view key) & noexcept { return (*doc)[key]; }
+
566 simdjson_inline simdjson_result<value> document_reference::operator[](const char *key) & noexcept { return (*doc)[key]; }
+
567 simdjson_inline simdjson_result<value> document_reference::find_field_unordered(std::string_view key) & noexcept { return doc->find_field_unordered(key); }
+
568 simdjson_inline simdjson_result<value> document_reference::find_field_unordered(const char *key) & noexcept { return doc->find_field_unordered(key); }
+
569 simdjson_inline simdjson_result<json_type> document_reference::type() noexcept { return doc->type(); }
+
570 simdjson_inline simdjson_result<bool> document_reference::is_scalar() noexcept { return doc->is_scalar(); }
+
571 simdjson_inline simdjson_result<const char *> document_reference::current_location() noexcept { return doc->current_location(); }
+
572 simdjson_inline int32_t document_reference::current_depth() const noexcept { return doc->current_depth(); }
+
573 simdjson_inline bool document_reference::is_negative() noexcept { return doc->is_negative(); }
+
574 simdjson_inline simdjson_result<bool> document_reference::is_integer() noexcept { return doc->get_root_value_iterator().is_root_integer(false); }
+
575 simdjson_inline simdjson_result<number_type> document_reference::get_number_type() noexcept { return doc->get_root_value_iterator().get_root_number_type(false); }
+
576 simdjson_inline simdjson_result<number> document_reference::get_number() noexcept { return doc->get_root_value_iterator().get_root_number(false); }
+
577 simdjson_inline simdjson_result<std::string_view> document_reference::raw_json_token() noexcept { return doc->raw_json_token(); }
+
578 simdjson_inline simdjson_result<value> document_reference::at_pointer(std::string_view json_pointer) noexcept { return doc->at_pointer(json_pointer); }
+
579 simdjson_inline simdjson_result<std::string_view> document_reference::raw_json() noexcept { return doc->raw_json();}
+
580 simdjson_inline document_reference::operator document&() const noexcept { return *doc; }
+
581 
+
582 } // namespace ondemand
+
583 } // namespace SIMDJSON_IMPLEMENTATION
+
584 } // namespace simdjson
+
585 
+
586 
+
587 
+
588 namespace simdjson {
+
589 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::document_reference value, error_code error)
+
590  noexcept : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(value), error) {}
+
591 
+
592 
+
593 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::count_elements() & noexcept {
+
594  if (error()) { return error(); }
+
595  return first.count_elements();
+
596 }
+
597 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::count_fields() & noexcept {
+
598  if (error()) { return error(); }
+
599  return first.count_fields();
+
600 }
+
601 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::at(size_t index) & noexcept {
+
602  if (error()) { return error(); }
+
603  return first.at(index);
+
604 }
+
605 simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::rewind() noexcept {
+
606  if (error()) { return error(); }
+
607  first.rewind();
+
608  return SUCCESS;
+
609 }
+
610 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::begin() & noexcept {
+
611  if (error()) { return error(); }
+
612  return first.begin();
+
613 }
+
614 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::end() & noexcept {
+
615  return {};
+
616 }
+
617 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field_unordered(std::string_view key) & noexcept {
+
618  if (error()) { return error(); }
+
619  return first.find_field_unordered(key);
+
620 }
+
621 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field_unordered(const char *key) & noexcept {
+
622  if (error()) { return error(); }
+
623  return first.find_field_unordered(key);
+
624 }
+
625 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator[](std::string_view key) & noexcept {
+
626  if (error()) { return error(); }
+
627  return first[key];
+
628 }
+
629 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator[](const char *key) & noexcept {
+
630  if (error()) { return error(); }
+
631  return first[key];
+
632 }
+
633 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field(std::string_view key) & noexcept {
+
634  if (error()) { return error(); }
+
635  return first.find_field(key);
+
636 }
+
637 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field(const char *key) & noexcept {
+
638  if (error()) { return error(); }
+
639  return first.find_field(key);
+
640 }
+
641 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_array() & noexcept {
+
642  if (error()) { return error(); }
+
643  return first.get_array();
+
644 }
+
645 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_object() & noexcept {
+
646  if (error()) { return error(); }
+
647  return first.get_object();
+
648 }
+
649 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_uint64() noexcept {
+
650  if (error()) { return error(); }
+
651  return first.get_uint64();
+
652 }
+
653 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_uint64_in_string() noexcept {
+
654  if (error()) { return error(); }
+
655  return first.get_uint64_in_string();
+
656 }
+
657 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_int64() noexcept {
+
658  if (error()) { return error(); }
+
659  return first.get_int64();
+
660 }
+
661 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_int64_in_string() noexcept {
+
662  if (error()) { return error(); }
+
663  return first.get_int64_in_string();
+
664 }
+
665 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_double() noexcept {
+
666  if (error()) { return error(); }
+
667  return first.get_double();
+
668 }
+
669 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_double_in_string() noexcept {
+
670  if (error()) { return error(); }
+
671  return first.get_double_in_string();
+
672 }
+
673 simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_string() noexcept {
+
674  if (error()) { return error(); }
+
675  return first.get_string();
+
676 }
+
677 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_raw_json_string() noexcept {
+
678  if (error()) { return error(); }
+
679  return first.get_raw_json_string();
+
680 }
+
681 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_bool() noexcept {
+
682  if (error()) { return error(); }
+
683  return first.get_bool();
+
684 }
+
685 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_value() noexcept {
+
686  if (error()) { return error(); }
+
687  return first.get_value();
+
688 }
+
689 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_null() noexcept {
+
690  if (error()) { return error(); }
+
691  return first.is_null();
+
692 }
+
693 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::type() noexcept {
+
694  if (error()) { return error(); }
+
695  return first.type();
+
696 }
+
697 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_scalar() noexcept {
+
698  if (error()) { return error(); }
+
699  return first.is_scalar();
+
700 }
+
701 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_negative() noexcept {
+
702  if (error()) { return error(); }
+
703  return first.is_negative();
+
704 }
+
705 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_integer() noexcept {
+
706  if (error()) { return error(); }
+
707  return first.is_integer();
+
708 }
+
709 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_number_type() noexcept {
+
710  if (error()) { return error(); }
+
711  return first.get_number_type();
+
712 }
+
713 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_number() noexcept {
+
714  if (error()) { return error(); }
+
715  return first.get_number();
+
716 }
+
717 #if SIMDJSON_EXCEPTIONS
+
718 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::array() & noexcept(false) {
+
719  if (error()) { throw simdjson_error(error()); }
+
720  return first;
+
721 }
+
722 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::object() & noexcept(false) {
+
723  if (error()) { throw simdjson_error(error()); }
+
724  return first;
+
725 }
+
726 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator uint64_t() noexcept(false) {
+
727  if (error()) { throw simdjson_error(error()); }
+
728  return first;
+
729 }
+
730 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator int64_t() noexcept(false) {
+
731  if (error()) { throw simdjson_error(error()); }
+
732  return first;
+
733 }
+
734 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator double() noexcept(false) {
+
735  if (error()) { throw simdjson_error(error()); }
+
736  return first;
+
737 }
+
738 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator std::string_view() noexcept(false) {
+
739  if (error()) { throw simdjson_error(error()); }
+
740  return first;
+
741 }
+
742 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) {
+
743  if (error()) { throw simdjson_error(error()); }
+
744  return first;
+
745 }
+
746 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator bool() noexcept(false) {
+
747  if (error()) { throw simdjson_error(error()); }
+
748  return first;
+
749 }
+
750 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) {
+
751  if (error()) { throw simdjson_error(error()); }
+
752  return first;
+
753 }
+
754 #endif
+
755 
+
756 simdjson_inline simdjson_result<const char *> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::current_location() noexcept {
+
757  if (error()) { return error(); }
+
758  return first.current_location();
+
759 }
+
760 
+ +
762  if (error()) { return error(); }
+
763  return first.raw_json_token();
+
764 }
+
765 
+ +
767  if (error()) { return error(); }
+
768  return first.at_pointer(json_pointer);
+
769 }
+
770 
+
771 
+
772 } // namespace simdjson
+ +
static simdjson_inline simdjson_result< array > start_root(value_iterator &iter) noexcept
Begin array iteration from the root.
Definition: array-inl.h:55
+
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
The document_reference instances are used primarily/solely for streams of JSON documents.
Definition: document-inl.h:535
+
simdjson_inline simdjson_result< value > at(size_t index) &noexcept
Get the value at the given index in the array.
Definition: document-inl.h:161
+
simdjson_inline int32_t current_depth() const noexcept
Returns the current depth in the document if in bounds.
Definition: document-inl.h:27
+
simdjson_inline simdjson_result< array_iterator > begin() &noexcept
Begin array iteration.
Definition: document-inl.h:165
+
simdjson_inline simdjson_result< size_t > count_fields() &noexcept
This method scans the object and counts the number of key-value pairs.
Definition: document-inl.h:154
+
simdjson_warn_unused simdjson_inline simdjson_result< number > get_number() noexcept
Attempt to parse an ondemand::number.
Definition: document-inl.h:232
+
bool is_alive() noexcept
Some unrecoverable error conditions may render the document instance unusable.
Definition: document-inl.h:31
+
simdjson_inline simdjson_result< bool > get_bool() noexcept
Cast this JSON value to a bool.
Definition: document-inl.h:103
+
simdjson_inline simdjson_result< object > get_object() &noexcept
Cast this JSON value to an object.
Definition: document-inl.h:66
+
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
Cast this JSON value to an unsigned integer.
Definition: document-inl.h:79
+
simdjson_inline bool is_negative() noexcept
Checks whether the document is a negative number.
Definition: document-inl.h:220
+
simdjson_inline document() noexcept=default
Create a new invalid document.
+
simdjson_result< const char * > current_location() noexcept
Returns the current location in the document if in bounds.
Definition: document-inl.h:23
+
simdjson_inline simdjson_result< std::string_view > raw_json_token() noexcept
Get the raw JSON for this token.
Definition: document-inl.h:237
+
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string() noexcept
Cast this JSON value (inside string) to an unsigned integer.
Definition: document-inl.h:82
+
simdjson_inline simdjson_result< bool > is_null() noexcept
Checks if this JSON value is null.
Definition: document-inl.h:106
+
simdjson_inline simdjson_result< int64_t > get_int64() noexcept
Cast this JSON value to a signed integer.
Definition: document-inl.h:85
+
simdjson_inline simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: document-inl.h:242
+
simdjson_inline simdjson_result< json_type > type() noexcept
Get the type of this JSON value.
Definition: document-inl.h:209
+
simdjson_inline simdjson_result< array_iterator > end() &noexcept
Sentinel representing the end of the array.
Definition: document-inl.h:168
+
simdjson_inline simdjson_result< T > get() &noexcept
Get this value as the given type.
Definition: document.h:149
+
simdjson_inline simdjson_result< double > get_double_in_string() noexcept
Cast this JSON value (inside string) to a double.
Definition: document-inl.h:94
+
json_iterator iter
Current position in the document.
Definition: document.h:569
+
simdjson_inline simdjson_result< double > get_double() noexcept
Cast this JSON value to a double.
Definition: document-inl.h:91
+
std::string to_debug_string() noexcept
Returns debugging information.
Definition: document-inl.h:19
+
void rewind() noexcept
Reset the iterator inside the document instance so we are pointing back at the beginning of the docum...
Definition: document-inl.h:15
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the document and returns a string_view instance corresponding to the document as represented...
Definition: document-inl.h:197
+
simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) &noexcept
Look up a field by name on an object, without regard to key order.
Definition: document-inl.h:178
+
simdjson_inline simdjson_result< int64_t > get_int64_in_string() noexcept
Cast this JSON value (inside string) to a signed integer.
Definition: document-inl.h:88
+
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
Definition: document-inl.h:147
+
simdjson_inline simdjson_result< value > get_value() noexcept
Cast this JSON value to a value when the document is an object or an array.
Definition: document-inl.h:47
+
simdjson_inline simdjson_result< value > find_field(std::string_view key) &noexcept
Look up a field by name on an object (order-sensitive).
Definition: document-inl.h:172
+
simdjson_inline simdjson_result< number_type > get_number_type() noexcept
Determine the number type (integer or floating-point number) as quickly as possible.
Definition: document-inl.h:228
+
simdjson_inline error_code consume() noexcept
Consumes the document.
Definition: document-inl.h:191
+
simdjson_inline simdjson_result< bool > is_scalar() noexcept
Checks whether the document is a scalar (string, number, null, Boolean).
Definition: document-inl.h:213
+
simdjson_inline simdjson_result< std::string_view > get_string() noexcept
Cast this JSON value to a string.
Definition: document-inl.h:97
+
simdjson_inline simdjson_result< array > get_array() &noexcept
Cast this JSON value to an array.
Definition: document-inl.h:62
+
simdjson_inline simdjson_result< bool > is_integer() noexcept
Checks whether the document is an integer number.
Definition: document-inl.h:224
+
simdjson_inline simdjson_result< raw_json_string > get_raw_json_string() noexcept
Cast this JSON value to a raw_json_string.
Definition: document-inl.h:100
+
A forward-only JSON object field iterator.
Definition: object.h:10
+
A string escaped per JSON rules, terminated with quote (").
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
json_type
The type of a JSON value.
Definition: json_type.h:7
+
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SCALAR_DOCUMENT_AS_VALUE
A scalar document is treated as a value.
Definition: error.h:46
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+ +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
Definition: error-inl.h:127
+
+
+ + + + diff --git a/generic_2ondemand_2document_8h_source.html b/generic_2ondemand_2document_8h_source.html new file mode 100644 index 000000000..5c46ca5b0 --- /dev/null +++ b/generic_2ondemand_2document_8h_source.html @@ -0,0 +1,494 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/document.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
7 class parser;
+
8 class array;
+
9 class object;
+
10 class value;
+
11 class raw_json_string;
+
12 class array_iterator;
+
13 class document_stream;
+
14 
+
22 class document {
+
23 public:
+
29  simdjson_inline document() noexcept = default;
+
30  simdjson_inline document(const document &other) noexcept = delete; // pass your documents by reference, not by copy
+
31  simdjson_inline document(document &&other) noexcept = default;
+
32  simdjson_inline document &operator=(const document &other) noexcept = delete;
+
33  simdjson_inline document &operator=(document &&other) noexcept = default;
+
34 
+
41  simdjson_inline simdjson_result<array> get_array() & noexcept;
+
48  simdjson_inline simdjson_result<object> get_object() & noexcept;
+
55  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
+
62  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
+
69  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
+
76  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
+
83  simdjson_inline simdjson_result<double> get_double() noexcept;
+
84 
+
91  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
+
103  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
+
112  simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
+
119  simdjson_inline simdjson_result<bool> get_bool() noexcept;
+
126  simdjson_inline simdjson_result<value> get_value() noexcept;
+
127 
+
136  simdjson_inline simdjson_result<bool> is_null() noexcept;
+
137 
+
149  template<typename T> simdjson_inline simdjson_result<T> get() & noexcept {
+
150  // Unless the simdjson library provides an inline implementation, calling this method should
+
151  // immediately fail.
+
152  static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library.");
+
153  }
+
155  template<typename T> simdjson_inline simdjson_result<T> get() && noexcept {
+
156  // Unless the simdjson library provides an inline implementation, calling this method should
+
157  // immediately fail.
+
158  static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library.");
+
159  }
+
160 
+
172  template<typename T> simdjson_inline error_code get(T &out) & noexcept;
+
174  template<typename T> simdjson_inline error_code get(T &out) && noexcept;
+
175 
+
176 #if SIMDJSON_EXCEPTIONS
+
183  simdjson_inline operator array() & noexcept(false);
+
190  simdjson_inline operator object() & noexcept(false);
+
197  simdjson_inline operator uint64_t() noexcept(false);
+
204  simdjson_inline operator int64_t() noexcept(false);
+
211  simdjson_inline operator double() noexcept(false);
+
221  simdjson_inline operator std::string_view() noexcept(false);
+
230  simdjson_inline operator raw_json_string() noexcept(false);
+
237  simdjson_inline operator bool() noexcept(false);
+
244  simdjson_inline operator value() noexcept(false);
+
245 #endif
+
257  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
+
272  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
+
280  simdjson_inline simdjson_result<value> at(size_t index) & noexcept;
+
286  simdjson_inline simdjson_result<array_iterator> begin() & noexcept;
+
292  simdjson_inline simdjson_result<array_iterator> end() & noexcept;
+
293 
+
326  simdjson_inline simdjson_result<value> find_field(std::string_view key) & noexcept;
+
328  simdjson_inline simdjson_result<value> find_field(const char *key) & noexcept;
+
329 
+
360  simdjson_inline simdjson_result<value> find_field_unordered(std::string_view key) & noexcept;
+
362  simdjson_inline simdjson_result<value> find_field_unordered(const char *key) & noexcept;
+
364  simdjson_inline simdjson_result<value> operator[](std::string_view key) & noexcept;
+
366  simdjson_inline simdjson_result<value> operator[](const char *key) & noexcept;
+
367 
+
379  simdjson_inline simdjson_result<json_type> type() noexcept;
+
380 
+
388  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
+
389 
+
395  simdjson_inline bool is_negative() noexcept;
+
405  simdjson_inline simdjson_result<bool> is_integer() noexcept;
+
428  simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
+
429 
+
456  simdjson_warn_unused simdjson_inline simdjson_result<number> get_number() noexcept;
+
457 
+
480  simdjson_inline simdjson_result<std::string_view> raw_json_token() noexcept;
+
481 
+
487  inline void rewind() noexcept;
+
491  inline std::string to_debug_string() noexcept;
+
496  inline bool is_alive() noexcept;
+
497 
+
501  inline simdjson_result<const char *> current_location() noexcept;
+
502 
+
512  simdjson_inline int32_t current_depth() const noexcept;
+
513 
+
545  simdjson_inline simdjson_result<value> at_pointer(std::string_view json_pointer) noexcept;
+
551  simdjson_inline simdjson_result<std::string_view> raw_json() noexcept;
+
552 protected:
+
556  simdjson_inline error_code consume() noexcept;
+
557 
+
558  simdjson_inline document(ondemand::json_iterator &&iter) noexcept;
+
559  simdjson_inline const uint8_t *text(uint32_t idx) const noexcept;
+
560 
+
561  simdjson_inline value_iterator resume_value_iterator() noexcept;
+
562  simdjson_inline value_iterator get_root_value_iterator() noexcept;
+
563  simdjson_inline simdjson_result<object> start_or_resume_object() noexcept;
+
564  static simdjson_inline document start(ondemand::json_iterator &&iter) noexcept;
+
565 
+
566  //
+
567  // Fields
+
568  //
+
569  json_iterator iter{};
+
570  static constexpr depth_t DOCUMENT_DEPTH = 0;
+
571 
+
572  friend class array_iterator;
+
573  friend class value;
+
574  friend class ondemand::parser;
+
575  friend class object;
+
576  friend class array;
+
577  friend class field;
+
578  friend class token;
+
579  friend class document_stream;
+
580  friend class document_reference;
+
581 };
+
582 
+
583 
+ +
588 public:
+
589  simdjson_inline document_reference() noexcept;
+
590  simdjson_inline document_reference(document &d) noexcept;
+
591  simdjson_inline document_reference(const document_reference &other) noexcept = default;
+
592  simdjson_inline document_reference& operator=(const document_reference &other) noexcept = default;
+
593  simdjson_inline void rewind() noexcept;
+
594  simdjson_inline simdjson_result<array> get_array() & noexcept;
+
595  simdjson_inline simdjson_result<object> get_object() & noexcept;
+
596  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
+
597  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
+
598  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
+
599  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
+
600  simdjson_inline simdjson_result<double> get_double() noexcept;
+
601  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
+
602  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
+
603  simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
+
604  simdjson_inline simdjson_result<bool> get_bool() noexcept;
+
605  simdjson_inline simdjson_result<value> get_value() noexcept;
+
606 
+
607  simdjson_inline simdjson_result<bool> is_null() noexcept;
+
608  simdjson_inline simdjson_result<std::string_view> raw_json() noexcept;
+
609  simdjson_inline operator document&() const noexcept;
+
610 
+
611 #if SIMDJSON_EXCEPTIONS
+
612  simdjson_inline operator array() & noexcept(false);
+
613  simdjson_inline operator object() & noexcept(false);
+
614  simdjson_inline operator uint64_t() noexcept(false);
+
615  simdjson_inline operator int64_t() noexcept(false);
+
616  simdjson_inline operator double() noexcept(false);
+
617  simdjson_inline operator std::string_view() noexcept(false);
+
618  simdjson_inline operator raw_json_string() noexcept(false);
+
619  simdjson_inline operator bool() noexcept(false);
+
620  simdjson_inline operator value() noexcept(false);
+
621 #endif
+
622  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
+
623  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
+
624  simdjson_inline simdjson_result<value> at(size_t index) & noexcept;
+
625  simdjson_inline simdjson_result<array_iterator> begin() & noexcept;
+
626  simdjson_inline simdjson_result<array_iterator> end() & noexcept;
+
627  simdjson_inline simdjson_result<value> find_field(std::string_view key) & noexcept;
+
628  simdjson_inline simdjson_result<value> find_field(const char *key) & noexcept;
+
629  simdjson_inline simdjson_result<value> operator[](std::string_view key) & noexcept;
+
630  simdjson_inline simdjson_result<value> operator[](const char *key) & noexcept;
+
631  simdjson_inline simdjson_result<value> find_field_unordered(std::string_view key) & noexcept;
+
632  simdjson_inline simdjson_result<value> find_field_unordered(const char *key) & noexcept;
+
633 
+
634  simdjson_inline simdjson_result<json_type> type() noexcept;
+
635  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
+
636 
+
637  simdjson_inline simdjson_result<const char *> current_location() noexcept;
+
638  simdjson_inline int32_t current_depth() const noexcept;
+
639  simdjson_inline bool is_negative() noexcept;
+
640  simdjson_inline simdjson_result<bool> is_integer() noexcept;
+
641  simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
+
642  simdjson_inline simdjson_result<number> get_number() noexcept;
+
643  simdjson_inline simdjson_result<std::string_view> raw_json_token() noexcept;
+
644  simdjson_inline simdjson_result<value> at_pointer(std::string_view json_pointer) noexcept;
+
645 private:
+
646  document *doc{nullptr};
+
647 };
+
648 } // namespace ondemand
+
649 } // namespace SIMDJSON_IMPLEMENTATION
+
650 } // namespace simdjson
+
651 
+
652 namespace simdjson {
+
653 
+
654 template<>
+
655 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document> {
+
656 public:
+ +
658  simdjson_inline simdjson_result(error_code error) noexcept;
+
659  simdjson_inline simdjson_result() noexcept = default;
+
660  simdjson_inline error_code rewind() noexcept;
+
661 
+
662  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> get_array() & noexcept;
+
663  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> get_object() & noexcept;
+
664  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
+
665  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
+
666  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
+
667  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
+
668  simdjson_inline simdjson_result<double> get_double() noexcept;
+
669  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
+
670  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
+
671  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> get_raw_json_string() noexcept;
+
672  simdjson_inline simdjson_result<bool> get_bool() noexcept;
+
673  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> get_value() noexcept;
+
674  simdjson_inline simdjson_result<bool> is_null() noexcept;
+
675 
+
676  template<typename T> simdjson_inline simdjson_result<T> get() & noexcept;
+
677  template<typename T> simdjson_inline simdjson_result<T> get() && noexcept;
+
678 
+
679  template<typename T> simdjson_inline error_code get(T &out) & noexcept;
+
680  template<typename T> simdjson_inline error_code get(T &out) && noexcept;
+
681 
+
682 #if SIMDJSON_EXCEPTIONS
+
683  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array() & noexcept(false);
+
684  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object() & noexcept(false);
+
685  simdjson_inline operator uint64_t() noexcept(false);
+
686  simdjson_inline operator int64_t() noexcept(false);
+
687  simdjson_inline operator double() noexcept(false);
+
688  simdjson_inline operator std::string_view() noexcept(false);
+
689  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false);
+
690  simdjson_inline operator bool() noexcept(false);
+
691  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false);
+
692 #endif
+
693  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
+
694  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
+
695  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at(size_t index) & noexcept;
+ + +
698  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(std::string_view key) & noexcept;
+
699  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(const char *key) & noexcept;
+
700  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](std::string_view key) & noexcept;
+
701  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](const char *key) & noexcept;
+
702  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(std::string_view key) & noexcept;
+
703  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(const char *key) & noexcept;
+ +
705  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
+
706  simdjson_inline simdjson_result<const char *> current_location() noexcept;
+
707  simdjson_inline int32_t current_depth() const noexcept;
+
708  simdjson_inline bool is_negative() noexcept;
+
709  simdjson_inline simdjson_result<bool> is_integer() noexcept;
+
710  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> get_number_type() noexcept;
+
711  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> get_number() noexcept;
+
713  simdjson_inline simdjson_result<std::string_view> raw_json_token() noexcept;
+
714 
+
715  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at_pointer(std::string_view json_pointer) noexcept;
+
716 };
+
717 
+
718 
+
719 } // namespace simdjson
+
720 
+
721 
+
722 
+
723 namespace simdjson {
+
724 
+
725 template<>
+
726 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_reference> {
+
727 public:
+ +
729  simdjson_inline simdjson_result() noexcept = default;
+
730  simdjson_inline error_code rewind() noexcept;
+
731 
+
732  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> get_array() & noexcept;
+
733  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> get_object() & noexcept;
+
734  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
+
735  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
+
736  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
+
737  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
+
738  simdjson_inline simdjson_result<double> get_double() noexcept;
+
739  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
+
740  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
+
741  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> get_raw_json_string() noexcept;
+
742  simdjson_inline simdjson_result<bool> get_bool() noexcept;
+
743  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> get_value() noexcept;
+
744  simdjson_inline simdjson_result<bool> is_null() noexcept;
+
745 
+
746 #if SIMDJSON_EXCEPTIONS
+
747  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array() & noexcept(false);
+
748  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object() & noexcept(false);
+
749  simdjson_inline operator uint64_t() noexcept(false);
+
750  simdjson_inline operator int64_t() noexcept(false);
+
751  simdjson_inline operator double() noexcept(false);
+
752  simdjson_inline operator std::string_view() noexcept(false);
+
753  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false);
+
754  simdjson_inline operator bool() noexcept(false);
+
755  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false);
+
756 #endif
+
757  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
+
758  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
+
759  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at(size_t index) & noexcept;
+ + +
762  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(std::string_view key) & noexcept;
+
763  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(const char *key) & noexcept;
+
764  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](std::string_view key) & noexcept;
+
765  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](const char *key) & noexcept;
+
766  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(std::string_view key) & noexcept;
+
767  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(const char *key) & noexcept;
+ +
769  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
+
770  simdjson_inline simdjson_result<const char *> current_location() noexcept;
+
771  simdjson_inline simdjson_result<int32_t> current_depth() const noexcept;
+
772  simdjson_inline simdjson_result<bool> is_negative() noexcept;
+
773  simdjson_inline simdjson_result<bool> is_integer() noexcept;
+
774  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> get_number_type() noexcept;
+
775  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> get_number() noexcept;
+
777  simdjson_inline simdjson_result<std::string_view> raw_json_token() noexcept;
+
778 
+
779  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at_pointer(std::string_view json_pointer) noexcept;
+
780 };
+
781 
+
782 
+
783 } // namespace simdjson
+ + +
A document_reference is a thin wrapper around a document reference instance.
Definition: document.h:587
+
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
The document_reference instances are used primarily/solely for streams of JSON documents.
Definition: document-inl.h:535
+ + +
simdjson_inline simdjson_result< value > at(size_t index) &noexcept
Get the value at the given index in the array.
Definition: document-inl.h:161
+
static constexpr depth_t DOCUMENT_DEPTH
document depth is always 0
Definition: document.h:570
+
simdjson_inline int32_t current_depth() const noexcept
Returns the current depth in the document if in bounds.
Definition: document-inl.h:27
+
simdjson_inline simdjson_result< array_iterator > begin() &noexcept
Begin array iteration.
Definition: document-inl.h:165
+
simdjson_inline simdjson_result< size_t > count_fields() &noexcept
This method scans the object and counts the number of key-value pairs.
Definition: document-inl.h:154
+
simdjson_warn_unused simdjson_inline simdjson_result< number > get_number() noexcept
Attempt to parse an ondemand::number.
Definition: document-inl.h:232
+
bool is_alive() noexcept
Some unrecoverable error conditions may render the document instance unusable.
Definition: document-inl.h:31
+
simdjson_inline simdjson_result< bool > get_bool() noexcept
Cast this JSON value to a bool.
Definition: document-inl.h:103
+
simdjson_inline simdjson_result< object > get_object() &noexcept
Cast this JSON value to an object.
Definition: document-inl.h:66
+
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
Cast this JSON value to an unsigned integer.
Definition: document-inl.h:79
+
simdjson_inline bool is_negative() noexcept
Checks whether the document is a negative number.
Definition: document-inl.h:220
+
simdjson_inline document() noexcept=default
Create a new invalid document.
+
simdjson_result< const char * > current_location() noexcept
Returns the current location in the document if in bounds.
Definition: document-inl.h:23
+
simdjson_inline simdjson_result< std::string_view > raw_json_token() noexcept
Get the raw JSON for this token.
Definition: document-inl.h:237
+
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string() noexcept
Cast this JSON value (inside string) to an unsigned integer.
Definition: document-inl.h:82
+
simdjson_inline simdjson_result< bool > is_null() noexcept
Checks if this JSON value is null.
Definition: document-inl.h:106
+
simdjson_inline simdjson_result< int64_t > get_int64() noexcept
Cast this JSON value to a signed integer.
Definition: document-inl.h:85
+
simdjson_inline simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: document-inl.h:242
+
simdjson_inline simdjson_result< json_type > type() noexcept
Get the type of this JSON value.
Definition: document-inl.h:209
+
simdjson_inline simdjson_result< array_iterator > end() &noexcept
Sentinel representing the end of the array.
Definition: document-inl.h:168
+
simdjson_inline simdjson_result< T > get() &noexcept
Get this value as the given type.
Definition: document.h:149
+
simdjson_inline simdjson_result< double > get_double_in_string() noexcept
Cast this JSON value (inside string) to a double.
Definition: document-inl.h:94
+
json_iterator iter
Current position in the document.
Definition: document.h:569
+
simdjson_inline simdjson_result< double > get_double() noexcept
Cast this JSON value to a double.
Definition: document-inl.h:91
+
std::string to_debug_string() noexcept
Returns debugging information.
Definition: document-inl.h:19
+
void rewind() noexcept
Reset the iterator inside the document instance so we are pointing back at the beginning of the docum...
Definition: document-inl.h:15
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the document and returns a string_view instance corresponding to the document as represented...
Definition: document-inl.h:197
+
simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) &noexcept
Look up a field by name on an object, without regard to key order.
Definition: document-inl.h:178
+
simdjson_inline simdjson_result< int64_t > get_int64_in_string() noexcept
Cast this JSON value (inside string) to a signed integer.
Definition: document-inl.h:88
+
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
Definition: document-inl.h:147
+
simdjson_inline simdjson_result< value > get_value() noexcept
Cast this JSON value to a value when the document is an object or an array.
Definition: document-inl.h:47
+
simdjson_inline simdjson_result< value > find_field(std::string_view key) &noexcept
Look up a field by name on an object (order-sensitive).
Definition: document-inl.h:172
+
simdjson_inline simdjson_result< number_type > get_number_type() noexcept
Determine the number type (integer or floating-point number) as quickly as possible.
Definition: document-inl.h:228
+
simdjson_inline error_code consume() noexcept
Consumes the document.
Definition: document-inl.h:191
+
simdjson_inline simdjson_result< bool > is_scalar() noexcept
Checks whether the document is a scalar (string, number, null, Boolean).
Definition: document-inl.h:213
+
simdjson_inline simdjson_result< std::string_view > get_string() noexcept
Cast this JSON value to a string.
Definition: document-inl.h:97
+
simdjson_inline simdjson_result< array > get_array() &noexcept
Cast this JSON value to an array.
Definition: document-inl.h:62
+
simdjson_inline error_code get(T &out) &noexcept
Get this value as the given type.
+
simdjson_inline simdjson_result< bool > is_integer() noexcept
Checks whether the document is an integer number.
Definition: document-inl.h:224
+
simdjson_inline simdjson_result< raw_json_string > get_raw_json_string() noexcept
Cast this JSON value to a raw_json_string.
Definition: document-inl.h:100
+
A JSON field (key/value pair) in an object.
Definition: field.h:14
+
A forward-only JSON object field iterator.
Definition: object.h:10
+
A string escaped per JSON rules, terminated with quote (").
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+ +
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ +
A type representing a JSON number.
Definition: json_type.h:24
+ + + + + + +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
Definition: error-inl.h:127
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/generic_2ondemand_2document__stream-inl_8h_source.html b/generic_2ondemand_2document__stream-inl_8h_source.html new file mode 100644 index 000000000..ab267a592 --- /dev/null +++ b/generic_2ondemand_2document__stream-inl_8h_source.html @@ -0,0 +1,493 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/document_stream-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document_stream-inl.h
+
+
+
1 #include <algorithm>
+
2 #include <limits>
+
3 #include <stdexcept>
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace ondemand {
+
7 
+
8 #ifdef SIMDJSON_THREADS_ENABLED
+
9 
+
10 inline void stage1_worker::finish() {
+
11  // After calling "run" someone would call finish() to wait
+
12  // for the end of the processing.
+
13  // This function will wait until either the thread has done
+
14  // the processing or, else, the destructor has been called.
+
15  std::unique_lock<std::mutex> lock(locking_mutex);
+
16  cond_var.wait(lock, [this]{return has_work == false;});
+
17 }
+
18 
+
19 inline stage1_worker::~stage1_worker() {
+
20  // The thread may never outlive the stage1_worker instance
+
21  // and will always be stopped/joined before the stage1_worker
+
22  // instance is gone.
+
23  stop_thread();
+
24 }
+
25 
+
26 inline void stage1_worker::start_thread() {
+
27  std::unique_lock<std::mutex> lock(locking_mutex);
+
28  if(thread.joinable()) {
+
29  return; // This should never happen but we never want to create more than one thread.
+
30  }
+
31  thread = std::thread([this]{
+
32  while(true) {
+
33  std::unique_lock<std::mutex> thread_lock(locking_mutex);
+
34  // We wait for either "run" or "stop_thread" to be called.
+
35  cond_var.wait(thread_lock, [this]{return has_work || !can_work;});
+
36  // If, for some reason, the stop_thread() method was called (i.e., the
+
37  // destructor of stage1_worker is called, then we want to immediately destroy
+
38  // the thread (and not do any more processing).
+
39  if(!can_work) {
+
40  break;
+
41  }
+
42  this->owner->stage1_thread_error = this->owner->run_stage1(*this->stage1_thread_parser,
+
43  this->_next_batch_start);
+
44  this->has_work = false;
+
45  // The condition variable call should be moved after thread_lock.unlock() for performance
+
46  // reasons but thread sanitizers may report it as a data race if we do.
+
47  // See https://stackoverflow.com/questions/35775501/c-should-condition-variable-be-notified-under-lock
+
48  cond_var.notify_one(); // will notify "finish"
+
49  thread_lock.unlock();
+
50  }
+
51  }
+
52  );
+
53 }
+
54 
+
55 
+
56 inline void stage1_worker::stop_thread() {
+
57  std::unique_lock<std::mutex> lock(locking_mutex);
+
58  // We have to make sure that all locks can be released.
+
59  can_work = false;
+
60  has_work = false;
+
61  cond_var.notify_all();
+
62  lock.unlock();
+
63  if(thread.joinable()) {
+
64  thread.join();
+
65  }
+
66 }
+
67 
+
68 inline void stage1_worker::run(document_stream * ds, parser * stage1, size_t next_batch_start) {
+
69  std::unique_lock<std::mutex> lock(locking_mutex);
+
70  owner = ds;
+
71  _next_batch_start = next_batch_start;
+
72  stage1_thread_parser = stage1;
+
73  has_work = true;
+
74  // The condition variable call should be moved after thread_lock.unlock() for performance
+
75  // reasons but thread sanitizers may report it as a data race if we do.
+
76  // See https://stackoverflow.com/questions/35775501/c-should-condition-variable-be-notified-under-lock
+
77  cond_var.notify_one(); // will notify the thread lock that we have work
+
78  lock.unlock();
+
79 }
+
80 
+
81 #endif // SIMDJSON_THREADS_ENABLED
+
82 
+
83 simdjson_inline document_stream::document_stream(
+
84  ondemand::parser &_parser,
+
85  const uint8_t *_buf,
+
86  size_t _len,
+
87  size_t _batch_size
+
88 ) noexcept
+
89  : parser{&_parser},
+
90  buf{_buf},
+
91  len{_len},
+
92  batch_size{_batch_size <= MINIMAL_BATCH_SIZE ? MINIMAL_BATCH_SIZE : _batch_size},
+
93  error{SUCCESS}
+
94  #ifdef SIMDJSON_THREADS_ENABLED
+
95  , use_thread(_parser.threaded) // we need to make a copy because _parser.threaded can change
+
96  #endif
+
97 {
+
98 #ifdef SIMDJSON_THREADS_ENABLED
+
99  if(worker.get() == nullptr) {
+
100  error = MEMALLOC;
+
101  }
+
102 #endif
+
103 }
+
104 
+
105 simdjson_inline document_stream::document_stream() noexcept
+
106  : parser{nullptr},
+
107  buf{nullptr},
+
108  len{0},
+
109  batch_size{0},
+
110  error{UNINITIALIZED}
+
111  #ifdef SIMDJSON_THREADS_ENABLED
+
112  , use_thread(false)
+
113  #endif
+
114 {
+
115 }
+
116 
+
117 simdjson_inline document_stream::~document_stream() noexcept
+
118 {
+
119  #ifdef SIMDJSON_THREADS_ENABLED
+
120  worker.reset();
+
121  #endif
+
122 }
+
123 
+
124 inline size_t document_stream::size_in_bytes() const noexcept {
+
125  return len;
+
126 }
+
127 
+
128 inline size_t document_stream::truncated_bytes() const noexcept {
+
129  if(error == CAPACITY) { return len - batch_start; }
+
130  return parser->implementation->structural_indexes[parser->implementation->n_structural_indexes] - parser->implementation->structural_indexes[parser->implementation->n_structural_indexes + 1];
+
131 }
+
132 
+
133 simdjson_inline document_stream::iterator::iterator() noexcept
+
134  : stream{nullptr}, finished{true} {
+
135 }
+
136 
+
137 simdjson_inline document_stream::iterator::iterator(document_stream* _stream, bool is_end) noexcept
+
138  : stream{_stream}, finished{is_end} {
+
139 }
+
140 
+ +
142  //if(stream->error) { return stream->error; }
+
143  return simdjson_result<ondemand::document_reference>(stream->doc, stream->error);
+
144 }
+
145 
+ +
147  // If there is an error, then we want the iterator
+
148  // to be finished, no matter what. (E.g., we do not
+
149  // keep generating documents with errors, or go beyond
+
150  // a document with errors.)
+
151  //
+
152  // Users do not have to call "operator*()" when they use operator++,
+
153  // so we need to end the stream in the operator++ function.
+
154  //
+
155  // Note that setting finished = true is essential otherwise
+
156  // we would enter an infinite loop.
+
157  if (stream->error) { finished = true; }
+
158  // Note that stream->error() is guarded against error conditions
+
159  // (it will immediately return if stream->error casts to false).
+
160  // In effect, this next function does nothing when (stream->error)
+
161  // is true (hence the risk of an infinite loop).
+
162  stream->next();
+
163  // If that was the last document, we're finished.
+
164  // It is the only type of error we do not want to appear
+
165  // in operator*.
+
166  if (stream->error == EMPTY) { finished = true; }
+
167  // If we had any other kind of error (not EMPTY) then we want
+
168  // to pass it along to the operator* and we cannot mark the result
+
169  // as "finished" just yet.
+
170  return *this;
+
171 }
+
172 
+
173 simdjson_inline bool document_stream::iterator::operator!=(const document_stream::iterator &other) const noexcept {
+
174  return finished != other.finished;
+
175 }
+
176 
+ +
178  start();
+
179  // If there are no documents, we're finished.
+
180  return iterator(this, error == EMPTY);
+
181 }
+
182 
+ +
184  return iterator(this, true);
+
185 }
+
186 
+
187 inline void document_stream::start() noexcept {
+
188  if (error) { return; }
+
189  error = parser->allocate(batch_size);
+
190  if (error) { return; }
+
191  // Always run the first stage 1 parse immediately
+
192  batch_start = 0;
+
193  error = run_stage1(*parser, batch_start);
+
194  while(error == EMPTY) {
+
195  // In exceptional cases, we may start with an empty block
+
196  batch_start = next_batch_start();
+
197  if (batch_start >= len) { return; }
+
198  error = run_stage1(*parser, batch_start);
+
199  }
+
200  if (error) { return; }
+
201  doc_index = batch_start;
+
202  doc = document(json_iterator(&buf[batch_start], parser));
+
203  doc.iter._streaming = true;
+
204 
+
205  #ifdef SIMDJSON_THREADS_ENABLED
+
206  if (use_thread && next_batch_start() < len) {
+
207  // Kick off the first thread on next batch if needed
+
208  error = stage1_thread_parser.allocate(batch_size);
+
209  if (error) { return; }
+
210  worker->start_thread();
+
211  start_stage1_thread();
+
212  if (error) { return; }
+
213  }
+
214  #endif // SIMDJSON_THREADS_ENABLED
+
215 }
+
216 
+
217 inline void document_stream::next() noexcept {
+
218  // We always enter at once once in an error condition.
+
219  if (error) { return; }
+
220  next_document();
+
221  if (error) { return; }
+
222  auto cur_struct_index = doc.iter._root - parser->implementation->structural_indexes.get();
+
223  doc_index = batch_start + parser->implementation->structural_indexes[cur_struct_index];
+
224 
+
225  // Check if at end of structural indexes (i.e. at end of batch)
+
226  if(cur_struct_index >= static_cast<int64_t>(parser->implementation->n_structural_indexes)) {
+
227  error = EMPTY;
+
228  // Load another batch (if available)
+
229  while (error == EMPTY) {
+
230  batch_start = next_batch_start();
+
231  if (batch_start >= len) { break; }
+
232  #ifdef SIMDJSON_THREADS_ENABLED
+
233  if(use_thread) {
+
234  load_from_stage1_thread();
+
235  } else {
+
236  error = run_stage1(*parser, batch_start);
+
237  }
+
238  #else
+
239  error = run_stage1(*parser, batch_start);
+
240  #endif
+
275  doc.iter = json_iterator(&buf[batch_start], parser);
+
276  doc.iter._streaming = true;
+
281  if (error) { continue; } // If the error was EMPTY, we may want to load another batch.
+
282  doc_index = batch_start;
+
283  }
+
284  }
+
285 }
+
286 
+
287 inline void document_stream::next_document() noexcept {
+
288  // Go to next place where depth=0 (document depth)
+
289  error = doc.iter.skip_child(0);
+
290  if (error) { return; }
+
291  // Always set depth=1 at the start of document
+
292  doc.iter._depth = 1;
+
293  // Resets the string buffer at the beginning, thus invalidating the strings.
+
294  doc.iter._string_buf_loc = parser->string_buf.get();
+
295  doc.iter._root = doc.iter.position();
+
296 }
+
297 
+
298 inline size_t document_stream::next_batch_start() const noexcept {
+
299  return batch_start + parser->implementation->structural_indexes[parser->implementation->n_structural_indexes];
+
300 }
+
301 
+
302 inline error_code document_stream::run_stage1(ondemand::parser &p, size_t _batch_start) noexcept {
+
303  // This code only updates the structural index in the parser, it does not update any json_iterator
+
304  // instance.
+
305  size_t remaining = len - _batch_start;
+
306  if (remaining <= batch_size) {
+
307  return p.implementation->stage1(&buf[_batch_start], remaining, stage1_mode::streaming_final);
+
308  } else {
+
309  return p.implementation->stage1(&buf[_batch_start], batch_size, stage1_mode::streaming_partial);
+
310  }
+
311 }
+
312 
+
313 simdjson_inline size_t document_stream::iterator::current_index() const noexcept {
+
314  return stream->doc_index;
+
315 }
+
316 
+
317 simdjson_inline std::string_view document_stream::iterator::source() const noexcept {
+
318  auto depth = stream->doc.iter.depth();
+
319  auto cur_struct_index = stream->doc.iter._root - stream->parser->implementation->structural_indexes.get();
+
320 
+
321  // If at root, process the first token to determine if scalar value
+
322  if (stream->doc.iter.at_root()) {
+
323  switch (stream->buf[stream->batch_start + stream->parser->implementation->structural_indexes[cur_struct_index]]) {
+
324  case '{': case '[': // Depth=1 already at start of document
+
325  break;
+
326  case '}': case ']':
+
327  depth--;
+
328  break;
+
329  default: // Scalar value document
+
330  // TODO: Remove any trailing whitespaces
+
331  // This returns a string spanning from start of value to the beginning of the next document (excluded)
+
332  return std::string_view(reinterpret_cast<const char*>(stream->buf) + current_index(), stream->parser->implementation->structural_indexes[++cur_struct_index] - current_index() - 1);
+
333  }
+
334  cur_struct_index++;
+
335  }
+
336 
+
337  while (cur_struct_index <= static_cast<int64_t>(stream->parser->implementation->n_structural_indexes)) {
+
338  switch (stream->buf[stream->batch_start + stream->parser->implementation->structural_indexes[cur_struct_index]]) {
+
339  case '{': case '[':
+
340  depth++;
+
341  break;
+
342  case '}': case ']':
+
343  depth--;
+
344  break;
+
345  }
+
346  if (depth == 0) { break; }
+
347  cur_struct_index++;
+
348  }
+
349 
+
350  return std::string_view(reinterpret_cast<const char*>(stream->buf) + current_index(), stream->parser->implementation->structural_indexes[cur_struct_index] - current_index() + stream->batch_start + 1);;
+
351 }
+
352 
+ +
354  return stream->error;
+
355 }
+
356 
+
357 #ifdef SIMDJSON_THREADS_ENABLED
+
358 
+
359 inline void document_stream::load_from_stage1_thread() noexcept {
+
360  worker->finish();
+
361  // Swap to the parser that was loaded up in the thread. Make sure the parser has
+
362  // enough memory to swap to, as well.
+
363  std::swap(stage1_thread_parser,*parser);
+
364  error = stage1_thread_error;
+
365  if (error) { return; }
+
366 
+
367  // If there's anything left, start the stage 1 thread!
+
368  if (next_batch_start() < len) {
+
369  start_stage1_thread();
+
370  }
+
371 }
+
372 
+
373 inline void document_stream::start_stage1_thread() noexcept {
+
374  // we call the thread on a lambda that will update
+
375  // this->stage1_thread_error
+
376  // there is only one thread that may write to this value
+
377  // TODO this is NOT exception-safe.
+
378  this->stage1_thread_error = UNINITIALIZED; // In case something goes wrong, make sure it's an error
+
379  size_t _next_batch_start = this->next_batch_start();
+
380 
+
381  worker->run(this, & this->stage1_thread_parser, _next_batch_start);
+
382 }
+
383 
+
384 #endif // SIMDJSON_THREADS_ENABLED
+
385 
+
386 } // namespace ondemand
+
387 } // namespace SIMDJSON_IMPLEMENTATION
+
388 } // namespace simdjson
+
389 
+
390 namespace simdjson {
+
391 
+
392 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_stream>::simdjson_result(
+
393  error_code error
+
394 ) noexcept :
+
395  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_stream>(error)
+
396 {
+
397 }
+
398 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_stream>::simdjson_result(
+
399  SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value
+
400 ) noexcept :
+
401  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_stream>(
+
402  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document_stream>(value)
+
403  )
+
404 {
+
405 }
+
406 
+
407 }
+ +
iterator & operator++() noexcept
Advance to the next document (prefix).
+
simdjson_inline bool operator!=(const iterator &other) const noexcept
Check if we're at the end yet.
+ +
error_code error() const noexcept
Returns error of the stream (if any).
+
simdjson_inline simdjson_result< ondemand::document_reference > operator*() noexcept
Get the current document (or error).
+
simdjson_inline iterator end() noexcept
The end of the stream, for iterator comparison purposes.
+
size_t size_in_bytes() const noexcept
Returns the input size in bytes.
+
size_t truncated_bytes() const noexcept
After iterating through the stream, this method returns the number of bytes that were not parsed at t...
+
simdjson_inline iterator begin() noexcept
Start iterating the documents in the stream.
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+
json_iterator iter
Current position in the document.
Definition: document.h:569
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ EMPTY
no structural element found
Definition: error.h:30
+
@ MEMALLOC
Error allocating memory, most likely out of memory.
Definition: error.h:20
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/generic_2ondemand_2document__stream_8h_source.html b/generic_2ondemand_2document__stream_8h_source.html new file mode 100644 index 000000000..44bd4c4f8 --- /dev/null +++ b/generic_2ondemand_2document__stream_8h_source.html @@ -0,0 +1,276 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/document_stream.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
document_stream.h
+
+
+
1 #include "simdjson/error.h"
+
2 #ifdef SIMDJSON_THREADS_ENABLED
+
3 #include <thread>
+
4 #include <mutex>
+
5 #include <condition_variable>
+
6 #endif
+
7 
+
8 namespace simdjson {
+
9 namespace SIMDJSON_IMPLEMENTATION {
+
10 namespace ondemand {
+
11 
+
12 class parser;
+
13 class json_iterator;
+
14 class document;
+
15 
+
16 #ifdef SIMDJSON_THREADS_ENABLED
+
18 struct stage1_worker {
+
19  stage1_worker() noexcept = default;
+
20  stage1_worker(const stage1_worker&) = delete;
+
21  stage1_worker(stage1_worker&&) = delete;
+
22  stage1_worker operator=(const stage1_worker&) = delete;
+
23  ~stage1_worker();
+
28  void start_thread();
+
33  void run(document_stream * ds, parser * stage1, size_t next_batch_start);
+
35  void finish();
+
36 
+
37 private:
+
38 
+
44  void stop_thread();
+
45 
+
46  std::thread thread{};
+
48  ondemand::parser * stage1_thread_parser{};
+
49  size_t _next_batch_start{};
+
50  document_stream * owner{};
+
55  bool has_work{false};
+
56  bool can_work{true};
+
57 
+
61  std::mutex locking_mutex{};
+
62  std::condition_variable cond_var{};
+
63 
+
64  friend class document_stream;
+
65 };
+
66 #endif // SIMDJSON_THREADS_ENABLED
+
67 
+ +
75 public:
+
84  simdjson_inline document_stream() noexcept;
+
86  simdjson_inline document_stream(document_stream &&other) noexcept = default;
+
88  simdjson_inline document_stream &operator=(document_stream &&other) noexcept = default;
+
89 
+
90  simdjson_inline ~document_stream() noexcept;
+
91 
+
95  inline size_t size_in_bytes() const noexcept;
+
96 
+
115  inline size_t truncated_bytes() const noexcept;
+
116 
+
117  class iterator {
+
118  public:
+ +
120  using reference = value_type;
+
121 
+
122  using difference_type = std::ptrdiff_t;
+
123 
+
124  using iterator_category = std::input_iterator_tag;
+
125 
+
129  simdjson_inline iterator() noexcept;
+
133  simdjson_inline simdjson_result<ondemand::document_reference> operator*() noexcept;
+
137  inline iterator& operator++() noexcept;
+
142  simdjson_inline bool operator!=(const iterator &other) const noexcept;
+
158  simdjson_inline size_t current_index() const noexcept;
+
159 
+
179  simdjson_inline std::string_view source() const noexcept;
+
180 
+
184  inline error_code error() const noexcept;
+
185 
+
186  private:
+
187  simdjson_inline iterator(document_stream *s, bool finished) noexcept;
+
189  document_stream* stream;
+
191  bool finished;
+
192 
+
193  friend class document;
+
194  friend class document_stream;
+
195  friend class json_iterator;
+
196  };
+
197 
+
201  simdjson_inline iterator begin() noexcept;
+
205  simdjson_inline iterator end() noexcept;
+
206 
+
207 private:
+
208 
+
209  document_stream &operator=(const document_stream &) = delete; // Disallow copying
+
210  document_stream(const document_stream &other) = delete; // Disallow copying
+
211 
+
221  simdjson_inline document_stream(
+
222  ondemand::parser &parser,
+
223  const uint8_t *buf,
+
224  size_t len,
+
225  size_t batch_size
+
226  ) noexcept;
+
227 
+
232  inline void start() noexcept;
+
233 
+
258  inline void next() noexcept;
+
259 
+
261  inline void next_document() noexcept;
+
262 
+
264  inline size_t next_batch_start() const noexcept;
+
265 
+
267  inline error_code run_stage1(ondemand::parser &p, size_t batch_start) noexcept;
+
268 
+
269  // Fields
+
270  ondemand::parser *parser;
+
271  const uint8_t *buf;
+
272  size_t len;
+
273  size_t batch_size;
+
279  document doc{};
+
281  error_code error;
+
282  size_t batch_start{0};
+
283  size_t doc_index{};
+
284 
+
285  #ifdef SIMDJSON_THREADS_ENABLED
+
287  bool use_thread;
+
288 
+
289  inline void load_from_stage1_thread() noexcept;
+
290 
+
292  inline void start_stage1_thread() noexcept;
+
293 
+
295  inline void finish_stage1_thread() noexcept;
+
296 
+
298  error_code stage1_thread_error{UNINITIALIZED};
+
300  std::unique_ptr<stage1_worker> worker{new(std::nothrow) stage1_worker()};
+
305  ondemand::parser stage1_thread_parser{};
+
306 
+
307  friend struct stage1_worker;
+
308  #endif // SIMDJSON_THREADS_ENABLED
+
309 
+
310  friend class parser;
+
311  friend class document;
+
312  friend class json_iterator;
+
313  friend struct simdjson_result<ondemand::document_stream>;
+
314  friend struct internal::simdjson_result_base<ondemand::document_stream>;
+
315 }; // document_stream
+
316 
+
317 } // namespace ondemand
+
318 } // namespace SIMDJSON_IMPLEMENTATION
+
319 } // namespace simdjson
+
320 
+
321 namespace simdjson {
+
322 template<>
+
323 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_stream> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_stream> {
+
324 public:
+
325  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value) noexcept;
+
326  simdjson_inline simdjson_result(error_code error) noexcept;
+
327  simdjson_inline simdjson_result() noexcept = default;
+
328 };
+
329 
+
330 } // namespace simdjson
+ + +
simdjson_inline iterator end() noexcept
The end of the stream, for iterator comparison purposes.
+
simdjson_inline document_stream(document_stream &&other) noexcept=default
Move one document_stream to another.
+
size_t size_in_bytes() const noexcept
Returns the input size in bytes.
+
simdjson_inline document_stream & operator=(document_stream &&other) noexcept=default
Move one document_stream to another.
+
size_t truncated_bytes() const noexcept
After iterating through the stream, this method returns the number of bytes that were not parsed at t...
+
simdjson_inline iterator begin() noexcept
Start iterating the documents in the stream.
+
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
+ + +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+ +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/generic_2ondemand_2object-inl_8h_source.html b/generic_2ondemand_2object-inl_8h_source.html new file mode 100644 index 000000000..cfd053566 --- /dev/null +++ b/generic_2ondemand_2object-inl_8h_source.html @@ -0,0 +1,338 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/object-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
object-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 simdjson_inline simdjson_result<value> object::find_field_unordered(const std::string_view key) & noexcept {
+
6  bool has_value;
+
7  SIMDJSON_TRY( iter.find_field_unordered_raw(key).get(has_value) );
+
8  if (!has_value) { return NO_SUCH_FIELD; }
+
9  return value(iter.child());
+
10 }
+
11 simdjson_inline simdjson_result<value> object::find_field_unordered(const std::string_view key) && noexcept {
+
12  bool has_value;
+
13  SIMDJSON_TRY( iter.find_field_unordered_raw(key).get(has_value) );
+
14  if (!has_value) { return NO_SUCH_FIELD; }
+
15  return value(iter.child());
+
16 }
+
17 simdjson_inline simdjson_result<value> object::operator[](const std::string_view key) & noexcept {
+
18  return find_field_unordered(key);
+
19 }
+
20 simdjson_inline simdjson_result<value> object::operator[](const std::string_view key) && noexcept {
+
21  return std::forward<object>(*this).find_field_unordered(key);
+
22 }
+
23 simdjson_inline simdjson_result<value> object::find_field(const std::string_view key) & noexcept {
+
24  bool has_value;
+
25  SIMDJSON_TRY( iter.find_field_raw(key).get(has_value) );
+
26  if (!has_value) { return NO_SUCH_FIELD; }
+
27  return value(iter.child());
+
28 }
+
29 simdjson_inline simdjson_result<value> object::find_field(const std::string_view key) && noexcept {
+
30  bool has_value;
+
31  SIMDJSON_TRY( iter.find_field_raw(key).get(has_value) );
+
32  if (!has_value) { return NO_SUCH_FIELD; }
+
33  return value(iter.child());
+
34 }
+
35 
+
36 simdjson_inline simdjson_result<object> object::start(value_iterator &iter) noexcept {
+
37  SIMDJSON_TRY( iter.start_object().error() );
+
38  return object(iter);
+
39 }
+
40 simdjson_inline simdjson_result<object> object::start_root(value_iterator &iter) noexcept {
+
41  SIMDJSON_TRY( iter.start_root_object().error() );
+
42  return object(iter);
+
43 }
+
44 simdjson_inline error_code object::consume() noexcept {
+
45  if(iter.is_at_key()) {
+
59  simdjson_unused raw_json_string actual_key;
+
60  auto error = iter.field_key().get(actual_key);
+
61  if (error) { iter.abandon(); return error; };
+
62  // Let us move to the value while we are at it.
+
63  if ((error = iter.field_value())) { iter.abandon(); return error; }
+
64  }
+
65  auto error_skip = iter.json_iter().skip_child(iter.depth()-1);
+
66  if(error_skip) { iter.abandon(); }
+
67  return error_skip;
+
68 }
+
69 
+ +
71  const uint8_t * starting_point{iter.peek_start()};
+
72  auto error = consume();
+
73  if(error) { return error; }
+
74  const uint8_t * final_point{iter._json_iter->peek(0)};
+
75  return std::string_view(reinterpret_cast<const char*>(starting_point), size_t(final_point - starting_point));
+
76 }
+
77 
+
78 simdjson_inline simdjson_result<object> object::started(value_iterator &iter) noexcept {
+
79  SIMDJSON_TRY( iter.started_object().error() );
+
80  return object(iter);
+
81 }
+
82 
+
83 simdjson_inline object object::resume(const value_iterator &iter) noexcept {
+
84  return iter;
+
85 }
+
86 
+
87 simdjson_inline object::object(const value_iterator &_iter) noexcept
+
88  : iter{_iter}
+
89 {
+
90 }
+
91 
+
92 simdjson_inline simdjson_result<object_iterator> object::begin() noexcept {
+
93 #if SIMDJSON_DEVELOPMENT_CHECKS
+
94  if (!iter.is_at_iterator_start()) { return OUT_OF_ORDER_ITERATION; }
+
95 #endif
+
96  return object_iterator(iter);
+
97 }
+
98 simdjson_inline simdjson_result<object_iterator> object::end() noexcept {
+
99  return object_iterator(iter);
+
100 }
+
101 
+
102 inline simdjson_result<value> object::at_pointer(std::string_view json_pointer) noexcept {
+
103  if (json_pointer[0] != '/') { return INVALID_JSON_POINTER; }
+
104  json_pointer = json_pointer.substr(1);
+
105  size_t slash = json_pointer.find('/');
+
106  std::string_view key = json_pointer.substr(0, slash);
+
107  // Grab the child with the given key
+ +
109 
+
110  // If there is an escape character in the key, unescape it and then get the child.
+
111  size_t escape = key.find('~');
+
112  if (escape != std::string_view::npos) {
+
113  // Unescape the key
+
114  std::string unescaped(key);
+
115  do {
+
116  switch (unescaped[escape+1]) {
+
117  case '0':
+
118  unescaped.replace(escape, 2, "~");
+
119  break;
+
120  case '1':
+
121  unescaped.replace(escape, 2, "/");
+
122  break;
+
123  default:
+
124  return INVALID_JSON_POINTER; // "Unexpected ~ escape character in JSON pointer");
+
125  }
+
126  escape = unescaped.find('~', escape+1);
+
127  } while (escape != std::string::npos);
+
128  child = find_field(unescaped); // Take note find_field does not unescape keys when matching
+
129  } else {
+
130  child = find_field(key);
+
131  }
+
132  if(child.error()) {
+
133  return child; // we do not continue if there was an error
+
134  }
+
135  // If there is a /, we have to recurse and look up more of the path
+
136  if (slash != std::string_view::npos) {
+
137  child = child.at_pointer(json_pointer.substr(slash));
+
138  }
+
139  return child;
+
140 }
+
141 
+
142 simdjson_inline simdjson_result<size_t> object::count_fields() & noexcept {
+
143  size_t count{0};
+
144  // Important: we do not consume any of the values.
+
145  for(simdjson_unused auto v : *this) { count++; }
+
146  // The above loop will always succeed, but we want to report errors.
+
147  if(iter.error()) { return iter.error(); }
+
148  // We need to move back at the start because we expect users to iterate through
+
149  // the object after counting the number of elements.
+
150  iter.reset_object();
+
151  return count;
+
152 }
+
153 
+
154 simdjson_inline simdjson_result<bool> object::is_empty() & noexcept {
+
155  bool is_not_empty;
+
156  auto error = iter.reset_object().get(is_not_empty);
+
157  if(error) { return error; }
+
158  return !is_not_empty;
+
159 }
+
160 
+
161 simdjson_inline simdjson_result<bool> object::reset() & noexcept {
+
162  return iter.reset_object();
+
163 }
+
164 
+
165 } // namespace ondemand
+
166 } // namespace SIMDJSON_IMPLEMENTATION
+
167 } // namespace simdjson
+
168 
+
169 namespace simdjson {
+
170 
+
171 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::object &&value) noexcept
+
172  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(value)) {}
+
173 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::simdjson_result(error_code error) noexcept
+
174  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object>(error) {}
+
175 
+
176 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::begin() noexcept {
+
177  if (error()) { return error(); }
+
178  return first.begin();
+
179 }
+
180 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::end() noexcept {
+
181  if (error()) { return error(); }
+
182  return first.end();
+
183 }
+
184 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field_unordered(std::string_view key) & noexcept {
+
185  if (error()) { return error(); }
+
186  return first.find_field_unordered(key);
+
187 }
+
188 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field_unordered(std::string_view key) && noexcept {
+
189  if (error()) { return error(); }
+
190  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first).find_field_unordered(key);
+
191 }
+
192 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::operator[](std::string_view key) & noexcept {
+
193  if (error()) { return error(); }
+
194  return first[key];
+
195 }
+
196 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::operator[](std::string_view key) && noexcept {
+
197  if (error()) { return error(); }
+
198  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first)[key];
+
199 }
+
200 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field(std::string_view key) & noexcept {
+
201  if (error()) { return error(); }
+
202  return first.find_field(key);
+
203 }
+
204 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field(std::string_view key) && noexcept {
+
205  if (error()) { return error(); }
+
206  return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first).find_field(key);
+
207 }
+
208 
+
209 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::at_pointer(std::string_view json_pointer) noexcept {
+
210  if (error()) { return error(); }
+
211  return first.at_pointer(json_pointer);
+
212 }
+
213 
+
214 inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::reset() noexcept {
+
215  if (error()) { return error(); }
+
216  return first.reset();
+
217 }
+
218 
+
219 inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::is_empty() noexcept {
+
220  if (error()) { return error(); }
+
221  return first.is_empty();
+
222 }
+
223 
+
224 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::count_fields() & noexcept {
+
225  if (error()) { return error(); }
+
226  return first.count_fields();
+
227 }
+
228 
+
229 } // namespace simdjson
+
A forward-only JSON object field iterator.
Definition: object.h:10
+
simdjson_inline object() noexcept=default
Create a new invalid object.
+
simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) &noexcept
Look up a field by name on an object, without regard to key order.
Definition: object-inl.h:5
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the object and returns a string_view instance corresponding to the object as represented in ...
Definition: object-inl.h:70
+
simdjson_inline simdjson_result< value > find_field(std::string_view key) &noexcept
Look up a field by name on an object (order-sensitive).
Definition: object-inl.h:23
+
simdjson_result< bool > is_empty() &noexcept
This method scans the beginning of the object and checks whether the object is empty.
Definition: object-inl.h:154
+
simdjson_inline error_code consume() noexcept
Go to the end of the object, no matter where you are right now.
Definition: object-inl.h:44
+
simdjson_result< bool > reset() &noexcept
Reset the iterator so that we are pointing back at the beginning of the object.
Definition: object-inl.h:161
+
simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: object-inl.h:102
+
simdjson_inline simdjson_result< size_t > count_fields() &noexcept
This method scans the object and counts the number of key-value pairs.
Definition: object-inl.h:142
+
A string escaped per JSON rules, terminated with quote (").
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ OUT_OF_ORDER_ITERATION
tried to iterate an array or object out of order
Definition: error.h:43
+
@ NO_SUCH_FIELD
JSON field not found in object.
Definition: error.h:37
+
@ INVALID_JSON_POINTER
Invalid JSON pointer reference.
Definition: error.h:39
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
+
+ + + + diff --git a/generic_2ondemand_2object_8h_source.html b/generic_2ondemand_2object_8h_source.html new file mode 100644 index 000000000..879e11129 --- /dev/null +++ b/generic_2ondemand_2object_8h_source.html @@ -0,0 +1,197 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/object.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
object.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
10 class object {
+
11 public:
+
17  simdjson_inline object() noexcept = default;
+
18 
+
19  simdjson_inline simdjson_result<object_iterator> begin() noexcept;
+
20  simdjson_inline simdjson_result<object_iterator> end() noexcept;
+
55  simdjson_inline simdjson_result<value> find_field(std::string_view key) & noexcept;
+
57  simdjson_inline simdjson_result<value> find_field(std::string_view key) && noexcept;
+
58 
+
92  simdjson_inline simdjson_result<value> find_field_unordered(std::string_view key) & noexcept;
+
94  simdjson_inline simdjson_result<value> find_field_unordered(std::string_view key) && noexcept;
+
96  simdjson_inline simdjson_result<value> operator[](std::string_view key) & noexcept;
+
98  simdjson_inline simdjson_result<value> operator[](std::string_view key) && noexcept;
+
99 
+
134  inline simdjson_result<value> at_pointer(std::string_view json_pointer) noexcept;
+
135 
+
145  inline simdjson_result<bool> reset() & noexcept;
+
155  inline simdjson_result<bool> is_empty() & noexcept;
+
173  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
+
179  simdjson_inline simdjson_result<std::string_view> raw_json() noexcept;
+
180 
+
181 protected:
+
185  simdjson_inline error_code consume() noexcept;
+
186  static simdjson_inline simdjson_result<object> start(value_iterator &iter) noexcept;
+
187  static simdjson_inline simdjson_result<object> start_root(value_iterator &iter) noexcept;
+
188  static simdjson_inline simdjson_result<object> started(value_iterator &iter) noexcept;
+
189  static simdjson_inline object resume(const value_iterator &iter) noexcept;
+
190  simdjson_inline object(const value_iterator &iter) noexcept;
+
191 
+
192  simdjson_warn_unused simdjson_inline error_code find_field_raw(const std::string_view key) noexcept;
+
193 
+
194  value_iterator iter{};
+
195 
+
196  friend class value;
+
197  friend class document;
+
198  friend struct simdjson_result<object>;
+
199 };
+
200 
+
201 } // namespace ondemand
+
202 } // namespace SIMDJSON_IMPLEMENTATION
+
203 } // namespace simdjson
+
204 
+
205 namespace simdjson {
+
206 
+
207 template<>
+
208 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object> {
+
209 public:
+ +
211  simdjson_inline simdjson_result(error_code error) noexcept;
+
212  simdjson_inline simdjson_result() noexcept = default;
+
213 
+ + +
216  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(std::string_view key) & noexcept;
+
217  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(std::string_view key) && noexcept;
+
218  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(std::string_view key) & noexcept;
+
219  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(std::string_view key) && noexcept;
+
220  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](std::string_view key) & noexcept;
+
221  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](std::string_view key) && noexcept;
+
222  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at_pointer(std::string_view json_pointer) noexcept;
+
223  inline simdjson_result<bool> reset() noexcept;
+
224  inline simdjson_result<bool> is_empty() noexcept;
+
225  inline simdjson_result<size_t> count_fields() & noexcept;
+
226 
+
227 };
+
228 
+
229 } // namespace simdjson
+ + +
A forward-only JSON object field iterator.
Definition: object.h:10
+
simdjson_inline object() noexcept=default
Create a new invalid object.
+
simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) &noexcept
Look up a field by name on an object, without regard to key order.
Definition: object-inl.h:5
+
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the object and returns a string_view instance corresponding to the object as represented in ...
Definition: object-inl.h:70
+
simdjson_inline simdjson_result< value > find_field(std::string_view key) &noexcept
Look up a field by name on an object (order-sensitive).
Definition: object-inl.h:23
+
simdjson_result< bool > is_empty() &noexcept
This method scans the beginning of the object and checks whether the object is empty.
Definition: object-inl.h:154
+
simdjson_inline error_code consume() noexcept
Go to the end of the object, no matter where you are right now.
Definition: object-inl.h:44
+
simdjson_result< bool > reset() &noexcept
Reset the iterator so that we are pointing back at the beginning of the object.
Definition: object-inl.h:161
+
simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
Definition: object-inl.h:102
+
simdjson_inline simdjson_result< size_t > count_fields() &noexcept
This method scans the object and counts the number of key-value pairs.
Definition: object-inl.h:142
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ + + +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/generic_2ondemand_2parser-inl_8h_source.html b/generic_2ondemand_2parser-inl_8h_source.html new file mode 100644 index 000000000..374a6b781 --- /dev/null +++ b/generic_2ondemand_2parser-inl_8h_source.html @@ -0,0 +1,263 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/parser-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
parser-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 simdjson_inline parser::parser(size_t max_capacity) noexcept
+
6  : _max_capacity{max_capacity} {
+
7 }
+
8 
+
9 simdjson_warn_unused simdjson_inline error_code parser::allocate(size_t new_capacity, size_t new_max_depth) noexcept {
+
10  if (new_capacity > max_capacity()) { return CAPACITY; }
+
11  if (string_buf && new_capacity == capacity() && new_max_depth == max_depth()) { return SUCCESS; }
+
12 
+
13  // string_capacity copied from document::allocate
+
14  _capacity = 0;
+
15  size_t string_capacity = SIMDJSON_ROUNDUP_N(5 * new_capacity / 3 + SIMDJSON_PADDING, 64);
+
16  string_buf.reset(new (std::nothrow) uint8_t[string_capacity]);
+
17 #if SIMDJSON_DEVELOPMENT_CHECKS
+
18  start_positions.reset(new (std::nothrow) token_position[new_max_depth]);
+
19 #endif
+
20  if (implementation) {
+
21  SIMDJSON_TRY( implementation->set_capacity(new_capacity) );
+
22  SIMDJSON_TRY( implementation->set_max_depth(new_max_depth) );
+
23  } else {
+
24  SIMDJSON_TRY( simdjson::get_active_implementation()->create_dom_parser_implementation(new_capacity, new_max_depth, implementation) );
+
25  }
+
26  _capacity = new_capacity;
+
27  _max_depth = new_max_depth;
+
28  return SUCCESS;
+
29 }
+
30 
+
31 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(padded_string_view json) & noexcept {
+
32  if (json.padding() < SIMDJSON_PADDING) { return INSUFFICIENT_PADDING; }
+
33 
+
34  // Allocate if needed
+
35  if (capacity() < json.length() || !string_buf) {
+
36  SIMDJSON_TRY( allocate(json.length(), max_depth()) );
+
37  }
+
38 
+
39  // Run stage 1.
+
40  SIMDJSON_TRY( implementation->stage1(reinterpret_cast<const uint8_t *>(json.data()), json.length(), stage1_mode::regular) );
+
41  return document::start({ reinterpret_cast<const uint8_t *>(json.data()), this });
+
42 }
+
43 
+
44 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(const char *json, size_t len, size_t allocated) & noexcept {
+
45  return iterate(padded_string_view(json, len, allocated));
+
46 }
+
47 
+
48 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(const uint8_t *json, size_t len, size_t allocated) & noexcept {
+
49  return iterate(padded_string_view(json, len, allocated));
+
50 }
+
51 
+
52 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(std::string_view json, size_t allocated) & noexcept {
+
53  return iterate(padded_string_view(json, allocated));
+
54 }
+
55 
+
56 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(const std::string &json) & noexcept {
+
57  return iterate(padded_string_view(json));
+
58 }
+
59 
+
60 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(const simdjson_result<padded_string_view> &result) & noexcept {
+
61  // We don't presently have a way to temporarily get a const T& from a simdjson_result<T> without throwing an exception
+
62  SIMDJSON_TRY( result.error() );
+
63  padded_string_view json = result.value_unsafe();
+
64  return iterate(json);
+
65 }
+
66 
+
67 simdjson_warn_unused simdjson_inline simdjson_result<document> parser::iterate(const simdjson_result<padded_string> &result) & noexcept {
+
68  // We don't presently have a way to temporarily get a const T& from a simdjson_result<T> without throwing an exception
+
69  SIMDJSON_TRY( result.error() );
+
70  const padded_string &json = result.value_unsafe();
+
71  return iterate(json);
+
72 }
+
73 
+
74 simdjson_warn_unused simdjson_inline simdjson_result<json_iterator> parser::iterate_raw(padded_string_view json) & noexcept {
+
75  if (json.padding() < SIMDJSON_PADDING) { return INSUFFICIENT_PADDING; }
+
76 
+
77  // Allocate if needed
+
78  if (capacity() < json.length()) {
+
79  SIMDJSON_TRY( allocate(json.length(), max_depth()) );
+
80  }
+
81 
+
82  // Run stage 1.
+
83  SIMDJSON_TRY( implementation->stage1(reinterpret_cast<const uint8_t *>(json.data()), json.length(), stage1_mode::regular) );
+
84  return json_iterator(reinterpret_cast<const uint8_t *>(json.data()), this);
+
85 }
+
86 
+
87 inline simdjson_result<document_stream> parser::iterate_many(const uint8_t *buf, size_t len, size_t batch_size) noexcept {
+
88  if(batch_size < MINIMAL_BATCH_SIZE) { batch_size = MINIMAL_BATCH_SIZE; }
+
89  return document_stream(*this, buf, len, batch_size);
+
90 }
+
91 inline simdjson_result<document_stream> parser::iterate_many(const char *buf, size_t len, size_t batch_size) noexcept {
+
92  return iterate_many(reinterpret_cast<const uint8_t *>(buf), len, batch_size);
+
93 }
+
94 inline simdjson_result<document_stream> parser::iterate_many(const std::string &s, size_t batch_size) noexcept {
+
95  return iterate_many(s.data(), s.length(), batch_size);
+
96 }
+
97 inline simdjson_result<document_stream> parser::iterate_many(const padded_string &s, size_t batch_size) noexcept {
+
98  return iterate_many(s.data(), s.length(), batch_size);
+
99 }
+
100 
+
101 simdjson_inline size_t parser::capacity() const noexcept {
+
102  return _capacity;
+
103 }
+
104 simdjson_inline size_t parser::max_capacity() const noexcept {
+
105  return _max_capacity;
+
106 }
+
107 simdjson_inline size_t parser::max_depth() const noexcept {
+
108  return _max_depth;
+
109 }
+
110 
+
111 simdjson_inline void parser::set_max_capacity(size_t max_capacity) noexcept {
+
112  if(max_capacity < dom::MINIMAL_DOCUMENT_CAPACITY) {
+
113  _max_capacity = max_capacity;
+
114  } else {
+
115  _max_capacity = dom::MINIMAL_DOCUMENT_CAPACITY;
+
116  }
+
117 }
+
118 
+
119 simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> parser::unescape(raw_json_string in, uint8_t *&dst) const noexcept {
+
120  uint8_t *end = implementation->parse_string(in.buf, dst);
+
121  if (!end) { return STRING_ERROR; }
+
122  std::string_view result(reinterpret_cast<const char *>(dst), end-dst);
+
123  dst = end;
+
124  return result;
+
125 }
+
126 
+
127 } // namespace ondemand
+
128 } // namespace SIMDJSON_IMPLEMENTATION
+
129 } // namespace simdjson
+
130 
+
131 namespace simdjson {
+
132 
+
133 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::parser>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::parser &&value) noexcept
+
134  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::parser>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::parser>(value)) {}
+
135 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::parser>::simdjson_result(error_code error) noexcept
+
136  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::parser>(error) {}
+
137 
+
138 } // namespace simdjson
+ +
simdjson_inline size_t max_capacity() const noexcept
The maximum capacity of this parser (the largest document it is allowed to process).
Definition: parser-inl.h:104
+
simdjson_warn_unused simdjson_result< document > iterate(padded_string_view json) &noexcept
Start iterating an on-demand JSON document.
Definition: parser-inl.h:31
+
parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
Create a JSON parser.
Definition: parser-inl.h:5
+
simdjson_result< document_stream > iterate_many(const uint8_t *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
Parse a buffer containing many JSON documents.
Definition: parser-inl.h:87
+
simdjson_inline size_t max_depth() const noexcept
The maximum depth of this parser (the most deeply nested objects and arrays it can process).
Definition: parser-inl.h:107
+
simdjson_warn_unused error_code allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max...
Definition: parser-inl.h:9
+
simdjson_inline simdjson_result< std::string_view > unescape(raw_json_string in, uint8_t *&dst) const noexcept
Unescape this JSON string, replacing \ with \, with newline, etc.
Definition: parser-inl.h:119
+
simdjson_inline size_t capacity() const noexcept
The capacity of this parser (the largest document it can process).
Definition: parser-inl.h:101
+
A string escaped per JSON rules, terminated with quote (").
+
An implementation of simdjson for a particular CPU architecture.
+
User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ CAPACITY
This parser can't support a document that big.
Definition: error.h:19
+
@ STRING_ERROR
Problem while parsing a string.
Definition: error.h:23
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ INSUFFICIENT_PADDING
The JSON doesn't have enough padding for simdjson to safely parse it.
Definition: error.h:44
+
SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr< const implementation > & get_active_implementation()
The active implementation.
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
String with extra allocation for ease of use with parser::parse()
Definition: padded_string.h:21
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/generic_2ondemand_2parser_8h_source.html b/generic_2ondemand_2parser_8h_source.html new file mode 100644 index 000000000..2bc161b28 --- /dev/null +++ b/generic_2ondemand_2parser_8h_source.html @@ -0,0 +1,217 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/parser.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
parser.h
+
+
+
1 #include "simdjson/error.h"
+
2 
+
3 namespace simdjson {
+
4 namespace SIMDJSON_IMPLEMENTATION {
+
5 namespace ondemand {
+
6 
+
7 class array;
+
8 class object;
+
9 class value;
+
10 class raw_json_string;
+
11 class document_stream;
+
12 
+
18 static constexpr size_t DEFAULT_BATCH_SIZE = 1000000;
+
27 static constexpr size_t MINIMAL_BATCH_SIZE = 32;
+
28 
+
34 class parser {
+
35 public:
+
41  inline explicit parser(size_t max_capacity = SIMDJSON_MAXSIZE_BYTES) noexcept;
+
42 
+
43  inline parser(parser &&other) noexcept = default;
+
44  simdjson_inline parser(const parser &other) = delete;
+
45  simdjson_inline parser &operator=(const parser &other) = delete;
+
46  simdjson_inline parser &operator=(parser &&other) noexcept = default;
+
47 
+
49  inline ~parser() noexcept = default;
+
50 
+
96  simdjson_warn_unused simdjson_result<document> iterate(padded_string_view json) & noexcept;
+
98  simdjson_warn_unused simdjson_result<document> iterate(const char *json, size_t len, size_t capacity) & noexcept;
+
100  simdjson_warn_unused simdjson_result<document> iterate(const uint8_t *json, size_t len, size_t capacity) & noexcept;
+
102  simdjson_warn_unused simdjson_result<document> iterate(std::string_view json, size_t capacity) & noexcept;
+
104  simdjson_warn_unused simdjson_result<document> iterate(const std::string &json) & noexcept;
+
106  simdjson_warn_unused simdjson_result<document> iterate(const simdjson_result<padded_string> &json) & noexcept;
+
108  simdjson_warn_unused simdjson_result<document> iterate(const simdjson_result<padded_string_view> &json) & noexcept;
+
110  simdjson_warn_unused simdjson_result<document> iterate(padded_string &&json) & noexcept = delete;
+
111 
+
150  simdjson_warn_unused simdjson_result<json_iterator> iterate_raw(padded_string_view json) & noexcept;
+
151 
+
152 
+
215  inline simdjson_result<document_stream> iterate_many(const uint8_t *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+
217  inline simdjson_result<document_stream> iterate_many(const char *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+
219  inline simdjson_result<document_stream> iterate_many(const std::string &s, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+
220  inline simdjson_result<document_stream> iterate_many(const std::string &&s, size_t batch_size) = delete;// unsafe
+
222  inline simdjson_result<document_stream> iterate_many(const padded_string &s, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+
223  inline simdjson_result<document_stream> iterate_many(const padded_string &&s, size_t batch_size) = delete;// unsafe
+
224 
+
226  simdjson_result<document_stream> iterate_many(const char *buf, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept = delete;
+
227 
+
229  simdjson_inline size_t capacity() const noexcept;
+
231  simdjson_inline size_t max_capacity() const noexcept;
+
232  simdjson_inline void set_max_capacity(size_t max_capacity) noexcept;
+
239  simdjson_inline size_t max_depth() const noexcept;
+
240 
+
253  simdjson_warn_unused error_code allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept;
+
254 
+
255  #ifdef SIMDJSON_THREADS_ENABLED
+
261  bool threaded{true};
+
262  #endif
+
263 
+
284  simdjson_inline simdjson_result<std::string_view> unescape(raw_json_string in, uint8_t *&dst) const noexcept;
+
285 private:
+
287  std::unique_ptr<internal::dom_parser_implementation> implementation{};
+
288  size_t _capacity{0};
+
289  size_t _max_capacity;
+
290  size_t _max_depth{DEFAULT_MAX_DEPTH};
+
291  std::unique_ptr<uint8_t[]> string_buf{};
+
292 #if SIMDJSON_DEVELOPMENT_CHECKS
+
293  std::unique_ptr<token_position[]> start_positions{};
+
294 #endif
+
295 
+
296  friend class json_iterator;
+
297  friend class document_stream;
+
298 };
+
299 
+
300 } // namespace ondemand
+
301 } // namespace SIMDJSON_IMPLEMENTATION
+
302 } // namespace simdjson
+
303 
+
304 namespace simdjson {
+
305 
+
306 template<>
+
307 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::parser> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::parser> {
+
308 public:
+ +
310  simdjson_inline simdjson_result(error_code error) noexcept;
+
311  simdjson_inline simdjson_result() noexcept = default;
+
312 };
+
313 
+
314 } // namespace simdjson
+ + + +
simdjson_inline size_t max_capacity() const noexcept
The maximum capacity of this parser (the largest document it is allowed to process).
Definition: parser-inl.h:104
+
simdjson_warn_unused simdjson_result< document > iterate(padded_string_view json) &noexcept
Start iterating an on-demand JSON document.
Definition: parser-inl.h:31
+
~parser() noexcept=default
Deallocate the JSON parser.
+
parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept
Create a JSON parser.
Definition: parser-inl.h:5
+
simdjson_result< document_stream > iterate_many(const uint8_t *buf, size_t len, size_t batch_size=DEFAULT_BATCH_SIZE) noexcept
Parse a buffer containing many JSON documents.
Definition: parser-inl.h:87
+
simdjson_inline size_t max_depth() const noexcept
The maximum depth of this parser (the most deeply nested objects and arrays it can process).
Definition: parser-inl.h:107
+
simdjson_warn_unused error_code allocate(size_t capacity, size_t max_depth=DEFAULT_MAX_DEPTH) noexcept
Ensure this parser has enough memory to process JSON documents up to capacity bytes in length and max...
Definition: parser-inl.h:9
+
simdjson_inline simdjson_result< std::string_view > unescape(raw_json_string in, uint8_t *&dst) const noexcept
Unescape this JSON string, replacing \ with \, with newline, etc.
Definition: parser-inl.h:119
+
simdjson_inline size_t capacity() const noexcept
The capacity of this parser (the largest document it can process).
Definition: parser-inl.h:101
+
A string escaped per JSON rules, terminated with quote (").
+
An implementation of simdjson for a particular CPU architecture.
+
User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
+
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
We want to support argument-dependent lookup (ADL).
+
constexpr size_t DEFAULT_MAX_DEPTH
By default, simdjson supports this many nested objects and arrays.
Definition: common_defs.h:52
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
constexpr size_t SIMDJSON_MAXSIZE_BYTES
The maximum document size supported by simdjson.
Definition: common_defs.h:35
+ +
String with extra allocation for ease of use with parser::parse()
Definition: padded_string.h:21
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/generic_2ondemand_2serialization-inl_8h_source.html b/generic_2ondemand_2serialization-inl_8h_source.html new file mode 100644 index 000000000..a92249060 --- /dev/null +++ b/generic_2ondemand_2serialization-inl_8h_source.html @@ -0,0 +1,333 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/serialization-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
serialization-inl.h
+
+
+
1 
+
2 
+
3 namespace simdjson {
+
4 
+
5 inline std::string_view trim(const std::string_view str) noexcept {
+
6  // We can almost surely do better by rolling our own find_first_not_of function.
+
7  size_t first = str.find_first_not_of(" \t\n\r");
+
8  // If we have the empty string (just white space), then no trimming is possible, and
+
9  // we return the empty string_view.
+
10  if (std::string_view::npos == first) { return std::string_view(); }
+
11  size_t last = str.find_last_not_of(" \t\n\r");
+
12  return str.substr(first, (last - first + 1));
+
13 }
+
14 
+
15 
+ +
17  std::string_view v;
+
18  auto error = x.raw_json().get(v);
+
19  if(error) {return error; }
+
20  return trim(v);
+
21 }
+
22 
+
23 inline simdjson_result<std::string_view> to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document_reference& x) noexcept {
+
24  std::string_view v;
+
25  auto error = x.raw_json().get(v);
+
26  if(error) {return error; }
+
27  return trim(v);
+
28 }
+
29 
+ +
37  using namespace SIMDJSON_IMPLEMENTATION::ondemand;
+ +
39  auto error = x.type().get(t);
+
40  if(error != SUCCESS) { return error; }
+
41  switch (t)
+
42  {
+
43  case json_type::array:
+
44  {
+ +
46  error = x.get_array().get(array);
+
47  if(error) { return error; }
+
48  return to_json_string(array);
+
49  }
+
50  case json_type::object:
+
51  {
+ +
53  error = x.get_object().get(object);
+
54  if(error) { return error; }
+
55  return to_json_string(object);
+
56  }
+
57  default:
+
58  return trim(x.raw_json_token());
+
59  }
+
60 }
+
61 
+ +
63  std::string_view v;
+
64  auto error = x.raw_json().get(v);
+
65  if(error) {return error; }
+
66  return trim(v);
+
67 }
+
68 
+ +
70  std::string_view v;
+
71  auto error = x.raw_json().get(v);
+
72  if(error) {return error; }
+
73  return trim(v);
+
74 }
+
75 
+
76 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> x) {
+
77  if (x.error()) { return x.error(); }
+
78  return to_json_string(x.value_unsafe());
+
79 }
+
80 
+
81 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference> x) {
+
82  if (x.error()) { return x.error(); }
+
83  return to_json_string(x.value_unsafe());
+
84 }
+
85 
+
86 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> x) {
+
87  if (x.error()) { return x.error(); }
+
88  return to_json_string(x.value_unsafe());
+
89 }
+
90 
+
91 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> x) {
+
92  if (x.error()) { return x.error(); }
+
93  return to_json_string(x.value_unsafe());
+
94 }
+
95 
+
96 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> x) {
+
97  if (x.error()) { return x.error(); }
+
98  return to_json_string(x.value_unsafe());
+
99 }
+
100 } // namespace simdjson
+
101 
+
102 namespace simdjson { namespace SIMDJSON_IMPLEMENTATION { namespace ondemand {
+
103 
+
104 #if SIMDJSON_EXCEPTIONS
+
105 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x) {
+
106  std::string_view v;
+
107  auto error = simdjson::to_json_string(x).get(v);
+
108  if(error == simdjson::SUCCESS) {
+
109  return (out << v);
+
110  } else {
+
111  throw simdjson::simdjson_error(error);
+
112  }
+
113 }
+ +
115  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
116  return (out << x.value());
+
117 }
+
118 #else
+
119 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x) {
+
120  std::string_view v;
+
121  auto error = simdjson::to_json_string(x).get(v);
+
122  if(error == simdjson::SUCCESS) {
+
123  return (out << v);
+
124  } else {
+
125  return (out << error);
+
126  }
+
127 }
+
128 #endif
+
129 
+
130 #if SIMDJSON_EXCEPTIONS
+
131 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value) {
+
132  std::string_view v;
+
133  auto error = simdjson::to_json_string(value).get(v);
+
134  if(error == simdjson::SUCCESS) {
+
135  return (out << v);
+
136  } else {
+
137  throw simdjson::simdjson_error(error);
+
138  }
+
139 }
+ +
141  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
142  return (out << x.value());
+
143 }
+
144 #else
+
145 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value) {
+
146  std::string_view v;
+
147  auto error = simdjson::to_json_string(value).get(v);
+
148  if(error == simdjson::SUCCESS) {
+
149  return (out << v);
+
150  } else {
+
151  return (out << error);
+
152  }
+
153 }
+
154 #endif
+
155 
+
156 #if SIMDJSON_EXCEPTIONS
+
157 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document& value) {
+
158  std::string_view v;
+
159  auto error = simdjson::to_json_string(value).get(v);
+
160  if(error == simdjson::SUCCESS) {
+
161  return (out << v);
+
162  } else {
+
163  throw simdjson::simdjson_error(error);
+
164  }
+
165 }
+
166 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference& value) {
+
167  std::string_view v;
+
168  auto error = simdjson::to_json_string(value).get(v);
+
169  if(error == simdjson::SUCCESS) {
+
170  return (out << v);
+
171  } else {
+
172  throw simdjson::simdjson_error(error);
+
173  }
+
174 }
+ +
176  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
177  return (out << x.value());
+
178 }
+ +
180  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
181  return (out << x.value());
+
182 }
+
183 #else
+
184 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document& value) {
+
185  std::string_view v;
+
186  auto error = simdjson::to_json_string(value).get(v);
+
187  if(error == simdjson::SUCCESS) {
+
188  return (out << v);
+
189  } else {
+
190  return (out << error);
+
191  }
+
192 }
+
193 #endif
+
194 
+
195 #if SIMDJSON_EXCEPTIONS
+
196 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value) {
+
197  std::string_view v;
+
198  auto error = simdjson::to_json_string(value).get(v);
+
199  if(error == simdjson::SUCCESS) {
+
200  return (out << v);
+
201  } else {
+
202  throw simdjson::simdjson_error(error);
+
203  }
+
204 }
+ +
206  if (x.error()) { throw simdjson::simdjson_error(x.error()); }
+
207  return (out << x.value());
+
208 }
+
209 #else
+
210 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value) {
+
211  std::string_view v;
+
212  auto error = simdjson::to_json_string(value).get(v);
+
213  if(error == simdjson::SUCCESS) {
+
214  return (out << v);
+
215  } else {
+
216  return (out << error);
+
217  }
+
218 }
+
219 #endif
+
220 }}} // namespace simdjson::SIMDJSON_IMPLEMENTATION::ondemand
+ +
A document_reference is a thin wrapper around a document reference instance.
Definition: document.h:587
+ +
A forward-only JSON object field iterator.
Definition: object.h:10
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
std::ostream & operator<<(std::ostream &out, json_type type) noexcept
Write the JSON type to the output stream.
Definition: json_type-inl.h:5
+
json_type
The type of a JSON value.
Definition: json_type.h:7
+
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
We want to support argument-dependent lookup (ADL).
+
simdjson_result< std::string_view > to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document &x) noexcept
Create a string-view instance out of a document instance.
+
@ SUCCESS
No error.
Definition: error.h:18
+
Exception thrown when an exception-supporting simdjson method is called.
Definition: error.h:72
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/generic_2ondemand_2serialization_8h_source.html b/generic_2ondemand_2serialization_8h_source.html new file mode 100644 index 000000000..ada145833 --- /dev/null +++ b/generic_2ondemand_2serialization_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/serialization.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
serialization.h
+
+
+
1 #include "simdjson/dom/serialization.h"
+
2 #include "simdjson/error.h"
+
3 
+
4 namespace simdjson {
+
10 inline simdjson_result<std::string_view> to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document& x) noexcept;
+
17 inline simdjson_result<std::string_view> to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::value& x) noexcept;
+
23 inline simdjson_result<std::string_view> to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::object& x) noexcept;
+
29 inline simdjson_result<std::string_view> to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::array& x) noexcept;
+
30 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> x);
+
31 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> x);
+
32 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> x);
+
33 inline simdjson_result<std::string_view> to_json_string(simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> x);
+
34 } // namespace simdjson
+
35 
+
43 namespace simdjson { namespace SIMDJSON_IMPLEMENTATION { namespace ondemand {
+
44 
+
53 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x);
+
54 #if SIMDJSON_EXCEPTIONS
+ +
56 #endif
+
65 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value);
+
66 #if SIMDJSON_EXCEPTIONS
+ +
68 #endif
+
77 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document& value);
+
78 #if SIMDJSON_EXCEPTIONS
+ +
80 #endif
+
81 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference& value);
+
82 #if SIMDJSON_EXCEPTIONS
+ +
84 #endif
+
93 inline std::ostream& operator<<(std::ostream& out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value);
+
94 #if SIMDJSON_EXCEPTIONS
+ +
96 #endif
+
97 }}} // namespace simdjson::SIMDJSON_IMPLEMENTATION::ondemand
+ +
A document_reference is a thin wrapper around a document reference instance.
Definition: document.h:587
+ +
A forward-only JSON object field iterator.
Definition: object.h:10
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+
std::ostream & operator<<(std::ostream &out, json_type type) noexcept
Write the JSON type to the output stream.
Definition: json_type-inl.h:5
+
We want to support argument-dependent lookup (ADL).
+
simdjson_result< std::string_view > to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document &x) noexcept
Create a string-view instance out of a document instance.
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/group__array.html b/group__array.html new file mode 100644 index 000000000..4ea94b589 --- /dev/null +++ b/group__array.html @@ -0,0 +1,287 @@ + + + + + + + +simdjson: Array iteration + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Array iteration
+
+
+ +

Methods to iterate over array elements. +More...

+ + + + + + + + + + + + + + + + + + + + +

+Functions

simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_array () noexcept
 Check for an opening [ and start an array iteration. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_root_array () noexcept
 Check for an opening [ and start an array iteration while at the root. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_array () noexcept
 Start an array iteration, after the user has already checked and moved past the [. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_root_array () noexcept
 Start an array iteration from the root, after the user has already checked and moved past the [. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::has_next_element () noexcept
 Moves to the next element in an array. More...
 
+simdjson_warn_unused simdjson_inline value_iterator simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::child () const noexcept
 Get a child value iterator.
 
+

Detailed Description

+

Methods to iterate over array elements.

+

These methods generally assume the value is actually an object; the caller is responsible for keeping track of that fact.

+

Function Documentation

+ +

◆ has_next_element()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::has_next_element ()
+
+noexcept
+
+ +

Moves to the next element in an array.

+

Looks for , and ]. If ] is found, the array is finished and the iterator advances past it. Otherwise, it advances to the next value.

+
Returns
Whether there is another element in the array. @error TAPE_ERROR If there is a comma missing between elements.
+ +

Definition at line 447 of file value_iterator-inl.h.

+ +
+
+ +

◆ start_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_array ()
+
+noexcept
+
+ +

Check for an opening [ and start an array iteration.

+
Returns
Whether the array had any elements (returns false for empty). @error INCORRECT_TYPE If there is no [.
+ +

Definition at line 390 of file value_iterator-inl.h.

+ +
+
+ +

◆ start_root_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_root_array ()
+
+noexcept
+
+ +

Check for an opening [ and start an array iteration while at the root.

+
Returns
Whether the array had any elements (returns false for empty). @error INCORRECT_TYPE If there is no [. @error TAPE_ERROR if there is no matching ] at end of document
+ +

Definition at line 395 of file value_iterator-inl.h.

+ +
+
+ +

◆ started_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_array ()
+
+noexcept
+
+ +

Start an array iteration, after the user has already checked and moved past the [.

+

Does not move the iterator unless the array is empty ([]).

+
Returns
Whether the array had any elements (returns false for empty). @error INCOMPLETE_ARRAY_OR_OBJECT If there are no more tokens (implying the parent array or object is incomplete).
+ +

Definition at line 407 of file value_iterator-inl.h.

+ +
+
+ +

◆ started_root_array()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_root_array ()
+
+noexcept
+
+ +

Start an array iteration from the root, after the user has already checked and moved past the [.

+

Does not move the iterator unless the array is empty ([]).

+
Returns
Whether the array had any elements (returns false for empty). @error INCOMPLETE_ARRAY_OR_OBJECT If there are no more tokens (implying the parent array or object is incomplete).
+ +

Definition at line 422 of file value_iterator-inl.h.

+ +
+
+
+
+ + + + diff --git a/group__array.js b/group__array.js new file mode 100644 index 000000000..583e79e58 --- /dev/null +++ b/group__array.js @@ -0,0 +1,9 @@ +var group__array = +[ + [ "child", "group__array.html#gaba7c4e5787c7295da3a0d73b0db1c890", null ], + [ "has_next_element", "group__array.html#ga31b0a8ce8734db9413cce31c4d9c8c8d", null ], + [ "start_array", "group__array.html#ga14e69f9c4949805695e30a576bd9c964", null ], + [ "start_root_array", "group__array.html#ga334481c295286d926bb3bb912232e225", null ], + [ "started_array", "group__array.html#ga136e508ce46622b86cc901490c807578", null ], + [ "started_root_array", "group__array.html#gaa3428f6c87e63d8a2ba93a3816721066", null ] +]; \ No newline at end of file diff --git a/group__object.html b/group__object.html new file mode 100644 index 000000000..d10e5b37c --- /dev/null +++ b/group__object.html @@ -0,0 +1,409 @@ + + + + + + + +simdjson: Object iteration + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Object iteration
+
+
+ +

Methods to iterate and find object fields. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_object () noexcept
 Start an object iteration. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_root_object () noexcept
 Start an object iteration from the root. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_object () noexcept
 Start an object iteration after the user has already checked and moved past the {. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_root_object () noexcept
 Start an object iteration from the root, after the user has already checked and moved past the {. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::has_next_field () noexcept
 Moves to the next field in an object. More...
 
+simdjson_warn_unused simdjson_inline simdjson_result< raw_json_stringsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::field_key () noexcept
 Get the current field's key.
 
+simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::field_value () noexcept
 Pass the : in the field and move to its value.
 
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field (const std::string_view key) noexcept
 Find the next field with the given key. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field_raw (const std::string_view key) noexcept
 Find the next field with the given key, without unescaping. More...
 
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field_unordered_raw (const std::string_view key) noexcept
 Find the field with the given key without regard to order, and without unescaping. More...
 
+

Detailed Description

+

Methods to iterate and find object fields.

+

These methods generally assume the value is actually an object; the caller is responsible for keeping track of that fact.

+

Function Documentation

+ +

◆ find_field()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field (const std::string_view key)
+
+noexcept
+
+ +

Find the next field with the given key.

+

Assumes you have called next_field() or otherwise matched the previous value.

+

This means the iterator must be sitting at the next key:

+
{ "a": 1, "b": 2 }
+
^
+

Key is raw JSON, meaning it will be matched against the verbatim JSON without attempting to unescape it. This works well for typical ASCII and UTF-8 keys (almost all of them), but may fail to match some keys with escapes (\u,
+, etc.).

+ +
+
+ +

◆ find_field_raw()

+ +
+
+ + + + + +
+ + + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field_raw (const std::string_view key)
+
+noexcept
+
+ +

Find the next field with the given key, without unescaping.

+

This assumes object order: it will not find the field if it was already passed when looking for some other field.

+

Assumes you have called next_field() or otherwise matched the previous value.

+

This means the iterator must be sitting at the next key:

+
{ "a": 1, "b": 2 }
+
^
+

Key is raw JSON, meaning it will be matched against the verbatim JSON without attempting to unescape it. This works well for typical ASCII and UTF-8 keys (almost all of them), but may fail to match some keys with escapes (\u,
+, etc.).

+ +

Definition at line 88 of file value_iterator-inl.h.

+ +
+
+ +

◆ find_field_unordered_raw()

+ +
+
+ + + + + +
+ + + + + + + + +
SIMDJSON_PUSH_DISABLE_WARNINGS SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field_unordered_raw (const std::string_view key)
+
+noexcept
+
+ +

Find the field with the given key without regard to order, and without unescaping.

+

This is an unordered object lookup: if the field is not found initially, it will cycle around and scan from the beginning.

+

Assumes you have called next_field() or otherwise matched the previous value.

+

This means the iterator must be sitting at the next key:

+
{ "a": 1, "b": 2 }
+
^
+

Key is raw JSON, meaning it will be matched against the verbatim JSON without attempting to unescape it. This works well for typical ASCII and UTF-8 keys (almost all of them), but may fail to match some keys with escapes (\u,
+, etc.).

+

When find_field_unordered_raw is called, we can either be pointing at the first key, pointing outside (at the closing brace) or if a key was matched we can be either pointing right afterthe ':' right before the value (that we need skip), or we may have consumed the value and we might be at a comma or at the final brace (ready for a call to has_next_field()).

+ +

Definition at line 185 of file value_iterator-inl.h.

+ +
+
+ +

◆ has_next_field()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::has_next_field ()
+
+noexcept
+
+ +

Moves to the next field in an object.

+

Looks for , and }. If } is found, the object is finished and the iterator advances past it. Otherwise, it advances to the next value.

+
Returns
whether there is another field in the object. @error TAPE_ERROR If there is a comma missing between fields. @error TAPE_ERROR If there is a comma, but not enough tokens remaining to have a key, :, and value.
+ +

Definition at line 71 of file value_iterator-inl.h.

+ +
+
+ +

◆ start_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_object ()
+
+noexcept
+
+ +

Start an object iteration.

+
Returns
Whether the object had any fields (returns false for empty). @error INCORRECT_TYPE if there is no opening {
+ +

Definition at line 13 of file value_iterator-inl.h.

+ +
+
+ +

◆ start_root_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::start_root_object ()
+
+noexcept
+
+ +

Start an object iteration from the root.

+
Returns
Whether the object had any fields (returns false for empty). @error INCORRECT_TYPE if there is no opening { @error TAPE_ERROR if there is no matching } at end of document
+ +

Definition at line 18 of file value_iterator-inl.h.

+ +
+
+ +

◆ started_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_object ()
+
+noexcept
+
+ +

Start an object iteration after the user has already checked and moved past the {.

+

Does not move the iterator unless the object is empty ({}).

+
Returns
Whether the object had any fields (returns false for empty). @error INCOMPLETE_ARRAY_OR_OBJECT If there are no more tokens (implying the parent array or object is incomplete).
+ +

Definition at line 23 of file value_iterator-inl.h.

+ +
+
+ +

◆ started_root_object()

+ +
+
+ + + + + +
+ + + + + + + +
simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::started_root_object ()
+
+noexcept
+
+ +

Start an object iteration from the root, after the user has already checked and moved past the {.

+

Does not move the iterator unless the object is empty ({}).

+
Returns
Whether the object had any fields (returns false for empty). @error INCOMPLETE_ARRAY_OR_OBJECT If there are no more tokens (implying the parent array or object is incomplete).
+ +

Definition at line 37 of file value_iterator-inl.h.

+ +
+
+
+
+ + + + diff --git a/group__object.js b/group__object.js new file mode 100644 index 000000000..af533a1a9 --- /dev/null +++ b/group__object.js @@ -0,0 +1,13 @@ +var group__object = +[ + [ "field_key", "group__object.html#ga9fd0d39ec786f26b7ea86f9bc8380bdd", null ], + [ "field_value", "group__object.html#gaaaf58bcf25e6d30a3469848d36c65a05", null ], + [ "find_field", "group__object.html#gacefcaf06811426a241ed97a6948a94ee", null ], + [ "find_field_raw", "group__object.html#gab66bdaf2c97d2cbd2a94a5a3e67ffabc", null ], + [ "find_field_unordered_raw", "group__object.html#ga678e53c38ebaf2323550e7f29e253df9", null ], + [ "has_next_field", "group__object.html#ga7956fe38cd8ecfbc8f709aa6f65c92b4", null ], + [ "start_object", "group__object.html#ga46e677764da46ebbe4b0e4dea6672a5f", null ], + [ "start_root_object", "group__object.html#gab9563a58e164e9f5f75805cffb3582ec", null ], + [ "started_object", "group__object.html#ga192424d19b12648eea73e3d073d5fcac", null ], + [ "started_root_object", "group__object.html#gaa0c31077aeadb6fc627d4c5750e58ecb", null ] +]; \ No newline at end of file diff --git a/group__scalar.html b/group__scalar.html new file mode 100644 index 000000000..a8985b66a --- /dev/null +++ b/group__scalar.html @@ -0,0 +1,211 @@ + + + + + + + +simdjson: Scalar values + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Scalar values
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+simdjson_warn_unused simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_string () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< raw_json_stringsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_raw_json_string () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_uint64 () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_uint64_in_string () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_int64 () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_int64_in_string () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_double () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_double_in_string () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_bool () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_null () noexcept
 
+simdjson_warn_unused simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_negative () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_integer () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< number_typesimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_number_type () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< numbersimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_number () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_string (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< raw_json_stringsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_raw_json_string (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_uint64 (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_uint64_in_string (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_int64 (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_int64_in_string (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_double (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_double_in_string (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_bool (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_root_negative () noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_root_integer (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< number_typesimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_number_type (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< numbersimdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::get_root_number (bool check_trailing) noexcept
 
+simdjson_warn_unused simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_root_null (bool check_trailing) noexcept
 
+simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::error () const noexcept
 
+simdjson_inline uint8_t *& simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::string_buf_loc () noexcept
 
+simdjson_inline const json_iterator & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::json_iter () const noexcept
 
+simdjson_inline json_iterator & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::json_iter () noexcept
 
+simdjson_inline void simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::assert_is_valid () const noexcept
 
+simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::is_valid () const noexcept
 
+

Detailed Description

+
+
+ + + + diff --git a/haswell_2begin_8h_source.html b/haswell_2begin_8h_source.html new file mode 100644 index 000000000..dc03bdd92 --- /dev/null +++ b/haswell_2begin_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/haswell/begin.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
begin.h
+
+
+
1 #define SIMDJSON_IMPLEMENTATION haswell
+
2 SIMDJSON_TARGET_HASWELL
+
+
+ + + + diff --git a/haswell_2bitmanipulation_8h_source.html b/haswell_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..750020739 --- /dev/null +++ b/haswell_2bitmanipulation_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +simdjson: include/simdjson/haswell/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmanipulation.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_BITMANIPULATION_H
+
2 #define SIMDJSON_HASWELL_BITMANIPULATION_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 // We sometimes call trailing_zero on inputs that are zero,
+
9 // but the algorithms do not end up using the returned value.
+
10 // Sadly, sanitizers are not smart enough to figure it out.
+
11 SIMDJSON_NO_SANITIZE_UNDEFINED
+
12 simdjson_inline int trailing_zeroes(uint64_t input_num) {
+
13 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
14  return (int)_tzcnt_u64(input_num);
+
15 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
+
17  // You might expect the next line to be equivalent to
+
18  // return (int)_tzcnt_u64(input_num);
+
19  // but the generated code differs and might be less efficient?
+
21  return __builtin_ctzll(input_num);
+
22 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
+
23 }
+
24 
+
25 /* result might be undefined when input_num is zero */
+
26 simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
+
27  return _blsr_u64(input_num);
+
28 }
+
29 
+
30 /* result might be undefined when input_num is zero */
+
31 simdjson_inline int leading_zeroes(uint64_t input_num) {
+
32  return int(_lzcnt_u64(input_num));
+
33 }
+
34 
+
35 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
36 simdjson_inline unsigned __int64 count_ones(uint64_t input_num) {
+
37  // note: we do not support legacy 32-bit Windows
+
38  return __popcnt64(input_num);// Visual Studio wants two underscores
+
39 }
+
40 #else
+
41 simdjson_inline long long int count_ones(uint64_t input_num) {
+
42  return _popcnt64(input_num);
+
43 }
+
44 #endif
+
45 
+
46 simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2,
+
47  uint64_t *result) {
+
48 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
49  return _addcarry_u64(0, value1, value2,
+
50  reinterpret_cast<unsigned __int64 *>(result));
+
51 #else
+
52  return __builtin_uaddll_overflow(value1, value2,
+
53  reinterpret_cast<unsigned long long *>(result));
+
54 #endif
+
55 }
+
56 
+
57 } // unnamed namespace
+
58 } // namespace SIMDJSON_IMPLEMENTATION
+
59 } // namespace simdjson
+
60 
+
61 #endif // SIMDJSON_HASWELL_BITMANIPULATION_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/haswell_2bitmask_8h_source.html b/haswell_2bitmask_8h_source.html new file mode 100644 index 000000000..fa48f953a --- /dev/null +++ b/haswell_2bitmask_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: include/simdjson/haswell/bitmask.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmask.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_BITMASK_H
+
2 #define SIMDJSON_HASWELL_BITMASK_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 //
+
9 // Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
+
10 //
+
11 // For example, prefix_xor(00100100) == 00011100
+
12 //
+
13 simdjson_inline uint64_t prefix_xor(const uint64_t bitmask) {
+
14  // There should be no such thing with a processor supporting avx2
+
15  // but not clmul.
+
16  __m128i all_ones = _mm_set1_epi8('\xFF');
+
17  __m128i result = _mm_clmulepi64_si128(_mm_set_epi64x(0ULL, bitmask), all_ones, 0);
+
18  return _mm_cvtsi128_si64(result);
+
19 }
+
20 
+
21 } // unnamed namespace
+
22 } // namespace SIMDJSON_IMPLEMENTATION
+
23 } // namespace simdjson
+
24 
+
25 #endif // SIMDJSON_HASWELL_BITMASK_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/haswell_2end_8h_source.html b/haswell_2end_8h_source.html new file mode 100644 index 000000000..11c381526 --- /dev/null +++ b/haswell_2end_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/haswell/end.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
end.h
+
+
+
1 SIMDJSON_UNTARGET_HASWELL
+
2 #undef SIMDJSON_IMPLEMENTATION
+
+
+ + + + diff --git a/haswell_2implementation_8h_source.html b/haswell_2implementation_8h_source.html new file mode 100644 index 000000000..4812c6208 --- /dev/null +++ b/haswell_2implementation_8h_source.html @@ -0,0 +1,139 @@ + + + + + + + +simdjson: include/simdjson/haswell/implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_IMPLEMENTATION_H
+
2 #define SIMDJSON_HASWELL_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/implementation.h"
+
5 
+
6 // The constructor may be executed on any host, so we take care not to use SIMDJSON_TARGET_HASWELL
+
7 namespace simdjson {
+
8 namespace haswell {
+
9 
+
10 using namespace simdjson;
+
11 
+
15 class implementation final : public simdjson::implementation {
+
16 public:
+
17  simdjson_inline implementation() : simdjson::implementation(
+
18  "haswell",
+
19  "Intel/AMD AVX2",
+
20  internal::instruction_set::AVX2 | internal::instruction_set::PCLMULQDQ | internal::instruction_set::BMI1 | internal::instruction_set::BMI2
+
21  ) {}
+
22  simdjson_warn_unused error_code create_dom_parser_implementation(
+
23  size_t capacity,
+
24  size_t max_length,
+
25  std::unique_ptr<internal::dom_parser_implementation>& dst
+
26  ) const noexcept final;
+
27  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept final;
+
28  simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final;
+
29 };
+
30 
+
31 } // namespace haswell
+
32 } // namespace simdjson
+
33 
+
34 #endif // SIMDJSON_HASWELL_IMPLEMENTATION_H
+
An implementation of simdjson for a particular CPU architecture.
+
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
std::string minify(T x)
Minifies a JSON element or document, printing the smallest possible valid JSON.
+
+
+ + + + diff --git a/haswell_2intrinsics_8h_source.html b/haswell_2intrinsics_8h_source.html new file mode 100644 index 000000000..8a8faf7d8 --- /dev/null +++ b/haswell_2intrinsics_8h_source.html @@ -0,0 +1,136 @@ + + + + + + + +simdjson: include/simdjson/haswell/intrinsics.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
intrinsics.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_INTRINSICS_H
+
2 #define SIMDJSON_HASWELL_INTRINSICS_H
+
3 
+
4 #include "simdjson/base.h"
+
5 
+
6 #if SIMDJSON_VISUAL_STUDIO
+
7 // under clang within visual studio, this will include <x86intrin.h>
+
8 #include <intrin.h> // visual studio or clang
+
9 #else
+
10 #include <x86intrin.h> // elsewhere
+
11 #endif // SIMDJSON_VISUAL_STUDIO
+
12 
+
13 #if SIMDJSON_CLANG_VISUAL_STUDIO
+
32 #include <bmiintrin.h> // for _blsr_u64
+
33 #include <lzcntintrin.h> // for __lzcnt64
+
34 #include <immintrin.h> // for most things (AVX2, AVX512, _popcnt64)
+
35 #include <smmintrin.h>
+
36 #include <tmmintrin.h>
+
37 #include <avxintrin.h>
+
38 #include <avx2intrin.h>
+
39 #include <wmmintrin.h> // for _mm_clmulepi64_si128
+
40 // unfortunately, we may not get _blsr_u64, but, thankfully, clang
+
41 // has it as a macro.
+
42 #ifndef _blsr_u64
+
43 // we roll our own
+
44 #define _blsr_u64(n) ((n - 1) & n)
+
45 #endif // _blsr_u64
+
46 #endif // SIMDJSON_CLANG_VISUAL_STUDIO
+
47 
+
48 static_assert(sizeof(__m256i) <= simdjson::SIMDJSON_PADDING, "insufficient padding for haswell kernel.");
+
49 
+
50 #endif // SIMDJSON_HASWELL_INTRINSICS_H
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/haswell_2numberparsing_8h_source.html b/haswell_2numberparsing_8h_source.html new file mode 100644 index 000000000..6bee46b6a --- /dev/null +++ b/haswell_2numberparsing_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/haswell/numberparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
numberparsing.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_NUMBERPARSING_H
+
2 #define SIMDJSON_HASWELL_NUMBERPARSING_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
+
9  // this actually computes *16* values so we are being wasteful.
+
10  const __m128i ascii0 = _mm_set1_epi8('0');
+
11  const __m128i mul_1_10 =
+
12  _mm_setr_epi8(10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1);
+
13  const __m128i mul_1_100 = _mm_setr_epi16(100, 1, 100, 1, 100, 1, 100, 1);
+
14  const __m128i mul_1_10000 =
+
15  _mm_setr_epi16(10000, 1, 10000, 1, 10000, 1, 10000, 1);
+
16  const __m128i input = _mm_sub_epi8(
+
17  _mm_loadu_si128(reinterpret_cast<const __m128i *>(chars)), ascii0);
+
18  const __m128i t1 = _mm_maddubs_epi16(input, mul_1_10);
+
19  const __m128i t2 = _mm_madd_epi16(t1, mul_1_100);
+
20  const __m128i t3 = _mm_packus_epi32(t2, t2);
+
21  const __m128i t4 = _mm_madd_epi16(t3, mul_1_10000);
+
22  return _mm_cvtsi128_si32(
+
23  t4); // only captures the sum of the first 8 digits, drop the rest
+
24 }
+
25 
+
26 } // unnamed namespace
+
27 } // namespace SIMDJSON_IMPLEMENTATION
+
28 } // namespace simdjson
+
29 
+
30 #define SIMDJSON_SWAR_NUMBER_PARSING 1
+
31 
+
32 #include "simdjson/generic/numberparsing.h"
+
33 
+
34 #endif // SIMDJSON_HASWELL_NUMBERPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/haswell_2simd_8h_source.html b/haswell_2simd_8h_source.html new file mode 100644 index 000000000..63b505063 --- /dev/null +++ b/haswell_2simd_8h_source.html @@ -0,0 +1,472 @@ + + + + + + + +simdjson: include/simdjson/haswell/simd.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simd.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_SIMD_H
+
2 #define SIMDJSON_HASWELL_SIMD_H
+
3 
+
4 #include "simdjson/internal/simdprune_tables.h"
+
5 
+
6 namespace simdjson {
+
7 namespace SIMDJSON_IMPLEMENTATION {
+
8 namespace {
+
9 namespace simd {
+
10 
+
11  // Forward-declared so they can be used by splat and friends.
+
12  template<typename Child>
+
13  struct base {
+
14  __m256i value;
+
15 
+
16  // Zero constructor
+
17  simdjson_inline base() : value{__m256i()} {}
+
18 
+
19  // Conversion from SIMD register
+
20  simdjson_inline base(const __m256i _value) : value(_value) {}
+
21 
+
22  // Conversion to SIMD register
+
23  simdjson_inline operator const __m256i&() const { return this->value; }
+
24  simdjson_inline operator __m256i&() { return this->value; }
+
25 
+
26  // Bit operations
+
27  simdjson_inline Child operator|(const Child other) const { return _mm256_or_si256(*this, other); }
+
28  simdjson_inline Child operator&(const Child other) const { return _mm256_and_si256(*this, other); }
+
29  simdjson_inline Child operator^(const Child other) const { return _mm256_xor_si256(*this, other); }
+
30  simdjson_inline Child bit_andnot(const Child other) const { return _mm256_andnot_si256(other, *this); }
+
31  simdjson_inline Child& operator|=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast | other; return *this_cast; }
+
32  simdjson_inline Child& operator&=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast & other; return *this_cast; }
+
33  simdjson_inline Child& operator^=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast ^ other; return *this_cast; }
+
34  };
+
35 
+
36  // Forward-declared so they can be used by splat and friends.
+
37  template<typename T>
+
38  struct simd8;
+
39 
+
40  template<typename T, typename Mask=simd8<bool>>
+
41  struct base8: base<simd8<T>> {
+
42  typedef uint32_t bitmask_t;
+
43  typedef uint64_t bitmask2_t;
+
44 
+
45  simdjson_inline base8() : base<simd8<T>>() {}
+
46  simdjson_inline base8(const __m256i _value) : base<simd8<T>>(_value) {}
+
47 
+
48  friend simdjson_really_inline Mask operator==(const simd8<T> lhs, const simd8<T> rhs) { return _mm256_cmpeq_epi8(lhs, rhs); }
+
49 
+
50  static const int SIZE = sizeof(base<T>::value);
+
51 
+
52  template<int N=1>
+
53  simdjson_inline simd8<T> prev(const simd8<T> prev_chunk) const {
+
54  return _mm256_alignr_epi8(*this, _mm256_permute2x128_si256(prev_chunk, *this, 0x21), 16 - N);
+
55  }
+
56  };
+
57 
+
58  // SIMD byte mask type (returned by things like eq and gt)
+
59  template<>
+
60  struct simd8<bool>: base8<bool> {
+
61  static simdjson_inline simd8<bool> splat(bool _value) { return _mm256_set1_epi8(uint8_t(-(!!_value))); }
+
62 
+
63  simdjson_inline simd8<bool>() : base8() {}
+
64  simdjson_inline simd8<bool>(const __m256i _value) : base8<bool>(_value) {}
+
65  // Splat constructor
+
66  simdjson_inline simd8<bool>(bool _value) : base8<bool>(splat(_value)) {}
+
67 
+
68  simdjson_inline int to_bitmask() const { return _mm256_movemask_epi8(*this); }
+
69  simdjson_inline bool any() const { return !_mm256_testz_si256(*this, *this); }
+
70  simdjson_inline simd8<bool> operator~() const { return *this ^ true; }
+
71  };
+
72 
+
73  template<typename T>
+
74  struct base8_numeric: base8<T> {
+
75  static simdjson_inline simd8<T> splat(T _value) { return _mm256_set1_epi8(_value); }
+
76  static simdjson_inline simd8<T> zero() { return _mm256_setzero_si256(); }
+
77  static simdjson_inline simd8<T> load(const T values[32]) {
+
78  return _mm256_loadu_si256(reinterpret_cast<const __m256i *>(values));
+
79  }
+
80  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
81  static simdjson_inline simd8<T> repeat_16(
+
82  T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7,
+
83  T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15
+
84  ) {
+
85  return simd8<T>(
+
86  v0, v1, v2, v3, v4, v5, v6, v7,
+
87  v8, v9, v10,v11,v12,v13,v14,v15,
+
88  v0, v1, v2, v3, v4, v5, v6, v7,
+
89  v8, v9, v10,v11,v12,v13,v14,v15
+
90  );
+
91  }
+
92 
+
93  simdjson_inline base8_numeric() : base8<T>() {}
+
94  simdjson_inline base8_numeric(const __m256i _value) : base8<T>(_value) {}
+
95 
+
96  // Store to array
+
97  simdjson_inline void store(T dst[32]) const { return _mm256_storeu_si256(reinterpret_cast<__m256i *>(dst), *this); }
+
98 
+
99  // Addition/subtraction are the same for signed and unsigned
+
100  simdjson_inline simd8<T> operator+(const simd8<T> other) const { return _mm256_add_epi8(*this, other); }
+
101  simdjson_inline simd8<T> operator-(const simd8<T> other) const { return _mm256_sub_epi8(*this, other); }
+
102  simdjson_inline simd8<T>& operator+=(const simd8<T> other) { *this = *this + other; return *static_cast<simd8<T>*>(this); }
+
103  simdjson_inline simd8<T>& operator-=(const simd8<T> other) { *this = *this - other; return *static_cast<simd8<T>*>(this); }
+
104 
+
105  // Override to distinguish from bool version
+
106  simdjson_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
+
107 
+
108  // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values)
+
109  template<typename L>
+
110  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
+
111  return _mm256_shuffle_epi8(lookup_table, *this);
+
112  }
+
113 
+
114  // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted as a bitset).
+
115  // Passing a 0 value for mask would be equivalent to writing out every byte to output.
+
116  // Only the first 32 - count_ones(mask) bytes of the result are significant but 32 bytes
+
117  // get written.
+
118  // Design consideration: it seems like a function with the
+
119  // signature simd8<L> compress(uint32_t mask) would be
+
120  // sensible, but the AVX ISA makes this kind of approach difficult.
+
121  template<typename L>
+
122  simdjson_inline void compress(uint32_t mask, L * output) const {
+
123  using internal::thintable_epi8;
+
124  using internal::BitsSetTable256mul2;
+
125  using internal::pshufb_combine_table;
+
126  // this particular implementation was inspired by work done by @animetosho
+
127  // we do it in four steps, first 8 bytes and then second 8 bytes...
+
128  uint8_t mask1 = uint8_t(mask); // least significant 8 bits
+
129  uint8_t mask2 = uint8_t(mask >> 8); // second least significant 8 bits
+
130  uint8_t mask3 = uint8_t(mask >> 16); // ...
+
131  uint8_t mask4 = uint8_t(mask >> 24); // ...
+
132  // next line just loads the 64-bit values thintable_epi8[mask1] and
+
133  // thintable_epi8[mask2] into a 128-bit register, using only
+
134  // two instructions on most compilers.
+
135  __m256i shufmask = _mm256_set_epi64x(thintable_epi8[mask4], thintable_epi8[mask3],
+
136  thintable_epi8[mask2], thintable_epi8[mask1]);
+
137  // we increment by 0x08 the second half of the mask and so forth
+
138  shufmask =
+
139  _mm256_add_epi8(shufmask, _mm256_set_epi32(0x18181818, 0x18181818,
+
140  0x10101010, 0x10101010, 0x08080808, 0x08080808, 0, 0));
+
141  // this is the version "nearly pruned"
+
142  __m256i pruned = _mm256_shuffle_epi8(*this, shufmask);
+
143  // we still need to put the pieces back together.
+
144  // we compute the popcount of the first words:
+
145  int pop1 = BitsSetTable256mul2[mask1];
+
146  int pop3 = BitsSetTable256mul2[mask3];
+
147 
+
148  // then load the corresponding mask
+
149  // could be done with _mm256_loadu2_m128i but many standard libraries omit this intrinsic.
+
150  __m256i v256 = _mm256_castsi128_si256(
+
151  _mm_loadu_si128(reinterpret_cast<const __m128i *>(pshufb_combine_table + pop1 * 8)));
+
152  __m256i compactmask = _mm256_insertf128_si256(v256,
+
153  _mm_loadu_si128(reinterpret_cast<const __m128i *>(pshufb_combine_table + pop3 * 8)), 1);
+
154  __m256i almostthere = _mm256_shuffle_epi8(pruned, compactmask);
+
155  // We just need to write out the result.
+
156  // This is the tricky bit that is hard to do
+
157  // if we want to return a SIMD register, since there
+
158  // is no single-instruction approach to recombine
+
159  // the two 128-bit lanes with an offset.
+
160  __m128i v128;
+
161  v128 = _mm256_castsi256_si128(almostthere);
+
162  _mm_storeu_si128( reinterpret_cast<__m128i *>(output), v128);
+
163  v128 = _mm256_extractf128_si256(almostthere, 1);
+
164  _mm_storeu_si128( reinterpret_cast<__m128i *>(output + 16 - count_ones(mask & 0xFFFF)), v128);
+
165  }
+
166 
+
167  template<typename L>
+
168  simdjson_inline simd8<L> lookup_16(
+
169  L replace0, L replace1, L replace2, L replace3,
+
170  L replace4, L replace5, L replace6, L replace7,
+
171  L replace8, L replace9, L replace10, L replace11,
+
172  L replace12, L replace13, L replace14, L replace15) const {
+
173  return lookup_16(simd8<L>::repeat_16(
+
174  replace0, replace1, replace2, replace3,
+
175  replace4, replace5, replace6, replace7,
+
176  replace8, replace9, replace10, replace11,
+
177  replace12, replace13, replace14, replace15
+
178  ));
+
179  }
+
180  };
+
181 
+
182  // Signed bytes
+
183  template<>
+
184  struct simd8<int8_t> : base8_numeric<int8_t> {
+
185  simdjson_inline simd8() : base8_numeric<int8_t>() {}
+
186  simdjson_inline simd8(const __m256i _value) : base8_numeric<int8_t>(_value) {}
+
187  // Splat constructor
+
188  simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
+
189  // Array constructor
+
190  simdjson_inline simd8(const int8_t values[32]) : simd8(load(values)) {}
+
191  // Member-by-member initialization
+
192  simdjson_inline simd8(
+
193  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
194  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15,
+
195  int8_t v16, int8_t v17, int8_t v18, int8_t v19, int8_t v20, int8_t v21, int8_t v22, int8_t v23,
+
196  int8_t v24, int8_t v25, int8_t v26, int8_t v27, int8_t v28, int8_t v29, int8_t v30, int8_t v31
+
197  ) : simd8(_mm256_setr_epi8(
+
198  v0, v1, v2, v3, v4, v5, v6, v7,
+
199  v8, v9, v10,v11,v12,v13,v14,v15,
+
200  v16,v17,v18,v19,v20,v21,v22,v23,
+
201  v24,v25,v26,v27,v28,v29,v30,v31
+
202  )) {}
+
203  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
204  simdjson_inline static simd8<int8_t> repeat_16(
+
205  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
206  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+
207  ) {
+
208  return simd8<int8_t>(
+
209  v0, v1, v2, v3, v4, v5, v6, v7,
+
210  v8, v9, v10,v11,v12,v13,v14,v15,
+
211  v0, v1, v2, v3, v4, v5, v6, v7,
+
212  v8, v9, v10,v11,v12,v13,v14,v15
+
213  );
+
214  }
+
215 
+
216  // Order-sensitive comparisons
+
217  simdjson_inline simd8<int8_t> max_val(const simd8<int8_t> other) const { return _mm256_max_epi8(*this, other); }
+
218  simdjson_inline simd8<int8_t> min_val(const simd8<int8_t> other) const { return _mm256_min_epi8(*this, other); }
+
219  simdjson_inline simd8<bool> operator>(const simd8<int8_t> other) const { return _mm256_cmpgt_epi8(*this, other); }
+
220  simdjson_inline simd8<bool> operator<(const simd8<int8_t> other) const { return _mm256_cmpgt_epi8(other, *this); }
+
221  };
+
222 
+
223  // Unsigned bytes
+
224  template<>
+
225  struct simd8<uint8_t>: base8_numeric<uint8_t> {
+
226  simdjson_inline simd8() : base8_numeric<uint8_t>() {}
+
227  simdjson_inline simd8(const __m256i _value) : base8_numeric<uint8_t>(_value) {}
+
228  // Splat constructor
+
229  simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
+
230  // Array constructor
+
231  simdjson_inline simd8(const uint8_t values[32]) : simd8(load(values)) {}
+
232  // Member-by-member initialization
+
233  simdjson_inline simd8(
+
234  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
235  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15,
+
236  uint8_t v16, uint8_t v17, uint8_t v18, uint8_t v19, uint8_t v20, uint8_t v21, uint8_t v22, uint8_t v23,
+
237  uint8_t v24, uint8_t v25, uint8_t v26, uint8_t v27, uint8_t v28, uint8_t v29, uint8_t v30, uint8_t v31
+
238  ) : simd8(_mm256_setr_epi8(
+
239  v0, v1, v2, v3, v4, v5, v6, v7,
+
240  v8, v9, v10,v11,v12,v13,v14,v15,
+
241  v16,v17,v18,v19,v20,v21,v22,v23,
+
242  v24,v25,v26,v27,v28,v29,v30,v31
+
243  )) {}
+
244  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
245  simdjson_inline static simd8<uint8_t> repeat_16(
+
246  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
247  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+
248  ) {
+
249  return simd8<uint8_t>(
+
250  v0, v1, v2, v3, v4, v5, v6, v7,
+
251  v8, v9, v10,v11,v12,v13,v14,v15,
+
252  v0, v1, v2, v3, v4, v5, v6, v7,
+
253  v8, v9, v10,v11,v12,v13,v14,v15
+
254  );
+
255  }
+
256 
+
257  // Saturated math
+
258  simdjson_inline simd8<uint8_t> saturating_add(const simd8<uint8_t> other) const { return _mm256_adds_epu8(*this, other); }
+
259  simdjson_inline simd8<uint8_t> saturating_sub(const simd8<uint8_t> other) const { return _mm256_subs_epu8(*this, other); }
+
260 
+
261  // Order-specific operations
+
262  simdjson_inline simd8<uint8_t> max_val(const simd8<uint8_t> other) const { return _mm256_max_epu8(*this, other); }
+
263  simdjson_inline simd8<uint8_t> min_val(const simd8<uint8_t> other) const { return _mm256_min_epu8(other, *this); }
+
264  // Same as >, but only guarantees true is nonzero (< guarantees true = -1)
+
265  simdjson_inline simd8<uint8_t> gt_bits(const simd8<uint8_t> other) const { return this->saturating_sub(other); }
+
266  // Same as <, but only guarantees true is nonzero (< guarantees true = -1)
+
267  simdjson_inline simd8<uint8_t> lt_bits(const simd8<uint8_t> other) const { return other.saturating_sub(*this); }
+
268  simdjson_inline simd8<bool> operator<=(const simd8<uint8_t> other) const { return other.max_val(*this) == other; }
+
269  simdjson_inline simd8<bool> operator>=(const simd8<uint8_t> other) const { return other.min_val(*this) == other; }
+
270  simdjson_inline simd8<bool> operator>(const simd8<uint8_t> other) const { return this->gt_bits(other).any_bits_set(); }
+
271  simdjson_inline simd8<bool> operator<(const simd8<uint8_t> other) const { return this->lt_bits(other).any_bits_set(); }
+
272 
+
273  // Bit-specific operations
+
274  simdjson_inline simd8<bool> bits_not_set() const { return *this == uint8_t(0); }
+
275  simdjson_inline simd8<bool> bits_not_set(simd8<uint8_t> bits) const { return (*this & bits).bits_not_set(); }
+
276  simdjson_inline simd8<bool> any_bits_set() const { return ~this->bits_not_set(); }
+
277  simdjson_inline simd8<bool> any_bits_set(simd8<uint8_t> bits) const { return ~this->bits_not_set(bits); }
+
278  simdjson_inline bool is_ascii() const { return _mm256_movemask_epi8(*this) == 0; }
+
279  simdjson_inline bool bits_not_set_anywhere() const { return _mm256_testz_si256(*this, *this); }
+
280  simdjson_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); }
+
281  simdjson_inline bool bits_not_set_anywhere(simd8<uint8_t> bits) const { return _mm256_testz_si256(*this, bits); }
+
282  simdjson_inline bool any_bits_set_anywhere(simd8<uint8_t> bits) const { return !bits_not_set_anywhere(bits); }
+
283  template<int N>
+
284  simdjson_inline simd8<uint8_t> shr() const { return simd8<uint8_t>(_mm256_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); }
+
285  template<int N>
+
286  simdjson_inline simd8<uint8_t> shl() const { return simd8<uint8_t>(_mm256_slli_epi16(*this, N)) & uint8_t(0xFFu << N); }
+
287  // Get one of the bits and make a bitmask out of it.
+
288  // e.g. value.get_bit<7>() gets the high bit
+
289  template<int N>
+
290  simdjson_inline int get_bit() const { return _mm256_movemask_epi8(_mm256_slli_epi16(*this, 7-N)); }
+
291  };
+
292 
+
293  template<typename T>
+
294  struct simd8x64 {
+
295  static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
+
296  static_assert(NUM_CHUNKS == 2, "Haswell kernel should use two registers per 64-byte block.");
+
297  const simd8<T> chunks[NUM_CHUNKS];
+
298 
+
299  simd8x64(const simd8x64<T>& o) = delete; // no copy allowed
+
300  simd8x64<T>& operator=(const simd8<T>& other) = delete; // no assignment allowed
+
301  simd8x64() = delete; // no default constructor allowed
+
302 
+
303  simdjson_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1) : chunks{chunk0, chunk1} {}
+
304  simdjson_inline simd8x64(const T ptr[64]) : chunks{simd8<T>::load(ptr), simd8<T>::load(ptr+32)} {}
+
305 
+
306  simdjson_inline uint64_t compress(uint64_t mask, T * output) const {
+
307  uint32_t mask1 = uint32_t(mask);
+
308  uint32_t mask2 = uint32_t(mask >> 32);
+
309  this->chunks[0].compress(mask1, output);
+
310  this->chunks[1].compress(mask2, output + 32 - count_ones(mask1));
+
311  return 64 - count_ones(mask);
+
312  }
+
313 
+
314  simdjson_inline void store(T ptr[64]) const {
+
315  this->chunks[0].store(ptr+sizeof(simd8<T>)*0);
+
316  this->chunks[1].store(ptr+sizeof(simd8<T>)*1);
+
317  }
+
318 
+
319  simdjson_inline uint64_t to_bitmask() const {
+
320  uint64_t r_lo = uint32_t(this->chunks[0].to_bitmask());
+
321  uint64_t r_hi = this->chunks[1].to_bitmask();
+
322  return r_lo | (r_hi << 32);
+
323  }
+
324 
+
325  simdjson_inline simd8<T> reduce_or() const {
+
326  return this->chunks[0] | this->chunks[1];
+
327  }
+
328 
+
329  simdjson_inline simd8x64<T> bit_or(const T m) const {
+
330  const simd8<T> mask = simd8<T>::splat(m);
+
331  return simd8x64<T>(
+
332  this->chunks[0] | mask,
+
333  this->chunks[1] | mask
+
334  );
+
335  }
+
336 
+
337  simdjson_inline uint64_t eq(const T m) const {
+
338  const simd8<T> mask = simd8<T>::splat(m);
+
339  return simd8x64<bool>(
+
340  this->chunks[0] == mask,
+
341  this->chunks[1] == mask
+
342  ).to_bitmask();
+
343  }
+
344 
+
345  simdjson_inline uint64_t eq(const simd8x64<uint8_t> &other) const {
+
346  return simd8x64<bool>(
+
347  this->chunks[0] == other.chunks[0],
+
348  this->chunks[1] == other.chunks[1]
+
349  ).to_bitmask();
+
350  }
+
351 
+
352  simdjson_inline uint64_t lteq(const T m) const {
+
353  const simd8<T> mask = simd8<T>::splat(m);
+
354  return simd8x64<bool>(
+
355  this->chunks[0] <= mask,
+
356  this->chunks[1] <= mask
+
357  ).to_bitmask();
+
358  }
+
359  }; // struct simd8x64<T>
+
360 
+
361 } // namespace simd
+
362 
+
363 } // unnamed namespace
+
364 } // namespace SIMDJSON_IMPLEMENTATION
+
365 } // namespace simdjson
+
366 
+
367 #endif // SIMDJSON_HASWELL_SIMD_H
+
simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/haswell_2stringparsing_8h_source.html b/haswell_2stringparsing_8h_source.html new file mode 100644 index 000000000..34054dda9 --- /dev/null +++ b/haswell_2stringparsing_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: include/simdjson/haswell/stringparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
stringparsing.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_STRINGPARSING_H
+
2 #define SIMDJSON_HASWELL_STRINGPARSING_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include "simdjson/haswell/simd.h"
+
6 #include "simdjson/haswell/bitmanipulation.h"
+
7 
+
8 namespace simdjson {
+
9 namespace SIMDJSON_IMPLEMENTATION {
+
10 namespace {
+
11 
+
12 using namespace simd;
+
13 
+
14 // Holds backslashes and quotes locations.
+
15 struct backslash_and_quote {
+
16 public:
+
17  static constexpr uint32_t BYTES_PROCESSED = 32;
+
18  simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
+
19 
+
20  simdjson_inline bool has_quote_first() { return ((bs_bits - 1) & quote_bits) != 0; }
+
21  simdjson_inline bool has_backslash() { return ((quote_bits - 1) & bs_bits) != 0; }
+
22  simdjson_inline int quote_index() { return trailing_zeroes(quote_bits); }
+
23  simdjson_inline int backslash_index() { return trailing_zeroes(bs_bits); }
+
24 
+
25  uint32_t bs_bits;
+
26  uint32_t quote_bits;
+
27 }; // struct backslash_and_quote
+
28 
+
29 simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
+
30  // this can read up to 15 bytes beyond the buffer size, but we require
+
31  // SIMDJSON_PADDING of padding
+
32  static_assert(SIMDJSON_PADDING >= (BYTES_PROCESSED - 1), "backslash and quote finder must process fewer than SIMDJSON_PADDING bytes");
+
33  simd8<uint8_t> v(src);
+
34  // store to dest unconditionally - we can overwrite the bits we don't like later
+
35  v.store(dst);
+
36  return {
+
37  static_cast<uint32_t>((v == '\\').to_bitmask()), // bs_bits
+
38  static_cast<uint32_t>((v == '"').to_bitmask()), // quote_bits
+
39  };
+
40 }
+
41 
+
42 } // unnamed namespace
+
43 } // namespace SIMDJSON_IMPLEMENTATION
+
44 } // namespace simdjson
+
45 
+
46 #endif // SIMDJSON_HASWELL_STRINGPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/haswell_8h_source.html b/haswell_8h_source.html new file mode 100644 index 000000000..234d2b64c --- /dev/null +++ b/haswell_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: include/simdjson/haswell.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
haswell.h
+
+
+
1 #ifndef SIMDJSON_HASWELL_H
+
2 #define SIMDJSON_HASWELL_H
+
3 
+ +
5 
+
6 #if SIMDJSON_IMPLEMENTATION_HASWELL
+
7 
+
8 #if SIMDJSON_CAN_ALWAYS_RUN_HASWELL
+
9 #define SIMDJSON_TARGET_HASWELL
+
10 #define SIMDJSON_UNTARGET_HASWELL
+
11 #else
+
12 #define SIMDJSON_TARGET_HASWELL SIMDJSON_TARGET_REGION("avx2,bmi,pclmul,lzcnt")
+
13 #define SIMDJSON_UNTARGET_HASWELL SIMDJSON_UNTARGET_REGION
+
14 #endif
+
15 
+
16 namespace simdjson {
+
20 namespace haswell {
+
21 } // namespace haswell
+
22 } // namespace simdjson
+
23 
+
24 //
+
25 // These two need to be included outside SIMDJSON_TARGET_HASWELL
+
26 //
+
27 #include "simdjson/haswell/implementation.h"
+
28 #include "simdjson/haswell/intrinsics.h"
+
29 
+
30 //
+
31 // The rest need to be inside the region
+
32 //
+
33 #include "simdjson/haswell/begin.h"
+
34 
+
35 // Declarations
+
36 #include "simdjson/generic/dom_parser_implementation.h"
+
37 #include "simdjson/haswell/bitmanipulation.h"
+
38 #include "simdjson/haswell/bitmask.h"
+
39 #include "simdjson/haswell/simd.h"
+
40 #include "simdjson/generic/jsoncharutils.h"
+
41 #include "simdjson/generic/atomparsing.h"
+
42 #include "simdjson/haswell/stringparsing.h"
+
43 #include "simdjson/haswell/numberparsing.h"
+
44 #include "simdjson/haswell/end.h"
+
45 
+
46 #endif // SIMDJSON_IMPLEMENTATION_HASWELL
+
47 #endif // SIMDJSON_HASWELL_COMMON_H
+
Includes common stuff needed for implementations.
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 000000000..9c0969555 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,180 @@ + + + + + + + +simdjson: Class Hierarchy + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Csimdjson::dom::arrayJSON array
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::arrayA forward-only JSON array
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorA forward-only JSON array
 Csimdjson::dom::documentA parsed JSON document
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentA JSON document
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_referenceA document_reference is a thin wrapper around a document reference instance
 Csimdjson::dom::document_streamA forward-only stream of documents
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_streamA forward-only stream of documents
 Csimdjson::internal::dom_parser_implementationAn implementation of simdjson's DOM parser for a particular CPU architecture
 Csimdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation
 Csimdjson::dom::elementA JSON element
 Cstd::exception
 Csimdjson::simdjson_errorException thrown when an exception-supporting simdjson method is called
 Csimdjson::implementationAn implementation of simdjson for a particular CPU architecture
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >The result of a simdjson operation that could fail
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
 Csimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
 Csimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
 Csimdjson::dom::array::iterator
 Csimdjson::dom::document_stream::iteratorAn iterator through a forward-only stream of documents
 Csimdjson::dom::object::iterator
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator
 Csimdjson::dom::key_value_pairKey/value pair in an object
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberA type representing a JSON number
 Csimdjson::dom::objectJSON object
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::objectA forward-only JSON object field iterator
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator
 Csimdjson::SIMDJSON_IMPLEMENTATION::open_container
 Csimdjson::padded_stringString with extra allocation for ease of use with parser::parse()
 Cstd::pair
 Csimdjson::internal::simdjson_result_base< dom::element >
 Csimdjson::simdjson_result< dom::element >The result of a JSON navigation that may fail
 Csimdjson::internal::simdjson_result_base< dom::array >
 Csimdjson::simdjson_result< dom::array >The result of a JSON conversion that may fail
 Csimdjson::internal::simdjson_result_base< dom::object >
 Csimdjson::simdjson_result< dom::object >The result of a JSON conversion that may fail
 Csimdjson::internal::simdjson_result_base< dom::document_stream >
 Csimdjson::simdjson_result< dom::document_stream >
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::fieldA JSON field (key/value pair) in an object
 Csimdjson::internal::simdjson_result_base< T >The result of a simdjson operation that could fail
 Csimdjson::simdjson_result< T >The result of a simdjson operation that could fail
 Csimdjson::dom::parserA persistent document parser
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::parserA JSON fragment iterator
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringA string escaped per JSON rules, terminated with quote (")
 Csimdjson::SIMDJSON_IMPLEMENTATION::ondemand::valueAn ephemeral JSON value returned during iteration
 Cstring_view
 Csimdjson::padded_string_viewUser-provided string that promises it has extra padded bytes at the end for use with parser::parse()
+
+
+
+ + + + diff --git a/hierarchy.js b/hierarchy.js new file mode 100644 index 000000000..47b1c7c91 --- /dev/null +++ b/hierarchy.js @@ -0,0 +1,101 @@ +var hierarchy = +[ + [ "simdjson::dom::array", "classsimdjson_1_1dom_1_1array.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html", null ], + [ "simdjson::dom::document", "classsimdjson_1_1dom_1_1document.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html", null ], + [ "simdjson::dom::document_stream", "classsimdjson_1_1dom_1_1document__stream.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html", null ], + [ "simdjson::internal::dom_parser_implementation", null, [ + [ "simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html", null ] + ] ], + [ "simdjson::dom::element", "classsimdjson_1_1dom_1_1element.html", null ], + [ "std::exception", null, [ + [ "simdjson::simdjson_error", "structsimdjson_1_1simdjson__error.html", null ] + ] ], + [ "simdjson::implementation", "classsimdjson_1_1implementation.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", [ + [ "simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html", null ] + ] ], + [ "simdjson::dom::array::iterator", "classsimdjson_1_1dom_1_1array_1_1iterator.html", null ], + [ "simdjson::dom::document_stream::iterator", "classsimdjson_1_1dom_1_1document__stream_1_1iterator.html", null ], + [ "simdjson::dom::object::iterator", "classsimdjson_1_1dom_1_1object_1_1iterator.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html", null ], + [ "simdjson::dom::key_value_pair", "classsimdjson_1_1dom_1_1key__value__pair.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html", null ], + [ "simdjson::dom::object", "classsimdjson_1_1dom_1_1object.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::open_container", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html", null ], + [ "simdjson::padded_string", "structsimdjson_1_1padded__string.html", null ], + [ "std::pair", null, [ + [ "simdjson::internal::simdjson_result_base< dom::element >", null, [ + [ "simdjson::simdjson_result< dom::element >", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html", null ] + ] ], + [ "simdjson::internal::simdjson_result_base< dom::array >", null, [ + [ "simdjson::simdjson_result< dom::array >", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html", null ] + ] ], + [ "simdjson::internal::simdjson_result_base< dom::object >", null, [ + [ "simdjson::simdjson_result< dom::object >", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html", null ] + ] ], + [ "simdjson::internal::simdjson_result_base< dom::document_stream >", null, [ + [ "simdjson::simdjson_result< dom::document_stream >", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html", null ] + ] ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html", null ], + [ "simdjson::internal::simdjson_result_base< T >", null, [ + [ "simdjson::simdjson_result< T >", "structsimdjson_1_1simdjson__result.html", null ] + ] ] + ] ], + [ "simdjson::dom::parser", "classsimdjson_1_1dom_1_1parser.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html", null ], + [ "simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html", null ], + [ "string_view", null, [ + [ "simdjson::padded_string_view", "classsimdjson_1_1padded__string__view.html", null ] + ] ] +]; \ No newline at end of file diff --git a/icelake_2begin_8h_source.html b/icelake_2begin_8h_source.html new file mode 100644 index 000000000..b1d065905 --- /dev/null +++ b/icelake_2begin_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/icelake/begin.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
begin.h
+
+
+
1 #define SIMDJSON_IMPLEMENTATION icelake
+
2 SIMDJSON_TARGET_ICELAKE
+
+
+ + + + diff --git a/icelake_2bitmanipulation_8h_source.html b/icelake_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..9a527a415 --- /dev/null +++ b/icelake_2bitmanipulation_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +simdjson: include/simdjson/icelake/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmanipulation.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_BITMANIPULATION_H
+
2 #define SIMDJSON_ICELAKE_BITMANIPULATION_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 // We sometimes call trailing_zero on inputs that are zero,
+
9 // but the algorithms do not end up using the returned value.
+
10 // Sadly, sanitizers are not smart enough to figure it out.
+
11 SIMDJSON_NO_SANITIZE_UNDEFINED
+
12 simdjson_inline int trailing_zeroes(uint64_t input_num) {
+
13 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
14  return (int)_tzcnt_u64(input_num);
+
15 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
+
17  // You might expect the next line to be equivalent to
+
18  // return (int)_tzcnt_u64(input_num);
+
19  // but the generated code differs and might be less efficient?
+
21  return __builtin_ctzll(input_num);
+
22 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
+
23 }
+
24 
+
25 /* result might be undefined when input_num is zero */
+
26 simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
+
27  return _blsr_u64(input_num);
+
28 }
+
29 
+
30 /* result might be undefined when input_num is zero */
+
31 simdjson_inline int leading_zeroes(uint64_t input_num) {
+
32  return int(_lzcnt_u64(input_num));
+
33 }
+
34 
+
35 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
36 simdjson_inline unsigned __int64 count_ones(uint64_t input_num) {
+
37  // note: we do not support legacy 32-bit Windows
+
38  return __popcnt64(input_num);// Visual Studio wants two underscores
+
39 }
+
40 #else
+
41 simdjson_inline long long int count_ones(uint64_t input_num) {
+
42  return _popcnt64(input_num);
+
43 }
+
44 #endif
+
45 
+
46 simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2,
+
47  uint64_t *result) {
+
48 #if SIMDJSON_REGULAR_VISUAL_STUDIO
+
49  return _addcarry_u64(0, value1, value2,
+
50  reinterpret_cast<unsigned __int64 *>(result));
+
51 #else
+
52  return __builtin_uaddll_overflow(value1, value2,
+
53  reinterpret_cast<unsigned long long *>(result));
+
54 #endif
+
55 }
+
56 
+
57 } // unnamed namespace
+
58 } // namespace SIMDJSON_IMPLEMENTATION
+
59 } // namespace simdjson
+
60 
+
61 #endif // SIMDJSON_ICELAKE_BITMANIPULATION_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/icelake_2bitmask_8h_source.html b/icelake_2bitmask_8h_source.html new file mode 100644 index 000000000..70854ad39 --- /dev/null +++ b/icelake_2bitmask_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: include/simdjson/icelake/bitmask.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
bitmask.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_BITMASK_H
+
2 #define SIMDJSON_ICELAKE_BITMASK_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 //
+
9 // Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
+
10 //
+
11 // For example, prefix_xor(00100100) == 00011100
+
12 //
+
13 simdjson_inline uint64_t prefix_xor(const uint64_t bitmask) {
+
14  // There should be no such thing with a processor supporting avx2
+
15  // but not clmul.
+
16  __m128i all_ones = _mm_set1_epi8('\xFF');
+
17  __m128i result = _mm_clmulepi64_si128(_mm_set_epi64x(0ULL, bitmask), all_ones, 0);
+
18  return _mm_cvtsi128_si64(result);
+
19 }
+
20 
+
21 } // unnamed namespace
+
22 } // namespace SIMDJSON_IMPLEMENTATION
+
23 } // namespace simdjson
+
24 
+
25 #endif // SIMDJSON_ICELAKE_BITMASK_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/icelake_2end_8h_source.html b/icelake_2end_8h_source.html new file mode 100644 index 000000000..f87990222 --- /dev/null +++ b/icelake_2end_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/icelake/end.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
end.h
+
+
+
1 SIMDJSON_UNTARGET_ICELAKE
+
2 #undef SIMDJSON_IMPLEMENTATION
+
+
+ + + + diff --git a/icelake_2implementation_8h_source.html b/icelake_2implementation_8h_source.html new file mode 100644 index 000000000..791124488 --- /dev/null +++ b/icelake_2implementation_8h_source.html @@ -0,0 +1,139 @@ + + + + + + + +simdjson: include/simdjson/icelake/implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_IMPLEMENTATION_H
+
2 #define SIMDJSON_ICELAKE_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/implementation.h"
+
5 
+
6 // The constructor may be executed on any host, so we take care not to use SIMDJSON_TARGET_ICELAKE
+
7 namespace simdjson {
+
8 namespace icelake {
+
9 
+
10 using namespace simdjson;
+
11 
+
15 class implementation final : public simdjson::implementation {
+
16 public:
+
17  simdjson_inline implementation() : simdjson::implementation(
+
18  "icelake",
+
19  "Intel/AMD AVX512",
+
20  internal::instruction_set::AVX2 | internal::instruction_set::PCLMULQDQ | internal::instruction_set::BMI1 | internal::instruction_set::BMI2 | internal::instruction_set::AVX512F | internal::instruction_set::AVX512DQ | internal::instruction_set::AVX512CD | internal::instruction_set::AVX512BW | internal::instruction_set::AVX512VL | internal::instruction_set::AVX512VBMI2
+
21  ) {}
+
22  simdjson_warn_unused error_code create_dom_parser_implementation(
+
23  size_t capacity,
+
24  size_t max_length,
+
25  std::unique_ptr<internal::dom_parser_implementation>& dst
+
26  ) const noexcept final;
+
27  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept final;
+
28  simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final;
+
29 };
+
30 
+
31 } // namespace icelake
+
32 } // namespace simdjson
+
33 
+
34 #endif // SIMDJSON_ICELAKE_IMPLEMENTATION_H
+
An implementation of simdjson for a particular CPU architecture.
+
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
std::string minify(T x)
Minifies a JSON element or document, printing the smallest possible valid JSON.
+
+
+ + + + diff --git a/icelake_2intrinsics_8h_source.html b/icelake_2intrinsics_8h_source.html new file mode 100644 index 000000000..2d6ef1077 --- /dev/null +++ b/icelake_2intrinsics_8h_source.html @@ -0,0 +1,144 @@ + + + + + + + +simdjson: include/simdjson/icelake/intrinsics.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
intrinsics.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_INTRINSICS_H
+
2 #define SIMDJSON_ICELAKE_INTRINSICS_H
+
3 
+
4 #include "simdjson/base.h"
+
5 
+
6 #if SIMDJSON_VISUAL_STUDIO
+
7 // under clang within visual studio, this will include <x86intrin.h>
+
8 #include <intrin.h> // visual studio or clang
+
9 #else
+
10 #include <x86intrin.h> // elsewhere
+
11 #endif // SIMDJSON_VISUAL_STUDIO
+
12 
+
13 #if SIMDJSON_CLANG_VISUAL_STUDIO
+
32 #include <bmiintrin.h> // for _blsr_u64
+
33 #include <lzcntintrin.h> // for __lzcnt64
+
34 #include <immintrin.h> // for most things (AVX2, AVX512, _popcnt64)
+
35 #include <smmintrin.h>
+
36 #include <tmmintrin.h>
+
37 #include <avxintrin.h>
+
38 #include <avx2intrin.h>
+
39 #include <wmmintrin.h> // for _mm_clmulepi64_si128
+
40 // Important: we need the AVX-512 headers:
+
41 #include <avx512fintrin.h>
+
42 #include <avx512dqintrin.h>
+
43 #include <avx512cdintrin.h>
+
44 #include <avx512bwintrin.h>
+
45 #include <avx512vlintrin.h>
+
46 #include <avx512vbmiintrin.h>
+
47 #include <avx512vbmi2intrin.h>
+
48 // unfortunately, we may not get _blsr_u64, but, thankfully, clang
+
49 // has it as a macro.
+
50 #ifndef _blsr_u64
+
51 // we roll our own
+
52 #define _blsr_u64(n) ((n - 1) & n)
+
53 #endif // _blsr_u64
+
54 #endif // SIMDJSON_CLANG_VISUAL_STUDIO
+
55 
+
56 static_assert(sizeof(__m512i) <= simdjson::SIMDJSON_PADDING, "insufficient padding for icelake");
+
57 
+
58 #endif // SIMDJSON_ICELAKE_INTRINSICS_H
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/icelake_2numberparsing_8h_source.html b/icelake_2numberparsing_8h_source.html new file mode 100644 index 000000000..8620ca4e2 --- /dev/null +++ b/icelake_2numberparsing_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/icelake/numberparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
numberparsing.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_NUMBERPARSING_H
+
2 #define SIMDJSON_ICELAKE_NUMBERPARSING_H
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 
+
8 static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
+
9  // this actually computes *16* values so we are being wasteful.
+
10  const __m128i ascii0 = _mm_set1_epi8('0');
+
11  const __m128i mul_1_10 =
+
12  _mm_setr_epi8(10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1);
+
13  const __m128i mul_1_100 = _mm_setr_epi16(100, 1, 100, 1, 100, 1, 100, 1);
+
14  const __m128i mul_1_10000 =
+
15  _mm_setr_epi16(10000, 1, 10000, 1, 10000, 1, 10000, 1);
+
16  const __m128i input = _mm_sub_epi8(
+
17  _mm_loadu_si128(reinterpret_cast<const __m128i *>(chars)), ascii0);
+
18  const __m128i t1 = _mm_maddubs_epi16(input, mul_1_10);
+
19  const __m128i t2 = _mm_madd_epi16(t1, mul_1_100);
+
20  const __m128i t3 = _mm_packus_epi32(t2, t2);
+
21  const __m128i t4 = _mm_madd_epi16(t3, mul_1_10000);
+
22  return _mm_cvtsi128_si32(
+
23  t4); // only captures the sum of the first 8 digits, drop the rest
+
24 }
+
25 
+
26 } // unnamed namespace
+
27 } // namespace SIMDJSON_IMPLEMENTATION
+
28 } // namespace simdjson
+
29 
+
30 #define SIMDJSON_SWAR_NUMBER_PARSING 1
+
31 
+
32 #include "simdjson/generic/numberparsing.h"
+
33 
+
34 #endif // SIMDJSON_ICELAKE_NUMBERPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/icelake_2simd_8h_source.html b/icelake_2simd_8h_source.html new file mode 100644 index 000000000..e4986d6b1 --- /dev/null +++ b/icelake_2simd_8h_source.html @@ -0,0 +1,475 @@ + + + + + + + +simdjson: include/simdjson/icelake/simd.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simd.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_SIMD_H
+
2 #define SIMDJSON_ICELAKE_SIMD_H
+
3 
+
4 #include "simdjson/internal/simdprune_tables.h"
+
5 
+
6 
+
7 
+
8 #if defined(__GNUC__) && !defined(__clang__)
+
9 #if __GNUC__ == 8
+
10 #define SIMDJSON_GCC8 1
+
11 #endif // __GNUC__ == 8
+
12 #endif // defined(__GNUC__) && !defined(__clang__)
+
13 
+
14 #if SIMDJSON_GCC8
+
18 inline __m512i _mm512_set_epi8(uint8_t a0, uint8_t a1, uint8_t a2, uint8_t a3, uint8_t a4, uint8_t a5, uint8_t a6, uint8_t a7, uint8_t a8, uint8_t a9, uint8_t a10, uint8_t a11, uint8_t a12, uint8_t a13, uint8_t a14, uint8_t a15, uint8_t a16, uint8_t a17, uint8_t a18, uint8_t a19, uint8_t a20, uint8_t a21, uint8_t a22, uint8_t a23, uint8_t a24, uint8_t a25, uint8_t a26, uint8_t a27, uint8_t a28, uint8_t a29, uint8_t a30, uint8_t a31, uint8_t a32, uint8_t a33, uint8_t a34, uint8_t a35, uint8_t a36, uint8_t a37, uint8_t a38, uint8_t a39, uint8_t a40, uint8_t a41, uint8_t a42, uint8_t a43, uint8_t a44, uint8_t a45, uint8_t a46, uint8_t a47, uint8_t a48, uint8_t a49, uint8_t a50, uint8_t a51, uint8_t a52, uint8_t a53, uint8_t a54, uint8_t a55, uint8_t a56, uint8_t a57, uint8_t a58, uint8_t a59, uint8_t a60, uint8_t a61, uint8_t a62, uint8_t a63) {
+
19  return _mm512_set_epi64(uint64_t(a7) + (uint64_t(a6) << 8) + (uint64_t(a5) << 16) + (uint64_t(a4) << 24) + (uint64_t(a3) << 32) + (uint64_t(a2) << 40) + (uint64_t(a1) << 48) + (uint64_t(a0) << 56),
+
20  uint64_t(a15) + (uint64_t(a14) << 8) + (uint64_t(a13) << 16) + (uint64_t(a12) << 24) + (uint64_t(a11) << 32) + (uint64_t(a10) << 40) + (uint64_t(a9) << 48) + (uint64_t(a8) << 56),
+
21  uint64_t(a23) + (uint64_t(a22) << 8) + (uint64_t(a21) << 16) + (uint64_t(a20) << 24) + (uint64_t(a19) << 32) + (uint64_t(a18) << 40) + (uint64_t(a17) << 48) + (uint64_t(a16) << 56),
+
22  uint64_t(a31) + (uint64_t(a30) << 8) + (uint64_t(a29) << 16) + (uint64_t(a28) << 24) + (uint64_t(a27) << 32) + (uint64_t(a26) << 40) + (uint64_t(a25) << 48) + (uint64_t(a24) << 56),
+
23  uint64_t(a39) + (uint64_t(a38) << 8) + (uint64_t(a37) << 16) + (uint64_t(a36) << 24) + (uint64_t(a35) << 32) + (uint64_t(a34) << 40) + (uint64_t(a33) << 48) + (uint64_t(a32) << 56),
+
24  uint64_t(a47) + (uint64_t(a46) << 8) + (uint64_t(a45) << 16) + (uint64_t(a44) << 24) + (uint64_t(a43) << 32) + (uint64_t(a42) << 40) + (uint64_t(a41) << 48) + (uint64_t(a40) << 56),
+
25  uint64_t(a55) + (uint64_t(a54) << 8) + (uint64_t(a53) << 16) + (uint64_t(a52) << 24) + (uint64_t(a51) << 32) + (uint64_t(a50) << 40) + (uint64_t(a49) << 48) + (uint64_t(a48) << 56),
+
26  uint64_t(a63) + (uint64_t(a62) << 8) + (uint64_t(a61) << 16) + (uint64_t(a60) << 24) + (uint64_t(a59) << 32) + (uint64_t(a58) << 40) + (uint64_t(a57) << 48) + (uint64_t(a56) << 56));
+
27 }
+
28 #endif // SIMDJSON_GCC8
+
29 
+
30 
+
31 
+
32 namespace simdjson {
+
33 namespace SIMDJSON_IMPLEMENTATION {
+
34 namespace {
+
35 namespace simd {
+
36 
+
37  // Forward-declared so they can be used by splat and friends.
+
38  template<typename Child>
+
39  struct base {
+
40  __m512i value;
+
41 
+
42  // Zero constructor
+
43  simdjson_inline base() : value{__m512i()} {}
+
44 
+
45  // Conversion from SIMD register
+
46  simdjson_inline base(const __m512i _value) : value(_value) {}
+
47 
+
48  // Conversion to SIMD register
+
49  simdjson_inline operator const __m512i&() const { return this->value; }
+
50  simdjson_inline operator __m512i&() { return this->value; }
+
51 
+
52  // Bit operations
+
53  simdjson_inline Child operator|(const Child other) const { return _mm512_or_si512(*this, other); }
+
54  simdjson_inline Child operator&(const Child other) const { return _mm512_and_si512(*this, other); }
+
55  simdjson_inline Child operator^(const Child other) const { return _mm512_xor_si512(*this, other); }
+
56  simdjson_inline Child bit_andnot(const Child other) const { return _mm512_andnot_si512(other, *this); }
+
57  simdjson_inline Child& operator|=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast | other; return *this_cast; }
+
58  simdjson_inline Child& operator&=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast & other; return *this_cast; }
+
59  simdjson_inline Child& operator^=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast ^ other; return *this_cast; }
+
60  };
+
61 
+
62  // Forward-declared so they can be used by splat and friends.
+
63  template<typename T>
+
64  struct simd8;
+
65 
+
66  template<typename T, typename Mask=simd8<bool>>
+
67  struct base8: base<simd8<T>> {
+
68  typedef uint32_t bitmask_t;
+
69  typedef uint64_t bitmask2_t;
+
70 
+
71  simdjson_inline base8() : base<simd8<T>>() {}
+
72  simdjson_inline base8(const __m512i _value) : base<simd8<T>>(_value) {}
+
73 
+
74  friend simdjson_really_inline uint64_t operator==(const simd8<T> lhs, const simd8<T> rhs) {
+
75  return _mm512_cmpeq_epi8_mask(lhs, rhs);
+
76  }
+
77 
+
78  static const int SIZE = sizeof(base<T>::value);
+
79 
+
80  template<int N=1>
+
81  simdjson_inline simd8<T> prev(const simd8<T> prev_chunk) const {
+
82 #if SIMDJSON_GCC8
+
83  // workaround for compilers unable to figure out that 16 - N is a constant (GCC 8)
+
84  constexpr int shift = 16 - N;
+
85  return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), shift);
+
86 #else
+
87  return _mm512_alignr_epi8(*this, _mm512_permutex2var_epi64(prev_chunk, _mm512_set_epi64(13, 12, 11, 10, 9, 8, 7, 6), *this), 16 - N);
+
88 #endif
+
89  }
+
90  };
+
91 
+
92  // SIMD byte mask type (returned by things like eq and gt)
+
93  template<>
+
94  struct simd8<bool>: base8<bool> {
+
95  static simdjson_inline simd8<bool> splat(bool _value) { return _mm512_set1_epi8(uint8_t(-(!!_value))); }
+
96 
+
97  simdjson_inline simd8<bool>() : base8() {}
+
98  simdjson_inline simd8<bool>(const __m512i _value) : base8<bool>(_value) {}
+
99  // Splat constructor
+
100  simdjson_inline simd8<bool>(bool _value) : base8<bool>(splat(_value)) {}
+
101  simdjson_inline bool any() const { return !!_mm512_test_epi8_mask (*this, *this); }
+
102  simdjson_inline simd8<bool> operator~() const { return *this ^ true; }
+
103  };
+
104 
+
105  template<typename T>
+
106  struct base8_numeric: base8<T> {
+
107  static simdjson_inline simd8<T> splat(T _value) { return _mm512_set1_epi8(_value); }
+
108  static simdjson_inline simd8<T> zero() { return _mm512_setzero_si512(); }
+
109  static simdjson_inline simd8<T> load(const T values[64]) {
+
110  return _mm512_loadu_si512(reinterpret_cast<const __m512i *>(values));
+
111  }
+
112  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
113  static simdjson_inline simd8<T> repeat_16(
+
114  T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7,
+
115  T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15
+
116  ) {
+
117  return simd8<T>(
+
118  v0, v1, v2, v3, v4, v5, v6, v7,
+
119  v8, v9, v10,v11,v12,v13,v14,v15,
+
120  v0, v1, v2, v3, v4, v5, v6, v7,
+
121  v8, v9, v10,v11,v12,v13,v14,v15,
+
122  v0, v1, v2, v3, v4, v5, v6, v7,
+
123  v8, v9, v10,v11,v12,v13,v14,v15,
+
124  v0, v1, v2, v3, v4, v5, v6, v7,
+
125  v8, v9, v10,v11,v12,v13,v14,v15
+
126  );
+
127  }
+
128 
+
129  simdjson_inline base8_numeric() : base8<T>() {}
+
130  simdjson_inline base8_numeric(const __m512i _value) : base8<T>(_value) {}
+
131 
+
132  // Store to array
+
133  simdjson_inline void store(T dst[64]) const { return _mm512_storeu_si512(reinterpret_cast<__m512i *>(dst), *this); }
+
134 
+
135  // Addition/subtraction are the same for signed and unsigned
+
136  simdjson_inline simd8<T> operator+(const simd8<T> other) const { return _mm512_add_epi8(*this, other); }
+
137  simdjson_inline simd8<T> operator-(const simd8<T> other) const { return _mm512_sub_epi8(*this, other); }
+
138  simdjson_inline simd8<T>& operator+=(const simd8<T> other) { *this = *this + other; return *static_cast<simd8<T>*>(this); }
+
139  simdjson_inline simd8<T>& operator-=(const simd8<T> other) { *this = *this - other; return *static_cast<simd8<T>*>(this); }
+
140 
+
141  // Override to distinguish from bool version
+
142  simdjson_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
+
143 
+
144  // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values)
+
145  template<typename L>
+
146  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
+
147  return _mm512_shuffle_epi8(lookup_table, *this);
+
148  }
+
149 
+
150  // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted as a bitset).
+
151  // Passing a 0 value for mask would be equivalent to writing out every byte to output.
+
152  // Only the first 32 - count_ones(mask) bytes of the result are significant but 32 bytes
+
153  // get written.
+
154  // Design consideration: it seems like a function with the
+
155  // signature simd8<L> compress(uint32_t mask) would be
+
156  // sensible, but the AVX ISA makes this kind of approach difficult.
+
157  template<typename L>
+
158  simdjson_inline void compress(uint64_t mask, L * output) const {
+
159  _mm512_mask_compressstoreu_epi8 (output,~mask,*this);
+
160  }
+
161 
+
162  template<typename L>
+
163  simdjson_inline simd8<L> lookup_16(
+
164  L replace0, L replace1, L replace2, L replace3,
+
165  L replace4, L replace5, L replace6, L replace7,
+
166  L replace8, L replace9, L replace10, L replace11,
+
167  L replace12, L replace13, L replace14, L replace15) const {
+
168  return lookup_16(simd8<L>::repeat_16(
+
169  replace0, replace1, replace2, replace3,
+
170  replace4, replace5, replace6, replace7,
+
171  replace8, replace9, replace10, replace11,
+
172  replace12, replace13, replace14, replace15
+
173  ));
+
174  }
+
175  };
+
176 
+
177  // Signed bytes
+
178  template<>
+
179  struct simd8<int8_t> : base8_numeric<int8_t> {
+
180  simdjson_inline simd8() : base8_numeric<int8_t>() {}
+
181  simdjson_inline simd8(const __m512i _value) : base8_numeric<int8_t>(_value) {}
+
182  // Splat constructor
+
183  simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
+
184  // Array constructor
+
185  simdjson_inline simd8(const int8_t values[64]) : simd8(load(values)) {}
+
186  // Member-by-member initialization
+
187  simdjson_inline simd8(
+
188  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
189  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15,
+
190  int8_t v16, int8_t v17, int8_t v18, int8_t v19, int8_t v20, int8_t v21, int8_t v22, int8_t v23,
+
191  int8_t v24, int8_t v25, int8_t v26, int8_t v27, int8_t v28, int8_t v29, int8_t v30, int8_t v31,
+
192  int8_t v32, int8_t v33, int8_t v34, int8_t v35, int8_t v36, int8_t v37, int8_t v38, int8_t v39,
+
193  int8_t v40, int8_t v41, int8_t v42, int8_t v43, int8_t v44, int8_t v45, int8_t v46, int8_t v47,
+
194  int8_t v48, int8_t v49, int8_t v50, int8_t v51, int8_t v52, int8_t v53, int8_t v54, int8_t v55,
+
195  int8_t v56, int8_t v57, int8_t v58, int8_t v59, int8_t v60, int8_t v61, int8_t v62, int8_t v63
+
196  ) : simd8(_mm512_set_epi8(
+
197  v63, v62, v61, v60, v59, v58, v57, v56,
+
198  v55, v54, v53, v52, v51, v50, v49, v48,
+
199  v47, v46, v45, v44, v43, v42, v41, v40,
+
200  v39, v38, v37, v36, v35, v34, v33, v32,
+
201  v31, v30, v29, v28, v27, v26, v25, v24,
+
202  v23, v22, v21, v20, v19, v18, v17, v16,
+
203  v15, v14, v13, v12, v11, v10, v9, v8,
+
204  v7, v6, v5, v4, v3, v2, v1, v0
+
205  )) {}
+
206 
+
207  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
208  simdjson_inline static simd8<int8_t> repeat_16(
+
209  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
+
210  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
+
211  ) {
+
212  return simd8<int8_t>(
+
213  v0, v1, v2, v3, v4, v5, v6, v7,
+
214  v8, v9, v10,v11,v12,v13,v14,v15,
+
215  v0, v1, v2, v3, v4, v5, v6, v7,
+
216  v8, v9, v10,v11,v12,v13,v14,v15,
+
217  v0, v1, v2, v3, v4, v5, v6, v7,
+
218  v8, v9, v10,v11,v12,v13,v14,v15,
+
219  v0, v1, v2, v3, v4, v5, v6, v7,
+
220  v8, v9, v10,v11,v12,v13,v14,v15
+
221  );
+
222  }
+
223 
+
224  // Order-sensitive comparisons
+
225  simdjson_inline simd8<int8_t> max_val(const simd8<int8_t> other) const { return _mm512_max_epi8(*this, other); }
+
226  simdjson_inline simd8<int8_t> min_val(const simd8<int8_t> other) const { return _mm512_min_epi8(*this, other); }
+
227 
+
228  simdjson_inline simd8<bool> operator>(const simd8<int8_t> other) const { return _mm512_maskz_abs_epi8(_mm512_cmpgt_epi8_mask(*this, other),_mm512_set1_epi8(uint8_t(0x80))); }
+
229  simdjson_inline simd8<bool> operator<(const simd8<int8_t> other) const { return _mm512_maskz_abs_epi8(_mm512_cmpgt_epi8_mask(other, *this),_mm512_set1_epi8(uint8_t(0x80))); }
+
230  };
+
231 
+
232  // Unsigned bytes
+
233  template<>
+
234  struct simd8<uint8_t>: base8_numeric<uint8_t> {
+
235  simdjson_inline simd8() : base8_numeric<uint8_t>() {}
+
236  simdjson_inline simd8(const __m512i _value) : base8_numeric<uint8_t>(_value) {}
+
237  // Splat constructor
+
238  simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
+
239  // Array constructor
+
240  simdjson_inline simd8(const uint8_t values[64]) : simd8(load(values)) {}
+
241  // Member-by-member initialization
+
242  simdjson_inline simd8(
+
243  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
244  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15,
+
245  uint8_t v16, uint8_t v17, uint8_t v18, uint8_t v19, uint8_t v20, uint8_t v21, uint8_t v22, uint8_t v23,
+
246  uint8_t v24, uint8_t v25, uint8_t v26, uint8_t v27, uint8_t v28, uint8_t v29, uint8_t v30, uint8_t v31,
+
247  uint8_t v32, uint8_t v33, uint8_t v34, uint8_t v35, uint8_t v36, uint8_t v37, uint8_t v38, uint8_t v39,
+
248  uint8_t v40, uint8_t v41, uint8_t v42, uint8_t v43, uint8_t v44, uint8_t v45, uint8_t v46, uint8_t v47,
+
249  uint8_t v48, uint8_t v49, uint8_t v50, uint8_t v51, uint8_t v52, uint8_t v53, uint8_t v54, uint8_t v55,
+
250  uint8_t v56, uint8_t v57, uint8_t v58, uint8_t v59, uint8_t v60, uint8_t v61, uint8_t v62, uint8_t v63
+
251  ) : simd8(_mm512_set_epi8(
+
252  v63, v62, v61, v60, v59, v58, v57, v56,
+
253  v55, v54, v53, v52, v51, v50, v49, v48,
+
254  v47, v46, v45, v44, v43, v42, v41, v40,
+
255  v39, v38, v37, v36, v35, v34, v33, v32,
+
256  v31, v30, v29, v28, v27, v26, v25, v24,
+
257  v23, v22, v21, v20, v19, v18, v17, v16,
+
258  v15, v14, v13, v12, v11, v10, v9, v8,
+
259  v7, v6, v5, v4, v3, v2, v1, v0
+
260  )) {}
+
261 
+
262  // Repeat 16 values as many times as necessary (usually for lookup tables)
+
263  simdjson_inline static simd8<uint8_t> repeat_16(
+
264  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
+
265  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
+
266  ) {
+
267  return simd8<uint8_t>(
+
268  v0, v1, v2, v3, v4, v5, v6, v7,
+
269  v8, v9, v10,v11,v12,v13,v14,v15,
+
270  v0, v1, v2, v3, v4, v5, v6, v7,
+
271  v8, v9, v10,v11,v12,v13,v14,v15,
+
272  v0, v1, v2, v3, v4, v5, v6, v7,
+
273  v8, v9, v10,v11,v12,v13,v14,v15,
+
274  v0, v1, v2, v3, v4, v5, v6, v7,
+
275  v8, v9, v10,v11,v12,v13,v14,v15
+
276  );
+
277  }
+
278 
+
279  // Saturated math
+
280  simdjson_inline simd8<uint8_t> saturating_add(const simd8<uint8_t> other) const { return _mm512_adds_epu8(*this, other); }
+
281  simdjson_inline simd8<uint8_t> saturating_sub(const simd8<uint8_t> other) const { return _mm512_subs_epu8(*this, other); }
+
282 
+
283  // Order-specific operations
+
284  simdjson_inline simd8<uint8_t> max_val(const simd8<uint8_t> other) const { return _mm512_max_epu8(*this, other); }
+
285  simdjson_inline simd8<uint8_t> min_val(const simd8<uint8_t> other) const { return _mm512_min_epu8(other, *this); }
+
286  // Same as >, but only guarantees true is nonzero (< guarantees true = -1)
+
287  simdjson_inline simd8<uint8_t> gt_bits(const simd8<uint8_t> other) const { return this->saturating_sub(other); }
+
288  // Same as <, but only guarantees true is nonzero (< guarantees true = -1)
+
289  simdjson_inline simd8<uint8_t> lt_bits(const simd8<uint8_t> other) const { return other.saturating_sub(*this); }
+
290  simdjson_inline uint64_t operator<=(const simd8<uint8_t> other) const { return other.max_val(*this) == other; }
+
291  simdjson_inline uint64_t operator>=(const simd8<uint8_t> other) const { return other.min_val(*this) == other; }
+
292  simdjson_inline simd8<bool> operator>(const simd8<uint8_t> other) const { return this->gt_bits(other).any_bits_set(); }
+
293  simdjson_inline simd8<bool> operator<(const simd8<uint8_t> other) const { return this->lt_bits(other).any_bits_set(); }
+
294 
+
295  // Bit-specific operations
+
296  simdjson_inline simd8<bool> bits_not_set() const { return _mm512_mask_blend_epi8(*this == uint8_t(0), _mm512_set1_epi8(0), _mm512_set1_epi8(-1)); }
+
297  simdjson_inline simd8<bool> bits_not_set(simd8<uint8_t> bits) const { return (*this & bits).bits_not_set(); }
+
298  simdjson_inline simd8<bool> any_bits_set() const { return ~this->bits_not_set(); }
+
299  simdjson_inline simd8<bool> any_bits_set(simd8<uint8_t> bits) const { return ~this->bits_not_set(bits); }
+
300 
+
301  simdjson_inline bool is_ascii() const { return _mm512_movepi8_mask(*this) == 0; }
+
302  simdjson_inline bool bits_not_set_anywhere() const {
+
303  return !_mm512_test_epi8_mask(*this, *this);
+
304  }
+
305  simdjson_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); }
+
306  simdjson_inline bool bits_not_set_anywhere(simd8<uint8_t> bits) const { return !_mm512_test_epi8_mask(*this, bits); }
+
307  simdjson_inline bool any_bits_set_anywhere(simd8<uint8_t> bits) const { return !bits_not_set_anywhere(bits); }
+
308  template<int N>
+
309  simdjson_inline simd8<uint8_t> shr() const { return simd8<uint8_t>(_mm512_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); }
+
310  template<int N>
+
311  simdjson_inline simd8<uint8_t> shl() const { return simd8<uint8_t>(_mm512_slli_epi16(*this, N)) & uint8_t(0xFFu << N); }
+
312  // Get one of the bits and make a bitmask out of it.
+
313  // e.g. value.get_bit<7>() gets the high bit
+
314  template<int N>
+
315  simdjson_inline uint64_t get_bit() const { return _mm512_movepi8_mask(_mm512_slli_epi16(*this, 7-N)); }
+
316  };
+
317 
+
318  template<typename T>
+
319  struct simd8x64 {
+
320  static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
+
321  static_assert(NUM_CHUNKS == 1, "Icelake kernel should use one register per 64-byte block.");
+
322  const simd8<T> chunks[NUM_CHUNKS];
+
323 
+
324  simd8x64(const simd8x64<T>& o) = delete; // no copy allowed
+
325  simd8x64<T>& operator=(const simd8<T>& other) = delete; // no assignment allowed
+
326  simd8x64() = delete; // no default constructor allowed
+
327 
+
328  simdjson_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1) : chunks{chunk0, chunk1} {}
+
329  simdjson_inline simd8x64(const simd8<T> chunk0) : chunks{chunk0} {}
+
330  simdjson_inline simd8x64(const T ptr[64]) : chunks{simd8<T>::load(ptr)} {}
+
331 
+
332  simdjson_inline uint64_t compress(uint64_t mask, T * output) const {
+
333  this->chunks[0].compress(mask, output);
+
334  return 64 - count_ones(mask);
+
335  }
+
336 
+
337  simdjson_inline void store(T ptr[64]) const {
+
338  this->chunks[0].store(ptr+sizeof(simd8<T>)*0);
+
339  }
+
340 
+
341  simdjson_inline simd8<T> reduce_or() const {
+
342  return this->chunks[0];
+
343  }
+
344 
+
345  simdjson_inline simd8x64<T> bit_or(const T m) const {
+
346  const simd8<T> mask = simd8<T>::splat(m);
+
347  return simd8x64<T>(
+
348  this->chunks[0] | mask
+
349  );
+
350  }
+
351 
+
352  simdjson_inline uint64_t eq(const T m) const {
+
353  const simd8<T> mask = simd8<T>::splat(m);
+
354  return this->chunks[0] == mask;
+
355  }
+
356 
+
357  simdjson_inline uint64_t eq(const simd8x64<uint8_t> &other) const {
+
358  return this->chunks[0] == other.chunks[0];
+
359  }
+
360 
+
361  simdjson_inline uint64_t lteq(const T m) const {
+
362  const simd8<T> mask = simd8<T>::splat(m);
+
363  return this->chunks[0] <= mask;
+
364  }
+
365  }; // struct simd8x64<T>
+
366 
+
367 } // namespace simd
+
368 
+
369 } // unnamed namespace
+
370 } // namespace SIMDJSON_IMPLEMENTATION
+
371 } // namespace simdjson
+
372 
+
373 #endif // SIMDJSON_ICELAKE_SIMD_H
+
simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/icelake_2stringparsing_8h_source.html b/icelake_2stringparsing_8h_source.html new file mode 100644 index 000000000..358f8162d --- /dev/null +++ b/icelake_2stringparsing_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: include/simdjson/icelake/stringparsing.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
stringparsing.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_STRINGPARSING_H
+
2 #define SIMDJSON_ICELAKE_STRINGPARSING_H
+
3 
+
4 #include "simdjson/base.h"
+
5 #include "simdjson/icelake/simd.h"
+
6 #include "simdjson/icelake/bitmanipulation.h"
+
7 
+
8 namespace simdjson {
+
9 namespace SIMDJSON_IMPLEMENTATION {
+
10 namespace {
+
11 
+
12 using namespace simd;
+
13 
+
14 // Holds backslashes and quotes locations.
+
15 struct backslash_and_quote {
+
16 public:
+
17  static constexpr uint32_t BYTES_PROCESSED = 32;
+
18  simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
+
19 
+
20  simdjson_inline bool has_quote_first() { return ((bs_bits - 1) & quote_bits) != 0; }
+
21  simdjson_inline bool has_backslash() { return ((quote_bits - 1) & bs_bits) != 0; }
+
22  simdjson_inline int quote_index() { return trailing_zeroes(quote_bits); }
+
23  simdjson_inline int backslash_index() { return trailing_zeroes(bs_bits); }
+
24 
+
25  uint64_t bs_bits;
+
26  uint64_t quote_bits;
+
27 }; // struct backslash_and_quote
+
28 
+
29 simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
+
30  // this can read up to 15 bytes beyond the buffer size, but we require
+
31  // SIMDJSON_PADDING of padding
+
32  static_assert(SIMDJSON_PADDING >= (BYTES_PROCESSED - 1), "backslash and quote finder must process fewer than SIMDJSON_PADDING bytes");
+
33  simd8<uint8_t> v(src);
+
34  // store to dest unconditionally - we can overwrite the bits we don't like later
+
35  v.store(dst);
+
36  return {
+
37  static_cast<uint64_t>(v == '\\'), // bs_bits
+
38  static_cast<uint64_t>(v == '"'), // quote_bits
+
39  };
+
40 }
+
41 
+
42 } // unnamed namespace
+
43 } // namespace SIMDJSON_IMPLEMENTATION
+
44 } // namespace simdjson
+
45 
+
46 #endif // SIMDJSON_ICELAKE_STRINGPARSING_H
+
We want to support argument-dependent lookup (ADL).
+
constexpr size_t SIMDJSON_PADDING
The amount of padding needed in a buffer to parse JSON.
Definition: common_defs.h:45
+
+
+ + + + diff --git a/icelake_8h_source.html b/icelake_8h_source.html new file mode 100644 index 000000000..0b2d8573b --- /dev/null +++ b/icelake_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: include/simdjson/icelake.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
icelake.h
+
+
+
1 #ifndef SIMDJSON_ICELAKE_H
+
2 #define SIMDJSON_ICELAKE_H
+
3 
+ +
5 
+
6 #if SIMDJSON_IMPLEMENTATION_ICELAKE
+
7 
+
8 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE
+
9 #define SIMDJSON_TARGET_ICELAKE
+
10 #define SIMDJSON_UNTARGET_ICELAKE
+
11 #else
+
12 #define SIMDJSON_TARGET_ICELAKE SIMDJSON_TARGET_REGION("avx512f,avx512dq,avx512cd,avx512bw,avx512vbmi,avx512vbmi2,avx512vl,avx2,bmi,pclmul,lzcnt")
+
13 #define SIMDJSON_UNTARGET_ICELAKE SIMDJSON_UNTARGET_REGION
+
14 #endif
+
15 
+
16 namespace simdjson {
+
20 namespace icelake {
+
21 } // namespace icelake
+
22 } // namespace simdjson
+
23 
+
24 //
+
25 // These two need to be included outside SIMDJSON_TARGET_ICELAKE
+
26 //
+
27 #include "simdjson/icelake/implementation.h"
+
28 #include "simdjson/icelake/intrinsics.h"
+
29 
+
30 //
+
31 // The rest need to be inside the region
+
32 //
+
33 #include "simdjson/icelake/begin.h"
+
34 
+
35 // Declarations
+
36 #include "simdjson/generic/dom_parser_implementation.h"
+
37 #include "simdjson/icelake/bitmanipulation.h"
+
38 #include "simdjson/icelake/bitmask.h"
+
39 #include "simdjson/icelake/simd.h"
+
40 #include "simdjson/generic/jsoncharutils.h"
+
41 #include "simdjson/generic/atomparsing.h"
+
42 #include "simdjson/icelake/stringparsing.h"
+
43 #include "simdjson/icelake/numberparsing.h"
+
44 #include "simdjson/icelake/end.h"
+
45 
+
46 #endif // SIMDJSON_IMPLEMENTATION_ICELAKE
+
47 #endif // SIMDJSON_ICELAKE_H
+
Includes common stuff needed for implementations.
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/implementation-base_8h.html b/implementation-base_8h.html new file mode 100644 index 000000000..4c8bd7f1e --- /dev/null +++ b/implementation-base_8h.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: include/simdjson/implementation-base.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation-base.h File Reference
+
+
+ +

Includes common stuff needed for implementations. +More...

+ +

Go to the source code of this file.

+

Detailed Description

+

Includes common stuff needed for implementations.

+ +

Definition in file implementation-base.h.

+
+
+ + + + diff --git a/implementation-base_8h_source.html b/implementation-base_8h_source.html new file mode 100644 index 000000000..3f05468d1 --- /dev/null +++ b/implementation-base_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +simdjson: include/simdjson/implementation-base.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation-base.h
+
+
+Go to the documentation of this file.
1 #ifndef SIMDJSON_IMPLEMENTATION_BASE_H
+
2 #define SIMDJSON_IMPLEMENTATION_BASE_H
+
3 
+
10 #include "simdjson/base.h"
+
11 #include "simdjson/implementation.h"
+
12 
+
13 // Implementation-internal files (must be included before the implementations themselves, to keep
+
14 // amalgamation working--otherwise, the first time a file is included, it might be put inside the
+
15 // #ifdef SIMDJSON_IMPLEMENTATION_ARM64/FALLBACK/etc., which means the other implementations can't
+
16 // compile unless that implementation is turned on).
+
17 #include "simdjson/internal/isadetection.h"
+
18 #include "simdjson/internal/jsoncharutils_tables.h"
+
19 #include "simdjson/internal/numberparsing_tables.h"
+
20 #include "simdjson/internal/simdprune_tables.h"
+
21 
+
22 #endif // SIMDJSON_IMPLEMENTATION_BASE_H
+
+
+ + + + diff --git a/implementation_8h_source.html b/implementation_8h_source.html new file mode 100644 index 000000000..174e161b3 --- /dev/null +++ b/implementation_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + +simdjson: include/simdjson/implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation.h
+
+
+
1 #ifndef SIMDJSON_IMPLEMENTATION_H
+
2 #define SIMDJSON_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/internal/dom_parser_implementation.h"
+
6 #include "simdjson/internal/isadetection.h"
+
7 #include <string>
+
8 #include <atomic>
+
9 #include <vector>
+
10 
+
11 namespace simdjson {
+
12 
+
20 simdjson_warn_unused bool validate_utf8(const char * buf, size_t len) noexcept;
+
27 simdjson_inline simdjson_warn_unused bool validate_utf8(const std::string_view sv) noexcept {
+
28  return validate_utf8(sv.data(), sv.size());
+
29 }
+
30 
+
37 simdjson_inline simdjson_warn_unused bool validate_utf8(const std::string& s) noexcept {
+
38  return validate_utf8(s.data(), s.size());
+
39 }
+
40 
+
41 namespace dom {
+
42  class document;
+
43 } // namespace dom
+
44 
+ +
52 public:
+
53 
+
62  virtual const std::string &name() const { return _name; }
+
63 
+
72  virtual const std::string &description() const { return _description; }
+
73 
+ +
82 
+
90  virtual uint32_t required_instruction_sets() const { return _required_instruction_sets; }
+
91 
+
103  virtual error_code create_dom_parser_implementation(
+
104  size_t capacity,
+
105  size_t max_depth,
+
106  std::unique_ptr<internal::dom_parser_implementation> &dst
+
107  ) const noexcept = 0;
+
108 
+
122  simdjson_warn_unused virtual error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept = 0;
+
123 
+
124 
+
134  simdjson_warn_unused virtual bool validate_utf8(const char *buf, size_t len) const noexcept = 0;
+
135 
+
136 protected:
+
138  simdjson_inline implementation(
+
139  std::string_view name,
+
140  std::string_view description,
+
141  uint32_t required_instruction_sets
+
142  ) :
+
143  _name(name),
+
144  _description(description),
+
145  _required_instruction_sets(required_instruction_sets)
+
146  {
+
147  }
+
148  virtual ~implementation()=default;
+
149 
+
150 private:
+
154  const std::string _name;
+
155 
+
159  const std::string _description;
+
160 
+
164  const uint32_t _required_instruction_sets;
+
165 };
+
166 
+
168 namespace internal {
+
169 
+
173 class available_implementation_list {
+
174 public:
+
176  simdjson_inline available_implementation_list() {}
+
178  size_t size() const noexcept;
+
180  const implementation * const *begin() const noexcept;
+
182  const implementation * const *end() const noexcept;
+
183 
+
197  const implementation * operator[](const std::string_view &name) const noexcept {
+
198  for (const implementation * impl : *this) {
+
199  if (impl->name() == name) { return impl; }
+
200  }
+
201  return nullptr;
+
202  }
+
203 
+
216  const implementation *detect_best_supported() const noexcept;
+
217 };
+
218 
+
219 template<typename T>
+
220 class atomic_ptr {
+
221 public:
+
222  atomic_ptr(T *_ptr) : ptr{_ptr} {}
+
223 
+
224  operator const T*() const { return ptr.load(); }
+
225  const T& operator*() const { return *ptr; }
+
226  const T* operator->() const { return ptr.load(); }
+
227 
+
228  operator T*() { return ptr.load(); }
+
229  T& operator*() { return *ptr; }
+
230  T* operator->() { return ptr.load(); }
+
231  atomic_ptr& operator=(T *_ptr) { ptr = _ptr; return *this; }
+
232 
+
233 private:
+
234  std::atomic<T*> ptr;
+
235 };
+
236 
+
237 } // namespace internal
+
238 
+
242 extern SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list& get_available_implementations();
+
243 
+
249 extern SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr<const implementation>& get_active_implementation();
+
250 
+
251 } // namespace simdjson
+
252 
+
253 #endif // SIMDJSON_IMPLEMENTATION_H
+
An implementation of simdjson for a particular CPU architecture.
+
virtual const std::string & name() const
The name of this implementation.
+
virtual const std::string & description() const
The description of this implementation.
+
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
+
bool supported_by_runtime_system() const
The instruction sets this implementation is compiled against and the current CPU match.
+
We want to support argument-dependent lookup (ADL).
+
simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) noexcept
Validate the UTF-8 string.
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list & get_available_implementations()
The list of available implementations compiled into simdjson.
+
SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr< const implementation > & get_active_implementation()
The active implementation.
+
+
+ + + + diff --git a/implementation__simdjson__result__base-inl_8h_source.html b/implementation__simdjson__result__base-inl_8h_source.html new file mode 100644 index 000000000..2dbd74415 --- /dev/null +++ b/implementation__simdjson__result__base-inl_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + +simdjson: include/simdjson/generic/implementation_simdjson_result_base-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation_simdjson_result_base-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 
+
4 //
+
5 // internal::implementation_simdjson_result_base<T> inline implementation
+
6 //
+
7 
+
8 template<typename T>
+
9 simdjson_inline void implementation_simdjson_result_base<T>::tie(T &value, error_code &error) && noexcept {
+
10  error = this->second;
+
11  if (!error) {
+
12  value = std::forward<implementation_simdjson_result_base<T>>(*this).first;
+
13  }
+
14 }
+
15 
+
16 template<typename T>
+
17 simdjson_warn_unused simdjson_inline error_code implementation_simdjson_result_base<T>::get(T &value) && noexcept {
+
18  error_code error;
+
19  std::forward<implementation_simdjson_result_base<T>>(*this).tie(value, error);
+
20  return error;
+
21 }
+
22 
+
23 template<typename T>
+ +
25  return this->second;
+
26 }
+
27 
+
28 #if SIMDJSON_EXCEPTIONS
+
29 
+
30 template<typename T>
+
31 simdjson_inline T& implementation_simdjson_result_base<T>::value() & noexcept(false) {
+
32  if (error()) { throw simdjson_error(error()); }
+
33  return this->first;
+
34 }
+
35 
+
36 template<typename T>
+
37 simdjson_inline T&& implementation_simdjson_result_base<T>::value() && noexcept(false) {
+
38  return std::forward<implementation_simdjson_result_base<T>>(*this).take_value();
+
39 }
+
40 
+
41 template<typename T>
+
42 simdjson_inline T&& implementation_simdjson_result_base<T>::take_value() && noexcept(false) {
+
43  if (error()) { throw simdjson_error(error()); }
+
44  return std::forward<T>(this->first);
+
45 }
+
46 
+
47 template<typename T>
+
48 simdjson_inline implementation_simdjson_result_base<T>::operator T&&() && noexcept(false) {
+
49  return std::forward<implementation_simdjson_result_base<T>>(*this).take_value();
+
50 }
+
51 
+
52 #endif // SIMDJSON_EXCEPTIONS
+
53 
+
54 template<typename T>
+
55 simdjson_inline const T& implementation_simdjson_result_base<T>::value_unsafe() const& noexcept {
+
56  return this->first;
+
57 }
+
58 
+
59 template<typename T>
+
60 simdjson_inline T& implementation_simdjson_result_base<T>::value_unsafe() & noexcept {
+
61  return this->first;
+
62 }
+
63 
+
64 template<typename T>
+
65 simdjson_inline T&& implementation_simdjson_result_base<T>::value_unsafe() && noexcept {
+
66  return std::forward<T>(this->first);
+
67 }
+
68 
+
69 template<typename T>
+ +
71  : first{std::forward<T>(value)}, second{error} {}
+
72 template<typename T>
+ + +
75 template<typename T>
+ +
77  : implementation_simdjson_result_base(std::forward<T>(value), SUCCESS) {}
+
78 
+
79 } // namespace SIMDJSON_IMPLEMENTATION
+
80 } // namespace simdjson
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+ +
simdjson_inline implementation_simdjson_result_base() noexcept=default
Create a new empty result with error = UNINITIALIZED.
+ +
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
simdjson_inline const T & value_unsafe() const &noexcept
Get the result value.
+
simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
+
simdjson_inline void tie(T &value, error_code &error) &&noexcept
Move the value and the error to the provided variables.
+
simdjson_inline T && take_value() &&noexcept(false)
Take the result value (move it).
+
Exception thrown when an exception-supporting simdjson method is called.
Definition: error.h:72
+
+
+ + + + diff --git a/implementation__simdjson__result__base_8h_source.html b/implementation__simdjson__result__base_8h_source.html new file mode 100644 index 000000000..1a314dbe3 --- /dev/null +++ b/implementation__simdjson__result__base_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +simdjson: include/simdjson/generic/implementation_simdjson_result_base.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementation_simdjson_result_base.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 
+
4 // This is a near copy of include/error.h's implementation_simdjson_result_base, except it doesn't use std::pair
+
5 // so we can avoid inlining errors
+
6 // TODO reconcile these!
+
27 template<typename T>
+ +
29 
+
33  simdjson_inline implementation_simdjson_result_base() noexcept = default;
+
34 
+
38  simdjson_inline implementation_simdjson_result_base(error_code error) noexcept;
+
39 
+
43  simdjson_inline implementation_simdjson_result_base(T &&value) noexcept;
+
44 
+
48  simdjson_inline implementation_simdjson_result_base(T &&value, error_code error) noexcept;
+
49 
+
56  simdjson_inline void tie(T &value, error_code &error) && noexcept;
+
57 
+
63  simdjson_inline error_code get(T &value) && noexcept;
+
64 
+
68  simdjson_inline error_code error() const noexcept;
+
69 
+
70 #if SIMDJSON_EXCEPTIONS
+
71 
+
77  simdjson_inline T& value() & noexcept(false);
+
78 
+
84  simdjson_inline T&& value() && noexcept(false);
+
85 
+
91  simdjson_inline T&& take_value() && noexcept(false);
+
92 
+
98  simdjson_inline operator T&&() && noexcept(false);
+
99 
+
100 
+
101 #endif // SIMDJSON_EXCEPTIONS
+
102 
+
107  simdjson_inline const T& value_unsafe() const& noexcept;
+
112  simdjson_inline T& value_unsafe() & noexcept;
+
117  simdjson_inline T&& value_unsafe() && noexcept;
+
118 protected:
+
120  T first{};
+ +
122 }; // struct implementation_simdjson_result_base
+
123 
+
124 } // namespace SIMDJSON_IMPLEMENTATION
+
125 } // namespace simdjson
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+ +
simdjson_inline implementation_simdjson_result_base() noexcept=default
Create a new empty result with error = UNINITIALIZED.
+ + +
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
simdjson_inline const T & value_unsafe() const &noexcept
Get the result value.
+
simdjson_inline T && value() &&noexcept(false)
Take the result value (move it).
+
simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.
+
simdjson_inline void tie(T &value, error_code &error) &&noexcept
Move the value and the error to the provided variables.
+ +
simdjson_inline T && take_value() &&noexcept(false)
Take the result value (move it).
+
+
+ + + + diff --git a/implementations_8h_source.html b/implementations_8h_source.html new file mode 100644 index 000000000..56737eba1 --- /dev/null +++ b/implementations_8h_source.html @@ -0,0 +1,216 @@ + + + + + + + +simdjson: include/simdjson/implementations.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
implementations.h
+
+
+
1 #ifndef SIMDJSON_IMPLEMENTATIONS_H
+
2 #define SIMDJSON_IMPLEMENTATIONS_H
+
3 
+ +
5 
+
6 //
+
7 // First, figure out which implementations can be run. Doing it here makes it so we don't have to worry about the order
+
8 // in which we include them.
+
9 //
+
10 
+
11 #ifndef SIMDJSON_IMPLEMENTATION_ARM64
+
12 #define SIMDJSON_IMPLEMENTATION_ARM64 (SIMDJSON_IS_ARM64)
+
13 #endif
+
14 #define SIMDJSON_CAN_ALWAYS_RUN_ARM64 SIMDJSON_IMPLEMENTATION_ARM64 && SIMDJSON_IS_ARM64
+
15 
+
16 #ifdef __has_include
+
17 // How do we detect that a compiler supports vbmi2?
+
18 // For sure if the following header is found, we are ok?
+
19 #if __has_include(<avx512vbmi2intrin.h>)
+
20 #define SIMDJSON_COMPILER_SUPPORTS_VBMI2 1
+
21 #endif
+
22 #endif
+
23 
+
24 #ifdef _MSC_VER
+
25 #if _MSC_VER >= 1920
+
26 // Visual Studio 2019 and up support VBMI2 under x64 even if the header
+
27 // avx512vbmi2intrin.h is not found.
+
28 #define SIMDJSON_COMPILER_SUPPORTS_VBMI2 1
+
29 #endif
+
30 #endif
+
31 
+
32 // By default, we allow AVX512.
+
33 #ifndef SIMDJSON_AVX512_ALLOWED
+
34 #define SIMDJSON_AVX512_ALLOWED 1
+
35 #endif
+
36 
+
37 // Default Icelake to on if this is x86-64. Even if we're not compiled for it, it could be selected
+
38 // at runtime.
+
39 #ifndef SIMDJSON_IMPLEMENTATION_ICELAKE
+
40 #define SIMDJSON_IMPLEMENTATION_ICELAKE ((SIMDJSON_IS_X86_64) && (SIMDJSON_AVX512_ALLOWED) && (SIMDJSON_COMPILER_SUPPORTS_VBMI2))
+
41 #endif
+
42 
+
43 #ifdef _MSC_VER
+
44 // To see why (__BMI__) && (__PCLMUL__) && (__LZCNT__) are not part of this next line, see
+
45 // https://github.com/simdjson/simdjson/issues/1247
+
46 #define SIMDJSON_CAN_ALWAYS_RUN_ICELAKE ((SIMDJSON_IMPLEMENTATION_ICELAKE) && (__AVX2__) && (__AVX512F__) && (__AVX512DQ__) && (__AVX512CD__) && (__AVX512BW__) && (__AVX512VL__) && (__AVX512VBMI2__))
+
47 #else
+
48 #define SIMDJSON_CAN_ALWAYS_RUN_ICELAKE ((SIMDJSON_IMPLEMENTATION_ICELAKE) && (__AVX2__) && (__BMI__) && (__PCLMUL__) && (__LZCNT__) && (__AVX512F__) && (__AVX512DQ__) && (__AVX512CD__) && (__AVX512BW__) && (__AVX512VL__) && (__AVX512VBMI2__))
+
49 #endif
+
50 
+
51 // Default Haswell to on if this is x86-64. Even if we're not compiled for it, it could be selected
+
52 // at runtime.
+
53 #ifndef SIMDJSON_IMPLEMENTATION_HASWELL
+
54 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE
+
55 // if icelake is always available, never enable haswell.
+
56 #define SIMDJSON_IMPLEMENTATION_HASWELL 0
+
57 #else
+
58 #define SIMDJSON_IMPLEMENTATION_HASWELL SIMDJSON_IS_X86_64
+
59 #endif
+
60 #endif
+
61 #ifdef _MSC_VER
+
62 // To see why (__BMI__) && (__PCLMUL__) && (__LZCNT__) are not part of this next line, see
+
63 // https://github.com/simdjson/simdjson/issues/1247
+
64 #define SIMDJSON_CAN_ALWAYS_RUN_HASWELL ((SIMDJSON_IMPLEMENTATION_HASWELL) && (SIMDJSON_IS_X86_64) && (__AVX2__))
+
65 #else
+
66 #define SIMDJSON_CAN_ALWAYS_RUN_HASWELL ((SIMDJSON_IMPLEMENTATION_HASWELL) && (SIMDJSON_IS_X86_64) && (__AVX2__) && (__BMI__) && (__PCLMUL__) && (__LZCNT__))
+
67 #endif
+
68 
+
69 // Default Westmere to on if this is x86-64.
+
70 #ifndef SIMDJSON_IMPLEMENTATION_WESTMERE
+
71 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE || SIMDJSON_CAN_ALWAYS_RUN_HASWELL
+
72 // if icelake or haswell are always available, never enable westmere.
+
73 #define SIMDJSON_IMPLEMENTATION_WESTMERE 0
+
74 #else
+
75 #define SIMDJSON_IMPLEMENTATION_WESTMERE SIMDJSON_IS_X86_64
+
76 #endif
+
77 #endif
+
78 #define SIMDJSON_CAN_ALWAYS_RUN_WESTMERE (SIMDJSON_IMPLEMENTATION_WESTMERE && SIMDJSON_IS_X86_64 && __SSE4_2__ && __PCLMUL__)
+
79 
+
80 #ifndef SIMDJSON_IMPLEMENTATION_PPC64
+
81 #define SIMDJSON_IMPLEMENTATION_PPC64 (SIMDJSON_IS_PPC64)
+
82 #endif
+
83 #define SIMDJSON_CAN_ALWAYS_RUN_PPC64 SIMDJSON_IMPLEMENTATION_PPC64 && SIMDJSON_IS_PPC64
+
84 
+
85 // Default Fallback to on unless a builtin implementation has already been selected.
+
86 #ifndef SIMDJSON_IMPLEMENTATION_FALLBACK
+
87 #if SIMDJSON_CAN_ALWAYS_RUN_ARM64 || SIMDJSON_CAN_ALWAYS_RUN_ICELAKE || SIMDJSON_CAN_ALWAYS_RUN_HASWELL || SIMDJSON_CAN_ALWAYS_RUN_WESTMERE || SIMDJSON_CAN_ALWAYS_RUN_PPC64
+
88 // if anything at all except fallback can always run, then disable fallback.
+
89 #define SIMDJSON_IMPLEMENTATION_FALLBACK 0
+
90 #else
+
91 #define SIMDJSON_IMPLEMENTATION_FALLBACK 1
+
92 #endif
+
93 #endif
+
94 #define SIMDJSON_CAN_ALWAYS_RUN_FALLBACK SIMDJSON_IMPLEMENTATION_FALLBACK
+
95 
+
96 SIMDJSON_PUSH_DISABLE_WARNINGS
+
97 SIMDJSON_DISABLE_UNDESIRED_WARNINGS
+
98 
+
99 // Implementations
+
100 #include "simdjson/arm64.h"
+
101 #include "simdjson/fallback.h"
+
102 #include "simdjson/icelake.h"
+
103 #include "simdjson/haswell.h"
+
104 #include "simdjson/ppc64.h"
+
105 #include "simdjson/westmere.h"
+
106 
+
107 // Builtin implementation
+
108 #include "simdjson/builtin.h"
+
109 
+
110 SIMDJSON_POP_DISABLE_WARNINGS
+
111 
+
112 #endif // SIMDJSON_IMPLEMENTATIONS_H
+
Includes common stuff needed for implementations.
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 000000000..b176de1ba --- /dev/null +++ b/index.html @@ -0,0 +1,109 @@ + + + + + + + +simdjson: Main Page + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
simdjson Documentation
+
+
+

We take our documentation seriously. Please start reading the documentation before you attempt to use simdjson. We hope you will enjoy reading us.

+ +
+
+
+ + + + diff --git a/internal_2dom__parser__implementation_8h_source.html b/internal_2dom__parser__implementation_8h_source.html new file mode 100644 index 000000000..c2e44ee3f --- /dev/null +++ b/internal_2dom__parser__implementation_8h_source.html @@ -0,0 +1,207 @@ + + + + + + + +simdjson: include/simdjson/internal/dom_parser_implementation.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dom_parser_implementation.h
+
+
+
1 #ifndef SIMDJSON_INTERNAL_DOM_PARSER_IMPLEMENTATION_H
+
2 #define SIMDJSON_INTERNAL_DOM_PARSER_IMPLEMENTATION_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/error.h"
+
6 #include <memory>
+
7 
+
8 namespace simdjson {
+
9 
+
10 namespace dom {
+
11 class document;
+
12 } // namespace dom
+
13 
+
22 enum class stage1_mode { regular, streaming_partial, streaming_final};
+
23 
+
27 inline bool is_streaming(stage1_mode mode) {
+
28  // performance note: it is probably faster to check that mode is different
+
29  // from regular than checking that it is either streaming_partial or streaming_final.
+
30  return (mode != stage1_mode::regular);
+
31  // return (mode == stage1_mode::streaming_partial || mode == stage1_mode::streaming_final);
+
32 }
+
33 
+
34 
+
35 namespace internal {
+
36 
+
37 
+
44 class dom_parser_implementation {
+
45 public:
+
46 
+
60  simdjson_warn_unused virtual error_code parse(const uint8_t *buf, size_t len, dom::document &doc) noexcept = 0;
+
61 
+
76  simdjson_warn_unused virtual error_code stage1(const uint8_t *buf, size_t len, stage1_mode streaming) noexcept = 0;
+
77 
+
90  simdjson_warn_unused virtual error_code stage2(dom::document &doc) noexcept = 0;
+
91 
+
103  simdjson_warn_unused virtual error_code stage2_next(dom::document &doc) noexcept = 0;
+
104 
+
119  simdjson_warn_unused virtual uint8_t *parse_string(const uint8_t *src, uint8_t *dst) const noexcept = 0;
+
120 
+
133  virtual error_code set_capacity(size_t capacity) noexcept = 0;
+
134 
+
144  virtual error_code set_max_depth(size_t max_depth) noexcept = 0;
+
145 
+
149  virtual ~dom_parser_implementation() = default;
+
150 
+
152  uint32_t n_structural_indexes{0};
+
154  std::unique_ptr<uint32_t[]> structural_indexes{};
+
156  uint32_t next_structural_index{0};
+
157 
+
163  simdjson_inline size_t capacity() const noexcept;
+
164 
+
170  simdjson_inline size_t max_depth() const noexcept;
+
171 
+
180  simdjson_warn_unused inline error_code allocate(size_t capacity, size_t max_depth) noexcept;
+
181 
+
182 
+
183 protected:
+
189  size_t _capacity{0};
+
190 
+
196  size_t _max_depth{0};
+
197 
+
198  // Declaring these so that subclasses can use them to implement their constructors.
+
199  simdjson_inline dom_parser_implementation() noexcept;
+
200  simdjson_inline dom_parser_implementation(dom_parser_implementation &&other) noexcept;
+
201  simdjson_inline dom_parser_implementation &operator=(dom_parser_implementation &&other) noexcept;
+
202 
+
203  simdjson_inline dom_parser_implementation(const dom_parser_implementation &) noexcept = delete;
+
204  simdjson_inline dom_parser_implementation &operator=(const dom_parser_implementation &other) noexcept = delete;
+
205 }; // class dom_parser_implementation
+
206 
+
207 simdjson_inline dom_parser_implementation::dom_parser_implementation() noexcept = default;
+
208 simdjson_inline dom_parser_implementation::dom_parser_implementation(dom_parser_implementation &&other) noexcept = default;
+
209 simdjson_inline dom_parser_implementation &dom_parser_implementation::operator=(dom_parser_implementation &&other) noexcept = default;
+
210 
+
211 simdjson_inline size_t dom_parser_implementation::capacity() const noexcept {
+
212  return _capacity;
+
213 }
+
214 
+
215 simdjson_inline size_t dom_parser_implementation::max_depth() const noexcept {
+
216  return _max_depth;
+
217 }
+
218 
+
219 simdjson_warn_unused
+
220 inline error_code dom_parser_implementation::allocate(size_t capacity, size_t max_depth) noexcept {
+
221  if (this->max_depth() != max_depth) {
+
222  error_code err = set_max_depth(max_depth);
+
223  if (err) { return err; }
+
224  }
+
225  if (_capacity != capacity) {
+
226  error_code err = set_capacity(capacity);
+
227  if (err) { return err; }
+
228  }
+
229  return SUCCESS;
+
230 }
+
231 
+
232 } // namespace internal
+
233 } // namespace simdjson
+
234 
+
235 #endif // SIMDJSON_INTERNAL_DOM_PARSER_IMPLEMENTATION_H
+
We want to support argument-dependent lookup (ADL).
+
bool is_streaming(stage1_mode mode)
Returns true if mode == streaming_partial or mode == streaming_final.
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+
stage1_mode
This enum is used with the dom_parser_implementation::stage1 function.
+
+
+ + + + diff --git a/isadetection_8h_source.html b/isadetection_8h_source.html new file mode 100644 index 000000000..6cdee2cb6 --- /dev/null +++ b/isadetection_8h_source.html @@ -0,0 +1,334 @@ + + + + + + + +simdjson: include/simdjson/internal/isadetection.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
isadetection.h
+
+
+
1 /* From
+
2 https://github.com/endorno/pytorch/blob/master/torch/lib/TH/generic/simd/simd.h
+
3 Highly modified.
+
4 
+
5 Copyright (c) 2016- Facebook, Inc (Adam Paszke)
+
6 Copyright (c) 2014- Facebook, Inc (Soumith Chintala)
+
7 Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert)
+
8 Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu)
+
9 Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu)
+
10 Copyright (c) 2011-2013 NYU (Clement Farabet)
+
11 Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou,
+
12 Iain Melvin, Jason Weston) Copyright (c) 2006 Idiap Research Institute
+
13 (Samy Bengio) Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert,
+
14 Samy Bengio, Johnny Mariethoz)
+
15 
+
16 All rights reserved.
+
17 
+
18 Redistribution and use in source and binary forms, with or without
+
19 modification, are permitted provided that the following conditions are met:
+
20 
+
21 1. Redistributions of source code must retain the above copyright
+
22  notice, this list of conditions and the following disclaimer.
+
23 
+
24 2. Redistributions in binary form must reproduce the above copyright
+
25  notice, this list of conditions and the following disclaimer in the
+
26  documentation and/or other materials provided with the distribution.
+
27 
+
28 3. Neither the names of Facebook, Deepmind Technologies, NYU, NEC Laboratories
+
29 America and IDIAP Research Institute nor the names of its contributors may be
+
30  used to endorse or promote products derived from this software without
+
31  specific prior written permission.
+
32 
+
33 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+
34 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
35 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+
36 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+
37 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+
38 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+
39 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+
40 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+
41 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+
42 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+
43 POSSIBILITY OF SUCH DAMAGE.
+
44 */
+
45 
+
46 #ifndef SIMDJSON_INTERNAL_ISADETECTION_H
+
47 #define SIMDJSON_INTERNAL_ISADETECTION_H
+
48 
+
49 #include <cstdint>
+
50 #include <cstdlib>
+
51 #if defined(_MSC_VER)
+
52 #include <intrin.h>
+
53 #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID)
+
54 #include <cpuid.h>
+
55 #endif
+
56 
+
57 namespace simdjson {
+
58 namespace internal {
+
59 
+
60 
+
61 enum instruction_set {
+
62  DEFAULT = 0x0,
+
63  NEON = 0x1,
+
64  AVX2 = 0x4,
+
65  SSE42 = 0x8,
+
66  PCLMULQDQ = 0x10,
+
67  BMI1 = 0x20,
+
68  BMI2 = 0x40,
+
69  ALTIVEC = 0x80,
+
70  AVX512F = 0x100,
+
71  AVX512DQ = 0x200,
+
72  AVX512IFMA = 0x400,
+
73  AVX512PF = 0x800,
+
74  AVX512ER = 0x1000,
+
75  AVX512CD = 0x2000,
+
76  AVX512BW = 0x4000,
+
77  AVX512VL = 0x8000,
+
78  AVX512VBMI2 = 0x10000
+
79 };
+
80 
+
81 #if defined(__PPC64__)
+
82 
+
83 static inline uint32_t detect_supported_architectures() {
+
84  return instruction_set::ALTIVEC;
+
85 }
+
86 
+
87 #elif defined(__arm__) || defined(__aarch64__) // incl. armel, armhf, arm64
+
88 
+
89 #if defined(__ARM_NEON)
+
90 
+
91 static inline uint32_t detect_supported_architectures() {
+
92  return instruction_set::NEON;
+
93 }
+
94 
+
95 #else // ARM without NEON
+
96 
+
97 static inline uint32_t detect_supported_architectures() {
+
98  return instruction_set::DEFAULT;
+
99 }
+
100 
+
101 #endif
+
102 
+
103 #elif defined(__x86_64__) || defined(_M_AMD64) // x64
+
104 
+
105 
+
106 namespace {
+
107 // Can be found on Intel ISA Reference for CPUID
+
108 constexpr uint32_t cpuid_avx2_bit = 1 << 5;
+
109 constexpr uint32_t cpuid_bmi1_bit = 1 << 3;
+
110 constexpr uint32_t cpuid_bmi2_bit = 1 << 8;
+
111 constexpr uint32_t cpuid_avx512f_bit = 1 << 16;
+
112 constexpr uint32_t cpuid_avx512dq_bit = 1 << 17;
+
113 constexpr uint32_t cpuid_avx512ifma_bit = 1 << 21;
+
114 constexpr uint32_t cpuid_avx512pf_bit = 1 << 26;
+
115 constexpr uint32_t cpuid_avx512er_bit = 1 << 27;
+
116 constexpr uint32_t cpuid_avx512cd_bit = 1 << 28;
+
117 constexpr uint32_t cpuid_avx512bw_bit = 1 << 30;
+
118 constexpr uint32_t cpuid_avx512vl_bit = 1U << 31;
+
119 constexpr uint32_t cpuid_avx512vbmi2_bit = 1 << 6;
+
120 constexpr uint32_t cpuid_sse42_bit = 1 << 20;
+
121 constexpr uint32_t cpuid_pclmulqdq_bit = 1 << 1;
+
122 }
+
123 
+
124 
+
125 
+
126 static inline void cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx,
+
127  uint32_t *edx) {
+
128 #if defined(_MSC_VER)
+
129  int cpu_info[4];
+
130  __cpuid(cpu_info, *eax);
+
131  *eax = cpu_info[0];
+
132  *ebx = cpu_info[1];
+
133  *ecx = cpu_info[2];
+
134  *edx = cpu_info[3];
+
135 #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID)
+
136  uint32_t level = *eax;
+
137  __get_cpuid(level, eax, ebx, ecx, edx);
+
138 #else
+
139  uint32_t a = *eax, b, c = *ecx, d;
+
140  asm volatile("cpuid\n\t" : "+a"(a), "=b"(b), "+c"(c), "=d"(d));
+
141  *eax = a;
+
142  *ebx = b;
+
143  *ecx = c;
+
144  *edx = d;
+
145 #endif
+
146 }
+
147 
+
148 static inline uint32_t detect_supported_architectures() {
+
149  uint32_t eax, ebx, ecx, edx;
+
150  uint32_t host_isa = 0x0;
+
151 
+
152  // ECX for EAX=0x7
+
153  eax = 0x7;
+
154  ecx = 0x0;
+
155  cpuid(&eax, &ebx, &ecx, &edx);
+
156  if (ebx & cpuid_avx2_bit) {
+
157  host_isa |= instruction_set::AVX2;
+
158  }
+
159  if (ebx & cpuid_bmi1_bit) {
+
160  host_isa |= instruction_set::BMI1;
+
161  }
+
162 
+
163  if (ebx & cpuid_bmi2_bit) {
+
164  host_isa |= instruction_set::BMI2;
+
165  }
+
166 
+
167  if (ebx & cpuid_avx512f_bit) {
+
168  host_isa |= instruction_set::AVX512F;
+
169  }
+
170 
+
171  if (ebx & cpuid_avx512dq_bit) {
+
172  host_isa |= instruction_set::AVX512DQ;
+
173  }
+
174 
+
175  if (ebx & cpuid_avx512ifma_bit) {
+
176  host_isa |= instruction_set::AVX512IFMA;
+
177  }
+
178 
+
179  if (ebx & cpuid_avx512pf_bit) {
+
180  host_isa |= instruction_set::AVX512PF;
+
181  }
+
182 
+
183  if (ebx & cpuid_avx512er_bit) {
+
184  host_isa |= instruction_set::AVX512ER;
+
185  }
+
186 
+
187  if (ebx & cpuid_avx512cd_bit) {
+
188  host_isa |= instruction_set::AVX512CD;
+
189  }
+
190 
+
191  if (ebx & cpuid_avx512bw_bit) {
+
192  host_isa |= instruction_set::AVX512BW;
+
193  }
+
194 
+
195  if (ebx & cpuid_avx512vl_bit) {
+
196  host_isa |= instruction_set::AVX512VL;
+
197  }
+
198 
+
199  if (ecx & cpuid_avx512vbmi2_bit) {
+
200  host_isa |= instruction_set::AVX512VBMI2;
+
201  }
+
202 
+
203  // EBX for EAX=0x1
+
204  eax = 0x1;
+
205  cpuid(&eax, &ebx, &ecx, &edx);
+
206 
+
207  if (ecx & cpuid_sse42_bit) {
+
208  host_isa |= instruction_set::SSE42;
+
209  }
+
210 
+
211  if (ecx & cpuid_pclmulqdq_bit) {
+
212  host_isa |= instruction_set::PCLMULQDQ;
+
213  }
+
214 
+
215  return host_isa;
+
216 }
+
217 #else // fallback
+
218 
+
219 
+
220 static inline uint32_t detect_supported_architectures() {
+
221  return instruction_set::DEFAULT;
+
222 }
+
223 
+
224 
+
225 #endif // end SIMD extension detection code
+
226 
+
227 } // namespace internal
+
228 } // namespace simdjson
+
229 
+
230 #endif // SIMDJSON_INTERNAL_ISADETECTION_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 000000000..103c32d79 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/json__iterator-inl_8h_source.html b/json__iterator-inl_8h_source.html new file mode 100644 index 000000000..9253546a5 --- /dev/null +++ b/json__iterator-inl_8h_source.html @@ -0,0 +1,498 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/json_iterator-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
json_iterator-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 simdjson_inline json_iterator::json_iterator(json_iterator &&other) noexcept
+
6  : token(std::forward<token_iterator>(other.token)),
+
7  parser{other.parser},
+
8  _string_buf_loc{other._string_buf_loc},
+
9  error{other.error},
+
10  _depth{other._depth},
+
11  _root{other._root},
+
12  _streaming{other._streaming}
+
13 {
+
14  other.parser = nullptr;
+
15 }
+
16 simdjson_inline json_iterator &json_iterator::operator=(json_iterator &&other) noexcept {
+
17  token = other.token;
+
18  parser = other.parser;
+
19  _string_buf_loc = other._string_buf_loc;
+
20  error = other.error;
+
21  _depth = other._depth;
+
22  _root = other._root;
+
23  _streaming = other._streaming;
+
24  other.parser = nullptr;
+
25  return *this;
+
26 }
+
27 
+
28 simdjson_inline json_iterator::json_iterator(const uint8_t *buf, ondemand::parser *_parser) noexcept
+
29  : token(buf, &_parser->implementation->structural_indexes[0]),
+
30  parser{_parser},
+
31  _string_buf_loc{parser->string_buf.get()},
+
32  _depth{1},
+
33  _root{parser->implementation->structural_indexes.get()},
+
34  _streaming{false}
+
35 
+
36 {
+
37  logger::log_headers();
+
38 #if SIMDJSON_CHECK_EOF
+
39  assert_more_tokens();
+
40 #endif
+
41 }
+
42 
+
43 inline void json_iterator::rewind() noexcept {
+
44  token.set_position( root_position() );
+
45  logger::log_headers(); // We start again
+
46  _string_buf_loc = parser->string_buf.get();
+
47  _depth = 1;
+
48 }
+
49 
+
50 inline bool json_iterator::balanced() const noexcept {
+
51  token_iterator ti(token);
+
52  int32_t count{0};
+
53  ti.set_position( root_position() );
+
54  while(ti.peek() <= peek_last()) {
+
55  switch (*ti.return_current_and_advance())
+
56  {
+
57  case '[': case '{':
+
58  count++;
+
59  break;
+
60  case ']': case '}':
+
61  count--;
+
62  break;
+
63  default:
+
64  break;
+
65  }
+
66  }
+
67  return count == 0;
+
68 }
+
69 
+
70 
+
71 // GCC 7 warns when the first line of this function is inlined away into oblivion due to the caller
+
72 // relating depth and parent_depth, which is a desired effect. The warning does not show up if the
+
73 // skip_child() function is not marked inline).
+
74 SIMDJSON_PUSH_DISABLE_WARNINGS
+
75 SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
+
76 simdjson_warn_unused simdjson_inline error_code json_iterator::skip_child(depth_t parent_depth) noexcept {
+
77  if (depth() <= parent_depth) { return SUCCESS; }
+
78  switch (*return_current_and_advance()) {
+
79  // TODO consider whether matching braces is a requirement: if non-matching braces indicates
+
80  // *missing* braces, then future lookups are not in the object/arrays they think they are,
+
81  // violating the rule "validate enough structure that the user can be confident they are
+
82  // looking at the right values."
+
83  // PERF TODO we can eliminate the switch here with a lookup of how much to add to depth
+
84 
+
85  // For the first open array/object in a value, we've already incremented depth, so keep it the same
+
86  // We never stop at colon, but if we did, it wouldn't affect depth
+
87  case '[': case '{': case ':':
+
88  logger::log_start_value(*this, "skip");
+
89  break;
+
90  // If there is a comma, we have just finished a value in an array/object, and need to get back in
+
91  case ',':
+
92  logger::log_value(*this, "skip");
+
93  break;
+
94  // ] or } means we just finished a value and need to jump out of the array/object
+
95  case ']': case '}':
+
96  logger::log_end_value(*this, "skip");
+
97  _depth--;
+
98  if (depth() <= parent_depth) { return SUCCESS; }
+
99 #if SIMDJSON_CHECK_EOF
+
100  // If there are no more tokens, the parent is incomplete.
+
101  if (at_end()) { return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "Missing [ or { at start"); }
+
102 #endif // SIMDJSON_CHECK_EOF
+
103  break;
+
104  case '"':
+
105  if(*peek() == ':') {
+
106  // We are at a key!!!
+
107  // This might happen if you just started an object and you skip it immediately.
+
108  // Performance note: it would be nice to get rid of this check as it is somewhat
+
109  // expensive.
+
110  // https://github.com/simdjson/simdjson/issues/1742
+
111  logger::log_value(*this, "key");
+
112  return_current_and_advance(); // eat up the ':'
+
113  break; // important!!!
+
114  }
+
115  simdjson_fallthrough;
+
116  // Anything else must be a scalar value
+
117  default:
+
118  // For the first scalar, we will have incremented depth already, so we decrement it here.
+
119  logger::log_value(*this, "skip");
+
120  _depth--;
+
121  if (depth() <= parent_depth) { return SUCCESS; }
+
122  break;
+
123  }
+
124 
+
125  // Now that we've considered the first value, we only increment/decrement for arrays/objects
+
126  while (position() < end_position()) {
+
127  switch (*return_current_and_advance()) {
+
128  case '[': case '{':
+
129  logger::log_start_value(*this, "skip");
+
130  _depth++;
+
131  break;
+
132  // TODO consider whether matching braces is a requirement: if non-matching braces indicates
+
133  // *missing* braces, then future lookups are not in the object/arrays they think they are,
+
134  // violating the rule "validate enough structure that the user can be confident they are
+
135  // looking at the right values."
+
136  // PERF TODO we can eliminate the switch here with a lookup of how much to add to depth
+
137  case ']': case '}':
+
138  logger::log_end_value(*this, "skip");
+
139  _depth--;
+
140  if (depth() <= parent_depth) { return SUCCESS; }
+
141  break;
+
142  default:
+
143  logger::log_value(*this, "skip", "");
+
144  break;
+
145  }
+
146  }
+
147 
+
148  return report_error(TAPE_ERROR, "not enough close braces");
+
149 }
+
150 
+
151 SIMDJSON_POP_DISABLE_WARNINGS
+
152 
+
153 simdjson_inline bool json_iterator::at_root() const noexcept {
+
154  return position() == root_position();
+
155 }
+
156 
+
157 simdjson_inline bool json_iterator::is_single_token() const noexcept {
+
158  return parser->implementation->n_structural_indexes == 1;
+
159 }
+
160 
+
161 simdjson_inline bool json_iterator::streaming() const noexcept {
+
162  return _streaming;
+
163 }
+
164 
+
165 simdjson_inline token_position json_iterator::root_position() const noexcept {
+
166  return _root;
+
167 }
+
168 
+
169 simdjson_inline void json_iterator::assert_at_document_depth() const noexcept {
+
170  SIMDJSON_ASSUME( _depth == 1 );
+
171 }
+
172 
+
173 simdjson_inline void json_iterator::assert_at_root() const noexcept {
+
174  SIMDJSON_ASSUME( _depth == 1 );
+
175 #ifndef SIMDJSON_CLANG_VISUAL_STUDIO
+
176  // Under Visual Studio, the next SIMDJSON_ASSUME fails with: the argument
+
177  // has side effects that will be discarded.
+
178  SIMDJSON_ASSUME( token.position() == _root );
+
179 #endif
+
180 }
+
181 
+
182 simdjson_inline void json_iterator::assert_more_tokens(uint32_t required_tokens) const noexcept {
+
183  assert_valid_position(token._position + required_tokens - 1);
+
184 }
+
185 
+
186 simdjson_inline void json_iterator::assert_valid_position(token_position position) const noexcept {
+
187 #ifndef SIMDJSON_CLANG_VISUAL_STUDIO
+
188  SIMDJSON_ASSUME( position >= &parser->implementation->structural_indexes[0] );
+
189  SIMDJSON_ASSUME( position < &parser->implementation->structural_indexes[parser->implementation->n_structural_indexes] );
+
190 #endif
+
191 }
+
192 
+
193 simdjson_inline bool json_iterator::at_end() const noexcept {
+
194  return position() == end_position();
+
195 }
+
196 simdjson_inline token_position json_iterator::end_position() const noexcept {
+
197  uint32_t n_structural_indexes{parser->implementation->n_structural_indexes};
+
198  return &parser->implementation->structural_indexes[n_structural_indexes];
+
199 }
+
200 
+
201 inline std::string json_iterator::to_string() const noexcept {
+
202  if( !is_alive() ) { return "dead json_iterator instance"; }
+
203  const char * current_structural = reinterpret_cast<const char *>(token.peek());
+
204  return std::string("json_iterator [ depth : ") + std::to_string(_depth)
+
205  + std::string(", structural : '") + std::string(current_structural,1)
+
206  + std::string("', offset : ") + std::to_string(token.current_offset())
+
207  + std::string("', error : ") + error_message(error)
+
208  + std::string(" ]");
+
209 }
+
210 
+
211 inline simdjson_result<const char *> json_iterator::current_location() noexcept {
+
212  if (!is_alive()) { // Unrecoverable error
+
213  if (!at_root()) {
+
214  return reinterpret_cast<const char *>(token.peek(-1));
+
215  } else {
+
216  return reinterpret_cast<const char *>(token.peek());
+
217  }
+
218  }
+
219  if (at_end()) {
+
220  return OUT_OF_BOUNDS;
+
221  }
+
222  return reinterpret_cast<const char *>(token.peek());
+
223 }
+
224 
+
225 simdjson_inline bool json_iterator::is_alive() const noexcept {
+
226  return parser;
+
227 }
+
228 
+
229 simdjson_inline void json_iterator::abandon() noexcept {
+
230  parser = nullptr;
+
231  _depth = 0;
+
232 }
+
233 
+
234 simdjson_inline const uint8_t *json_iterator::return_current_and_advance() noexcept {
+
235 #if SIMDJSON_CHECK_EOF
+
236  assert_more_tokens();
+
237 #endif // SIMDJSON_CHECK_EOF
+
238  return token.return_current_and_advance();
+
239 }
+
240 
+
241 simdjson_inline const uint8_t *json_iterator::unsafe_pointer() const noexcept {
+
242  // deliberately done without safety guard:
+
243  return token.peek(0);
+
244 }
+
245 
+
246 simdjson_inline const uint8_t *json_iterator::peek(int32_t delta) const noexcept {
+
247 #if SIMDJSON_CHECK_EOF
+
248  assert_more_tokens(delta+1);
+
249 #endif // SIMDJSON_CHECK_EOF
+
250  return token.peek(delta);
+
251 }
+
252 
+
253 simdjson_inline uint32_t json_iterator::peek_length(int32_t delta) const noexcept {
+
254 #if SIMDJSON_CHECK_EOF
+
255  assert_more_tokens(delta+1);
+
256 #endif // #if SIMDJSON_CHECK_EOF
+
257  return token.peek_length(delta);
+
258 }
+
259 
+
260 simdjson_inline const uint8_t *json_iterator::peek(token_position position) const noexcept {
+
261  // todo: currently we require end-of-string buffering, but the following
+
262  // assert_valid_position should be turned on if/when we lift that condition.
+
263  // assert_valid_position(position);
+
264  // This is almost surely related to SIMDJSON_CHECK_EOF but given that SIMDJSON_CHECK_EOF
+
265  // is ON by default, we have no choice but to disable it for real with a comment.
+
266  return token.peek(position);
+
267 }
+
268 
+
269 simdjson_inline uint32_t json_iterator::peek_length(token_position position) const noexcept {
+
270 #if SIMDJSON_CHECK_EOF
+
271  assert_valid_position(position);
+
272 #endif // SIMDJSON_CHECK_EOF
+
273  return token.peek_length(position);
+
274 }
+
275 
+
276 simdjson_inline token_position json_iterator::last_position() const noexcept {
+
277  // The following line fails under some compilers...
+
278  // SIMDJSON_ASSUME(parser->implementation->n_structural_indexes > 0);
+
279  // since it has side-effects.
+
280  uint32_t n_structural_indexes{parser->implementation->n_structural_indexes};
+
281  SIMDJSON_ASSUME(n_structural_indexes > 0);
+
282  return &parser->implementation->structural_indexes[n_structural_indexes - 1];
+
283 }
+
284 simdjson_inline const uint8_t *json_iterator::peek_last() const noexcept {
+
285  return token.peek(last_position());
+
286 }
+
287 
+
288 simdjson_inline void json_iterator::ascend_to(depth_t parent_depth) noexcept {
+
289  SIMDJSON_ASSUME(parent_depth >= 0 && parent_depth < INT32_MAX - 1);
+
290  SIMDJSON_ASSUME(_depth == parent_depth + 1);
+
291  _depth = parent_depth;
+
292 }
+
293 
+
294 simdjson_inline void json_iterator::descend_to(depth_t child_depth) noexcept {
+
295  SIMDJSON_ASSUME(child_depth >= 1 && child_depth < INT32_MAX);
+
296  SIMDJSON_ASSUME(_depth == child_depth - 1);
+
297  _depth = child_depth;
+
298 }
+
299 
+
300 simdjson_inline depth_t json_iterator::depth() const noexcept {
+
301  return _depth;
+
302 }
+
303 
+
304 simdjson_inline uint8_t *&json_iterator::string_buf_loc() noexcept {
+
305  return _string_buf_loc;
+
306 }
+
307 
+
308 simdjson_inline error_code json_iterator::report_error(error_code _error, const char *message) noexcept {
+
309  SIMDJSON_ASSUME(_error != SUCCESS && _error != UNINITIALIZED && _error != INCORRECT_TYPE && _error != NO_SUCH_FIELD);
+
310  logger::log_error(*this, message);
+
311  error = _error;
+
312  return error;
+
313 }
+
314 
+
315 simdjson_inline token_position json_iterator::position() const noexcept {
+
316  return token.position();
+
317 }
+
318 
+
319 simdjson_inline simdjson_result<std::string_view> json_iterator::unescape(raw_json_string in) noexcept {
+
320  return parser->unescape(in, _string_buf_loc);
+
321 }
+
322 
+
323 simdjson_inline void json_iterator::reenter_child(token_position position, depth_t child_depth) noexcept {
+
324  SIMDJSON_ASSUME(child_depth >= 1 && child_depth < INT32_MAX);
+
325  SIMDJSON_ASSUME(_depth == child_depth - 1);
+
326 #if SIMDJSON_DEVELOPMENT_CHECKS
+
327 #ifndef SIMDJSON_CLANG_VISUAL_STUDIO
+
328  SIMDJSON_ASSUME(size_t(child_depth) < parser->max_depth());
+
329  SIMDJSON_ASSUME(position >= parser->start_positions[child_depth]);
+
330 #endif
+
331 #endif
+
332  token.set_position(position);
+
333  _depth = child_depth;
+
334 }
+
335 
+
336 #if SIMDJSON_DEVELOPMENT_CHECKS
+
337 
+
338 simdjson_inline token_position json_iterator::start_position(depth_t depth) const noexcept {
+
339  SIMDJSON_ASSUME(size_t(depth) < parser->max_depth());
+
340  return size_t(depth) < parser->max_depth() ? parser->start_positions[depth] : 0;
+
341 }
+
342 
+
343 simdjson_inline void json_iterator::set_start_position(depth_t depth, token_position position) noexcept {
+
344  SIMDJSON_ASSUME(size_t(depth) < parser->max_depth());
+
345  if(size_t(depth) < parser->max_depth()) { parser->start_positions[depth] = position; }
+
346 }
+
347 
+
348 #endif
+
349 
+
350 
+
351 simdjson_inline error_code json_iterator::optional_error(error_code _error, const char *message) noexcept {
+
352  SIMDJSON_ASSUME(_error == INCORRECT_TYPE || _error == NO_SUCH_FIELD);
+
353  logger::log_error(*this, message);
+
354  return _error;
+
355 }
+
356 
+
357 template<int N>
+
358 simdjson_warn_unused simdjson_inline bool json_iterator::copy_to_buffer(const uint8_t *json, uint32_t max_len, uint8_t (&tmpbuf)[N]) noexcept {
+
359  // Let us guard against silly cases:
+
360  if((N < max_len) || (N == 0)) { return false; }
+
361  // Truncate whitespace to fit the buffer.
+
362  if (max_len > N-1) {
+
363  // if (jsoncharutils::is_not_structural_or_whitespace(json[N-1])) { return false; }
+
364  max_len = N-1;
+
365  }
+
366 
+
367  // Copy to the buffer.
+
368  std::memcpy(tmpbuf, json, max_len);
+
369  tmpbuf[max_len] = ' ';
+
370  return true;
+
371 }
+
372 
+
373 } // namespace ondemand
+
374 } // namespace SIMDJSON_IMPLEMENTATION
+
375 } // namespace simdjson
+
376 
+
377 namespace simdjson {
+
378 
+
379 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexcept
+
380  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator>(value)) {}
+
381 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator>::simdjson_result(error_code error) noexcept
+
382  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator>(error) {}
+
383 
+
384 } // namespace simdjson
+
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
+
We want to support argument-dependent lookup (ADL).
+
const char * error_message(error_code error) noexcept
Get the error message for the given error code.
Definition: error-inl.h:21
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ INCORRECT_TYPE
JSON element has a different type than user expected.
Definition: error.h:34
+
@ OUT_OF_BOUNDS
Attempted to access location outside of document.
Definition: error.h:47
+
@ TAPE_ERROR
Something went wrong, this is a generic error.
Definition: error.h:21
+
@ NO_SUCH_FIELD
JSON field not found in object.
Definition: error.h:37
+
@ SUCCESS
No error.
Definition: error.h:18
+
@ INCOMPLETE_ARRAY_OR_OBJECT
The document ends early.
Definition: error.h:45
+
@ UNINITIALIZED
unknown error, or uninitialized document
Definition: error.h:29
+
+
+ + + + diff --git a/json__iterator_8h_source.html b/json__iterator_8h_source.html new file mode 100644 index 000000000..aa610e5cc --- /dev/null +++ b/json__iterator_8h_source.html @@ -0,0 +1,234 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/json_iterator.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
json_iterator.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 class document;
+
6 class document_stream;
+
7 class object;
+
8 class array;
+
9 class value;
+
10 class raw_json_string;
+
11 class parser;
+
12 
+
18 class json_iterator {
+
19 protected:
+
20  token_iterator token{};
+
21  ondemand::parser *parser{};
+
27  uint8_t *_string_buf_loc{};
+
38  error_code error{SUCCESS};
+
47  depth_t _depth{};
+
54  token_position _root{};
+
61  bool _streaming{false};
+
62 
+
63 public:
+
64  simdjson_inline json_iterator() noexcept = default;
+
65  simdjson_inline json_iterator(json_iterator &&other) noexcept;
+
66  simdjson_inline json_iterator &operator=(json_iterator &&other) noexcept;
+
67  simdjson_inline explicit json_iterator(const json_iterator &other) noexcept = default;
+
68  simdjson_inline json_iterator &operator=(const json_iterator &other) noexcept = default;
+
72  simdjson_warn_unused simdjson_inline error_code skip_child(depth_t parent_depth) noexcept;
+
73 
+
77  simdjson_inline bool at_root() const noexcept;
+
78 
+
85  simdjson_inline bool streaming() const noexcept;
+
86 
+
90  simdjson_inline token_position root_position() const noexcept;
+
94  simdjson_inline void assert_at_document_depth() const noexcept;
+
98  simdjson_inline void assert_at_root() const noexcept;
+
99 
+
103  simdjson_inline bool at_end() const noexcept;
+
104 
+
108  simdjson_inline bool is_alive() const noexcept;
+
109 
+
113  simdjson_inline void abandon() noexcept;
+
114 
+
118  simdjson_inline const uint8_t *return_current_and_advance() noexcept;
+
119 
+
126  simdjson_inline bool is_single_token() const noexcept;
+
127 
+
133  simdjson_inline void assert_more_tokens(uint32_t required_tokens=1) const noexcept;
+
139  simdjson_inline void assert_valid_position(token_position position) const noexcept;
+
150  simdjson_inline const uint8_t *peek(int32_t delta=0) const noexcept;
+
158  simdjson_inline uint32_t peek_length(int32_t delta=0) const noexcept;
+
167  simdjson_inline const uint8_t *unsafe_pointer() const noexcept;
+
178  simdjson_inline const uint8_t *peek(token_position position) const noexcept;
+
186  simdjson_inline uint32_t peek_length(token_position position) const noexcept;
+
195  simdjson_inline const uint8_t *peek_last() const noexcept;
+
196 
+
204  simdjson_inline void ascend_to(depth_t parent_depth) noexcept;
+
205 
+
213  simdjson_inline void descend_to(depth_t child_depth) noexcept;
+
214  simdjson_inline void descend_to(depth_t child_depth, int32_t delta) noexcept;
+
215 
+
219  simdjson_inline depth_t depth() const noexcept;
+
220 
+
224  simdjson_inline uint8_t *&string_buf_loc() noexcept;
+
225 
+
232  simdjson_inline error_code report_error(error_code error, const char *message) noexcept;
+
233 
+
239  simdjson_inline error_code optional_error(error_code error, const char *message) noexcept;
+
240 
+
241  template<int N> simdjson_warn_unused simdjson_inline bool copy_to_buffer(const uint8_t *json, uint32_t max_len, uint8_t (&tmpbuf)[N]) noexcept;
+
242 
+
243  simdjson_inline token_position position() const noexcept;
+
249  simdjson_inline simdjson_result<std::string_view> unescape(raw_json_string in) noexcept;
+
250  simdjson_inline void reenter_child(token_position position, depth_t child_depth) noexcept;
+
251 
+
252 #if SIMDJSON_DEVELOPMENT_CHECKS
+
253  simdjson_inline token_position start_position(depth_t depth) const noexcept;
+
254  simdjson_inline void set_start_position(depth_t depth, token_position position) noexcept;
+
255 #endif
+
256 
+
257  /* Useful for debugging and logging purposes. */
+
258  inline std::string to_string() const noexcept;
+
259 
+
263  inline simdjson_result<const char *> current_location() noexcept;
+
264 
+
269  inline void rewind() noexcept;
+
276  inline bool balanced() const noexcept;
+
277 protected:
+
278  simdjson_inline json_iterator(const uint8_t *buf, ondemand::parser *parser) noexcept;
+
280  simdjson_inline token_position last_position() const noexcept;
+
282  simdjson_inline token_position end_position() const noexcept;
+
284  simdjson_inline token_position end() const noexcept;
+
285 
+
286  friend class document;
+
287  friend class document_stream;
+
288  friend class object;
+
289  friend class array;
+
290  friend class value;
+
291  friend class raw_json_string;
+
292  friend class parser;
+
293  friend class value_iterator;
+
294  friend simdjson_inline void logger::log_line(const json_iterator &iter, const char *title_prefix, const char *title, std::string_view detail, int delta, int depth_delta) noexcept;
+
295  friend simdjson_inline void logger::log_line(const json_iterator &iter, token_position index, depth_t depth, const char *title_prefix, const char *title, std::string_view detail) noexcept;
+
296 }; // json_iterator
+
297 
+
298 } // namespace ondemand
+
299 } // namespace SIMDJSON_IMPLEMENTATION
+
300 } // namespace simdjson
+
301 
+
302 namespace simdjson {
+
303 
+
304 template<>
+
305 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_iterator> {
+
306 public:
+
307  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexcept;
+
308  simdjson_inline simdjson_result(error_code error) noexcept;
+
309 
+
310  simdjson_inline simdjson_result() noexcept = default;
+
311 };
+
312 
+
313 } // namespace simdjson
+
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+ +
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+
std::string to_string(T x)
Converts JSON to a string.
+ +
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/json__type-inl_8h_source.html b/json__type-inl_8h_source.html new file mode 100644 index 000000000..92264048c --- /dev/null +++ b/json__type-inl_8h_source.html @@ -0,0 +1,247 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/json_type-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
json_type-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 inline std::ostream& operator<<(std::ostream& out, json_type type) noexcept {
+
6  switch (type) {
+
7  case json_type::array: out << "array"; break;
+
8  case json_type::object: out << "object"; break;
+
9  case json_type::number: out << "number"; break;
+
10  case json_type::string: out << "string"; break;
+
11  case json_type::boolean: out << "boolean"; break;
+
12  case json_type::null: out << "null"; break;
+
13  default: SIMDJSON_UNREACHABLE();
+
14  }
+
15  return out;
+
16 }
+
17 
+
18 inline std::ostream& operator<<(std::ostream& out, number_type type) noexcept {
+
19  switch (type) {
+
20  case number_type::signed_integer: out << "integer in [-9223372036854775808,9223372036854775808)"; break;
+
21  case number_type::unsigned_integer: out << "unsigned integer in [9223372036854775808,18446744073709551616)"; break;
+
22  case number_type::floating_point_number: out << "floating-point number (binary64)"; break;
+
23  default: SIMDJSON_UNREACHABLE();
+
24  }
+
25  return out;
+
26 }
+
27 #if SIMDJSON_EXCEPTIONS
+
28 inline std::ostream& operator<<(std::ostream& out, simdjson_result<json_type> &type) noexcept(false) {
+
29  return out << type.value();
+
30 }
+
31 #endif
+
32 
+
33 
+
34 
+
35 simdjson_inline number_type number::get_number_type() const noexcept {
+
36  return type;
+
37 }
+
38 
+
39 simdjson_inline bool number::is_uint64() const noexcept {
+ +
41 }
+
42 
+
43 simdjson_inline uint64_t number::get_uint64() const noexcept {
+
44  return payload.unsigned_integer;
+
45 }
+
46 
+
47 simdjson_inline number::operator uint64_t() const noexcept {
+
48  return get_uint64();
+
49 }
+
50 
+
51 
+
52 simdjson_inline bool number::is_int64() const noexcept {
+ +
54 }
+
55 
+
56 simdjson_inline int64_t number::get_int64() const noexcept {
+
57  return payload.signed_integer;
+
58 }
+
59 
+
60 simdjson_inline number::operator int64_t() const noexcept {
+
61  return get_int64();
+
62 }
+
63 
+
64 simdjson_inline bool number::is_double() const noexcept {
+
65  return get_number_type() == number_type::floating_point_number;
+
66 }
+
67 
+
68 simdjson_inline double number::get_double() const noexcept {
+
69  return payload.floating_point_number;
+
70 }
+
71 
+
72 simdjson_inline number::operator double() const noexcept {
+
73  return get_double();
+
74 }
+
75 
+
76 simdjson_inline double number::as_double() const noexcept {
+
77  if(is_double()) {
+
78  return payload.floating_point_number;
+
79  }
+
80  if(is_int64()) {
+
81  return double(payload.signed_integer);
+
82  }
+
83  return double(payload.unsigned_integer);
+
84 }
+
85 
+
86 simdjson_inline void number::append_s64(int64_t value) noexcept {
+
87  payload.signed_integer = value;
+ +
89 }
+
90 
+
91 simdjson_inline void number::append_u64(uint64_t value) noexcept {
+
92  payload.unsigned_integer = value;
+ +
94 }
+
95 
+
96 simdjson_inline void number::append_double(double value) noexcept {
+
97  payload.floating_point_number = value;
+
98  type = number_type::floating_point_number;
+
99 }
+
100 
+
101 simdjson_inline void number::skip_double() noexcept {
+
102  type = number_type::floating_point_number;
+
103 }
+
104 
+
105 } // namespace ondemand
+
106 } // namespace SIMDJSON_IMPLEMENTATION
+
107 } // namespace simdjson
+
108 
+
109 namespace simdjson {
+
110 
+
111 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value) noexcept
+
112  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_type>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::json_type>(value)) {}
+
113 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type>::simdjson_result(error_code error) noexcept
+
114  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_type>(error) {}
+
115 
+
116 } // namespace simdjson
+
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+ +
@ unsigned_integer
a signed integer that fits in a 64-bit word using two's complement
+ +
std::ostream & operator<<(std::ostream &out, json_type type) noexcept
Write the JSON type to the output stream.
Definition: json_type-inl.h:5
+
json_type
The type of a JSON value.
Definition: json_type.h:7
+ + +
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+
@ number
A JSON number ( 1 or -2.3 or 4.5e6 ...)
+
@ string
A JSON string ( "a" or "hello world\n" ...)
+ +
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
simdjson_inline bool is_int64() const noexcept
return true if the automatically determined type of the number is number_type::signed_integer.
Definition: json_type-inl.h:52
+
simdjson_inline double as_double() const noexcept
Convert the number to a double.
Definition: json_type-inl.h:76
+
simdjson_inline bool is_double() const noexcept
return true if the automatically determined type of the number is number_type::floating_point_number.
Definition: json_type-inl.h:64
+
simdjson_inline number_type get_number_type() const noexcept
return the automatically determined type of the number: number_type::floating_point_number,...
Definition: json_type-inl.h:35
+
simdjson_inline int64_t get_int64() const noexcept
return the value as a int64_t, only valid if is_int64() is true.
Definition: json_type-inl.h:56
+
union simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::@0 payload
End of friend declarations.
+
simdjson_inline void append_u64(uint64_t value) noexcept
Store an unsigned 64-bit value to the number.
Definition: json_type-inl.h:91
+
simdjson_inline double get_double() const noexcept
return the value as a double, only valid if is_double() is true.
Definition: json_type-inl.h:68
+
simdjson_inline void skip_double() noexcept
Specifies that the value is a double, but leave it undefined.
+
simdjson_inline void append_s64(int64_t value) noexcept
Store a signed 64-bit value to the number.
Definition: json_type-inl.h:86
+
simdjson_inline void append_double(double value) noexcept
Store a double value to the number.
Definition: json_type-inl.h:96
+
simdjson_inline bool is_uint64() const noexcept
return true if the automatically determined type of the number is number_type::unsigned_integer.
Definition: json_type-inl.h:39
+
simdjson_inline uint64_t get_uint64() const noexcept
return the value as a uint64_t, only valid if is_uint64() is true.
Definition: json_type-inl.h:43
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
+
+ + + + diff --git a/json__type_8h_source.html b/json__type_8h_source.html new file mode 100644 index 000000000..f27ea17e5 --- /dev/null +++ b/json__type_8h_source.html @@ -0,0 +1,211 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/json_type.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
json_type.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
7 enum class json_type {
+
8  // Start at 1 to catch uninitialized / default values more easily
+
9  array=1,
+
10  object,
+
11  number,
+
12  string,
+
13  boolean,
+
14  null
+
15 };
+
16 
+
17 class value_iterator;
+
18 
+
24 struct number {
+
25 
+
37  simdjson_inline number_type get_number_type() const noexcept;
+
42  simdjson_inline bool is_uint64() const noexcept;
+
46  simdjson_inline uint64_t get_uint64() const noexcept;
+
47  simdjson_inline operator uint64_t() const noexcept;
+
48 
+
53  simdjson_inline bool is_int64() const noexcept;
+
57  simdjson_inline int64_t get_int64() const noexcept;
+
58  simdjson_inline operator int64_t() const noexcept;
+
59 
+
60 
+
65  simdjson_inline bool is_double() const noexcept;
+
69  simdjson_inline double get_double() const noexcept;
+
70  simdjson_inline operator double() const noexcept;
+
71 
+
76  simdjson_inline double as_double() const noexcept;
+
77 
+
78 
+
79 protected:
+
85  friend class value_iterator;
+
86  template<typename W>
+
87  friend error_code numberparsing::write_float(const uint8_t *const src, bool negative, uint64_t i, const uint8_t * start_digits, size_t digit_count, int64_t exponent, W &writer);
+
88  template<typename W>
+
89  friend error_code numberparsing::parse_number(const uint8_t *const src, W &writer);
+
90  template<typename W>
+
91  friend error_code numberparsing::slow_float_parsing(simdjson_unused const uint8_t * src, W writer);
+
93  simdjson_inline void append_s64(int64_t value) noexcept;
+
95  simdjson_inline void append_u64(uint64_t value) noexcept;
+
97  simdjson_inline void append_double(double value) noexcept;
+
99  simdjson_inline void skip_double() noexcept;
+
108  union {
+
109  double floating_point_number;
+
110  int64_t signed_integer;
+
111  uint64_t unsigned_integer;
+
112  } payload{0};
+ +
114 };
+
115 
+
122 inline std::ostream& operator<<(std::ostream& out, json_type type) noexcept;
+
123 inline std::ostream& operator<<(std::ostream& out, number_type type) noexcept;
+
124 
+
125 #if SIMDJSON_EXCEPTIONS
+
135 inline std::ostream& operator<<(std::ostream& out, simdjson_result<json_type> &type) noexcept(false);
+
136 #endif
+
137 
+
138 } // namespace ondemand
+
139 } // namespace SIMDJSON_IMPLEMENTATION
+
140 } // namespace simdjson
+
141 
+
142 namespace simdjson {
+
143 
+
144 template<>
+
145 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_type> {
+
146 public:
+ +
148  simdjson_inline simdjson_result(error_code error) noexcept;
+
149  simdjson_inline simdjson_result() noexcept = default;
+
150  simdjson_inline ~simdjson_result() noexcept = default;
+
151 };
+
152 
+
153 } // namespace simdjson
+ +
An ephemeral JSON value returned during iteration.
Definition: value.h:17
+ + +
std::ostream & operator<<(std::ostream &out, json_type type) noexcept
Write the JSON type to the output stream.
Definition: json_type-inl.h:5
+
json_type
The type of a JSON value.
Definition: json_type.h:7
+ +
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
+
@ number
A JSON number ( 1 or -2.3 or 4.5e6 ...)
+
@ string
A JSON string ( "a" or "hello world\n" ...)
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+ +
A type representing a JSON number.
Definition: json_type.h:24
+
friend class value_iterator
The next block of declaration is designed so that we can call the number parsing functions on a numbe...
Definition: json_type.h:85
+
simdjson_inline bool is_int64() const noexcept
return true if the automatically determined type of the number is number_type::signed_integer.
Definition: json_type-inl.h:52
+
simdjson_inline double as_double() const noexcept
Convert the number to a double.
Definition: json_type-inl.h:76
+
simdjson_inline bool is_double() const noexcept
return true if the automatically determined type of the number is number_type::floating_point_number.
Definition: json_type-inl.h:64
+
simdjson_inline number_type get_number_type() const noexcept
return the automatically determined type of the number: number_type::floating_point_number,...
Definition: json_type-inl.h:35
+
simdjson_inline int64_t get_int64() const noexcept
return the value as a int64_t, only valid if is_int64() is true.
Definition: json_type-inl.h:56
+
union simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::@0 payload
End of friend declarations.
+
simdjson_inline void append_u64(uint64_t value) noexcept
Store an unsigned 64-bit value to the number.
Definition: json_type-inl.h:91
+
simdjson_inline double get_double() const noexcept
return the value as a double, only valid if is_double() is true.
Definition: json_type-inl.h:68
+
simdjson_inline void skip_double() noexcept
Specifies that the value is a double, but leave it undefined.
+
simdjson_inline void append_s64(int64_t value) noexcept
Store a signed 64-bit value to the number.
Definition: json_type-inl.h:86
+
simdjson_inline void append_double(double value) noexcept
Store a double value to the number.
Definition: json_type-inl.h:96
+
simdjson_inline bool is_uint64() const noexcept
return true if the automatically determined type of the number is number_type::unsigned_integer.
Definition: json_type-inl.h:39
+
simdjson_inline uint64_t get_uint64() const noexcept
return the value as a uint64_t, only valid if is_uint64() is true.
Definition: json_type-inl.h:43
+
The result of a simdjson operation that could fail.
Definition: error.h:205
+
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
+
simdjson_inline T & value() &noexcept(false)
Get the result value.
+
+
+ + + + diff --git a/jsoncharutils_8h_source.html b/jsoncharutils_8h_source.html new file mode 100644 index 000000000..da17bbc6a --- /dev/null +++ b/jsoncharutils_8h_source.html @@ -0,0 +1,220 @@ + + + + + + + +simdjson: include/simdjson/generic/jsoncharutils.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jsoncharutils.h
+
+
+
1 #include "simdjson/internal/jsoncharutils_tables.h"
+
2 #include "simdjson/internal/numberparsing_tables.h"
+
3 
+
4 namespace simdjson {
+
5 namespace SIMDJSON_IMPLEMENTATION {
+
6 namespace {
+
7 namespace jsoncharutils {
+
8 
+
9 // return non-zero if not a structural or whitespace char
+
10 // zero otherwise
+
11 simdjson_inline uint32_t is_not_structural_or_whitespace(uint8_t c) {
+
12  return internal::structural_or_whitespace_negated[c];
+
13 }
+
14 
+
15 simdjson_inline uint32_t is_structural_or_whitespace(uint8_t c) {
+
16  return internal::structural_or_whitespace[c];
+
17 }
+
18 
+
19 // returns a value with the high 16 bits set if not valid
+
20 // otherwise returns the conversion of the 4 hex digits at src into the bottom
+
21 // 16 bits of the 32-bit return register
+
22 //
+
23 // see
+
24 // https://lemire.me/blog/2019/04/17/parsing-short-hexadecimal-strings-efficiently/
+
25 static inline uint32_t hex_to_u32_nocheck(
+
26  const uint8_t *src) { // strictly speaking, static inline is a C-ism
+
27  uint32_t v1 = internal::digit_to_val32[630 + src[0]];
+
28  uint32_t v2 = internal::digit_to_val32[420 + src[1]];
+
29  uint32_t v3 = internal::digit_to_val32[210 + src[2]];
+
30  uint32_t v4 = internal::digit_to_val32[0 + src[3]];
+
31  return v1 | v2 | v3 | v4;
+
32 }
+
33 
+
34 // given a code point cp, writes to c
+
35 // the utf-8 code, outputting the length in
+
36 // bytes, if the length is zero, the code point
+
37 // is invalid
+
38 //
+
39 // This can possibly be made faster using pdep
+
40 // and clz and table lookups, but JSON documents
+
41 // have few escaped code points, and the following
+
42 // function looks cheap.
+
43 //
+
44 // Note: we assume that surrogates are treated separately
+
45 //
+
46 simdjson_inline size_t codepoint_to_utf8(uint32_t cp, uint8_t *c) {
+
47  if (cp <= 0x7F) {
+
48  c[0] = uint8_t(cp);
+
49  return 1; // ascii
+
50  }
+
51  if (cp <= 0x7FF) {
+
52  c[0] = uint8_t((cp >> 6) + 192);
+
53  c[1] = uint8_t((cp & 63) + 128);
+
54  return 2; // universal plane
+
55  // Surrogates are treated elsewhere...
+
56  //} //else if (0xd800 <= cp && cp <= 0xdfff) {
+
57  // return 0; // surrogates // could put assert here
+
58  } else if (cp <= 0xFFFF) {
+
59  c[0] = uint8_t((cp >> 12) + 224);
+
60  c[1] = uint8_t(((cp >> 6) & 63) + 128);
+
61  c[2] = uint8_t((cp & 63) + 128);
+
62  return 3;
+
63  } else if (cp <= 0x10FFFF) { // if you know you have a valid code point, this
+
64  // is not needed
+
65  c[0] = uint8_t((cp >> 18) + 240);
+
66  c[1] = uint8_t(((cp >> 12) & 63) + 128);
+
67  c[2] = uint8_t(((cp >> 6) & 63) + 128);
+
68  c[3] = uint8_t((cp & 63) + 128);
+
69  return 4;
+
70  }
+
71  // will return 0 when the code point was too large.
+
72  return 0; // bad r
+
73 }
+
74 
+
75 #if SIMDJSON_IS_32BITS // _umul128 for x86, arm
+
76 // this is a slow emulation routine for 32-bit
+
77 //
+
78 static simdjson_inline uint64_t __emulu(uint32_t x, uint32_t y) {
+
79  return x * (uint64_t)y;
+
80 }
+
81 static simdjson_inline uint64_t _umul128(uint64_t ab, uint64_t cd, uint64_t *hi) {
+
82  uint64_t ad = __emulu((uint32_t)(ab >> 32), (uint32_t)cd);
+
83  uint64_t bd = __emulu((uint32_t)ab, (uint32_t)cd);
+
84  uint64_t adbc = ad + __emulu((uint32_t)ab, (uint32_t)(cd >> 32));
+
85  uint64_t adbc_carry = !!(adbc < ad);
+
86  uint64_t lo = bd + (adbc << 32);
+
87  *hi = __emulu((uint32_t)(ab >> 32), (uint32_t)(cd >> 32)) + (adbc >> 32) +
+
88  (adbc_carry << 32) + !!(lo < bd);
+
89  return lo;
+
90 }
+
91 #endif
+
92 
+
93 using internal::value128;
+
94 
+
95 simdjson_inline value128 full_multiplication(uint64_t value1, uint64_t value2) {
+
96  value128 answer;
+
97 #if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS
+
98 #ifdef _M_ARM64
+
99  // ARM64 has native support for 64-bit multiplications, no need to emultate
+
100  answer.high = __umulh(value1, value2);
+
101  answer.low = value1 * value2;
+
102 #else
+
103  answer.low = _umul128(value1, value2, &answer.high); // _umul128 not available on ARM64
+
104 #endif // _M_ARM64
+
105 #else // SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS
+
106  __uint128_t r = (static_cast<__uint128_t>(value1)) * value2;
+
107  answer.low = uint64_t(r);
+
108  answer.high = uint64_t(r >> 64);
+
109 #endif
+
110  return answer;
+
111 }
+
112 
+
113 } // namespace jsoncharutils
+
114 } // unnamed namespace
+
115 } // namespace SIMDJSON_IMPLEMENTATION
+
116 } // namespace simdjson
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/jsoncharutils__tables_8h_source.html b/jsoncharutils__tables_8h_source.html new file mode 100644 index 000000000..a587add0d --- /dev/null +++ b/jsoncharutils__tables_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +simdjson: include/simdjson/internal/jsoncharutils_tables.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jsoncharutils_tables.h
+
+
+
1 #ifndef SIMDJSON_INTERNAL_JSONCHARUTILS_TABLES_H
+
2 #define SIMDJSON_INTERNAL_JSONCHARUTILS_TABLES_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 
+
6 #ifdef JSON_TEST_STRINGS
+
7 void found_string(const uint8_t *buf, const uint8_t *parsed_begin,
+
8  const uint8_t *parsed_end);
+
9 void found_bad_string(const uint8_t *buf);
+
10 #endif
+
11 
+
12 namespace simdjson {
+
13 namespace internal {
+
14 // structural chars here are
+
15 // they are { 0x7b } 0x7d : 0x3a [ 0x5b ] 0x5d , 0x2c (and NULL)
+
16 // we are also interested in the four whitespace characters
+
17 // space 0x20, linefeed 0x0a, horizontal tab 0x09 and carriage return 0x0d
+
18 
+
19 extern SIMDJSON_DLLIMPORTEXPORT const bool structural_or_whitespace_negated[256];
+
20 extern SIMDJSON_DLLIMPORTEXPORT const bool structural_or_whitespace[256];
+
21 extern SIMDJSON_DLLIMPORTEXPORT const uint32_t digit_to_val32[886];
+
22 
+
23 } // namespace internal
+
24 } // namespace simdjson
+
25 
+
26 #endif // SIMDJSON_INTERNAL_JSONCHARUTILS_TABLES_H
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/jsonformatutils_8h_source.html b/jsonformatutils_8h_source.html new file mode 100644 index 000000000..1515d3818 --- /dev/null +++ b/jsonformatutils_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + +simdjson: include/simdjson/internal/jsonformatutils.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jsonformatutils.h
+
+
+
1 #ifndef SIMDJSON_INTERNAL_JSONFORMATUTILS_H
+
2 #define SIMDJSON_INTERNAL_JSONFORMATUTILS_H
+
3 
+
4 #include <iomanip>
+
5 #include <ostream>
+
6 #include <sstream>
+
7 
+
8 namespace simdjson {
+
9 namespace internal {
+
10 
+
11 class escape_json_string;
+
12 
+
13 inline std::ostream& operator<<(std::ostream& out, const escape_json_string &str);
+
14 
+
15 class escape_json_string {
+
16 public:
+
17  escape_json_string(std::string_view _str) noexcept : str{_str} {}
+
18  operator std::string() const noexcept { std::stringstream s; s << *this; return s.str(); }
+
19 private:
+
20  std::string_view str;
+
21  friend std::ostream& operator<<(std::ostream& out, const escape_json_string &unescaped);
+
22 };
+
23 
+
24 inline std::ostream& operator<<(std::ostream& out, const escape_json_string &unescaped) {
+
25  for (size_t i=0; i<unescaped.str.length(); i++) {
+
26  switch (unescaped.str[i]) {
+
27  case '\b':
+
28  out << "\\b";
+
29  break;
+
30  case '\f':
+
31  out << "\\f";
+
32  break;
+
33  case '\n':
+
34  out << "\\n";
+
35  break;
+
36  case '\r':
+
37  out << "\\r";
+
38  break;
+
39  case '\"':
+
40  out << "\\\"";
+
41  break;
+
42  case '\t':
+
43  out << "\\t";
+
44  break;
+
45  case '\\':
+
46  out << "\\\\";
+
47  break;
+
48  default:
+
49  if (static_cast<unsigned char>(unescaped.str[i]) <= 0x1F) {
+
50  // TODO can this be done once at the beginning, or will it mess up << char?
+
51  std::ios::fmtflags f(out.flags());
+
52  out << "\\u" << std::hex << std::setw(4) << std::setfill('0') << int(unescaped.str[i]);
+
53  out.flags(f);
+
54  } else {
+
55  out << unescaped.str[i];
+
56  }
+
57  }
+
58  }
+
59  return out;
+
60 }
+
61 
+
62 } // namespace internal
+
63 } // namespace simdjson
+
64 
+
65 #endif // SIMDJSON_INTERNAL_JSONFORMATUTILS_H
+
We want to support argument-dependent lookup (ADL).
+
std::ostream & operator<<(std::ostream &out, error_code error) noexcept
Write the error message to the output stream.
Definition: error-inl.h:36
+
+
+ + + + diff --git a/jsonioutil_8h_source.html b/jsonioutil_8h_source.html new file mode 100644 index 000000000..1dd23bbc2 --- /dev/null +++ b/jsonioutil_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + +simdjson: include/simdjson/jsonioutil.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jsonioutil.h
+
+
+
1 #ifndef SIMDJSON_JSONIOUTIL_H
+
2 #define SIMDJSON_JSONIOUTIL_H
+
3 
+
4 #include "simdjson/common_defs.h"
+
5 #include "simdjson/padded_string.h"
+
6 
+
7 namespace simdjson {
+
8 
+
9 #if SIMDJSON_EXCEPTIONS
+
10 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
11 [[deprecated("Use padded_string::load() instead")]]
+
12 inline padded_string get_corpus(const char *path) {
+
13  return padded_string::load(path);
+
14 }
+
15 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
16 #endif // SIMDJSON_EXCEPTIONS
+
17 
+
18 } // namespace simdjson
+
19 
+
20 #endif // SIMDJSON_JSONIOUTIL_H
+
We want to support argument-dependent lookup (ADL).
+
static simdjson_result< padded_string > load(std::string_view path) noexcept
Load this padded string from a file.
+
+
+ + + + diff --git a/jsonparser_8h_source.html b/jsonparser_8h_source.html new file mode 100644 index 000000000..337c83d3b --- /dev/null +++ b/jsonparser_8h_source.html @@ -0,0 +1,223 @@ + + + + + + + +simdjson: include/simdjson/dom/jsonparser.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jsonparser.h
+
+
+
1 // TODO Remove this -- deprecated API and files
+
2 
+
3 #ifndef SIMDJSON_DOM_JSONPARSER_H
+
4 #define SIMDJSON_DOM_JSONPARSER_H
+
5 
+
6 #include "simdjson/dom/document.h"
+
7 #include "simdjson/dom/parsedjson.h"
+
8 #include "simdjson/jsonioutil.h"
+
9 
+
10 namespace simdjson {
+
11 
+
12 //
+
13 // C API (json_parse and build_parsed_json) declarations
+
14 //
+
15 
+
16 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
+
17 [[deprecated("Use parser.parse() instead")]]
+
18 inline int json_parse(const uint8_t *buf, size_t len, dom::parser &parser, bool realloc_if_needed = true) noexcept {
+
19  error_code code = parser.parse(buf, len, realloc_if_needed).error();
+
20  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
21  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
22  // anticipation of making the error code ephemeral.
+
23  // Here we put the code back into the parser, until we've removed this method.
+
24  parser.valid = code == SUCCESS;
+
25  parser.error = code;
+
26  return code;
+
27 }
+
28 [[deprecated("Use parser.parse() instead")]]
+
29 inline int json_parse(const char *buf, size_t len, dom::parser &parser, bool realloc_if_needed = true) noexcept {
+
30  error_code code = parser.parse(buf, len, realloc_if_needed).error();
+
31  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
32  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
33  // anticipation of making the error code ephemeral.
+
34  // Here we put the code back into the parser, until we've removed this method.
+
35  parser.valid = code == SUCCESS;
+
36  parser.error = code;
+
37  return code;
+
38 }
+
39 [[deprecated("Use parser.parse() instead")]]
+
40 inline int json_parse(const std::string &s, dom::parser &parser, bool realloc_if_needed = true) noexcept {
+
41  error_code code = parser.parse(s.data(), s.length(), realloc_if_needed).error();
+
42  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
43  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
44  // anticipation of making the error code ephemeral.
+
45  // Here we put the code back into the parser, until we've removed this method.
+
46  parser.valid = code == SUCCESS;
+
47  parser.error = code;
+
48  return code;
+
49 }
+
50 [[deprecated("Use parser.parse() instead")]]
+
51 inline int json_parse(const padded_string &s, dom::parser &parser) noexcept {
+
52  error_code code = parser.parse(s).error();
+
53  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
54  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
55  // anticipation of making the error code ephemeral.
+
56  // Here we put the code back into the parser, until we've removed this method.
+
57  parser.valid = code == SUCCESS;
+
58  parser.error = code;
+
59  return code;
+
60 }
+
61 
+
62 [[deprecated("Use parser.parse() instead")]]
+
63 simdjson_warn_unused inline dom::parser build_parsed_json(const uint8_t *buf, size_t len, bool realloc_if_needed = true) noexcept {
+
64  dom::parser parser;
+
65  error_code code = parser.parse(buf, len, realloc_if_needed).error();
+
66  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
67  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
68  // anticipation of making the error code ephemeral.
+
69  // Here we put the code back into the parser, until we've removed this method.
+
70  parser.valid = code == SUCCESS;
+
71  parser.error = code;
+
72  return parser;
+
73 }
+
74 [[deprecated("Use parser.parse() instead")]]
+
75 simdjson_warn_unused inline dom::parser build_parsed_json(const char *buf, size_t len, bool realloc_if_needed = true) noexcept {
+
76  dom::parser parser;
+
77  error_code code = parser.parse(buf, len, realloc_if_needed).error();
+
78  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
79  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
80  // anticipation of making the error code ephemeral.
+
81  // Here we put the code back into the parser, until we've removed this method.
+
82  parser.valid = code == SUCCESS;
+
83  parser.error = code;
+
84  return parser;
+
85 }
+
86 [[deprecated("Use parser.parse() instead")]]
+
87 simdjson_warn_unused inline dom::parser build_parsed_json(const std::string &s, bool realloc_if_needed = true) noexcept {
+
88  dom::parser parser;
+
89  error_code code = parser.parse(s.data(), s.length(), realloc_if_needed).error();
+
90  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
91  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
92  // anticipation of making the error code ephemeral.
+
93  // Here we put the code back into the parser, until we've removed this method.
+
94  parser.valid = code == SUCCESS;
+
95  parser.error = code;
+
96  return parser;
+
97 }
+
98 [[deprecated("Use parser.parse() instead")]]
+
99 simdjson_warn_unused inline dom::parser build_parsed_json(const padded_string &s) noexcept {
+
100  dom::parser parser;
+
101  error_code code = parser.parse(s).error();
+
102  // The deprecated json_parse API is a signal that the user plans to *use* the error code / valid
+
103  // bits in the parser instead of heeding the result code. The normal parser unsets those in
+
104  // anticipation of making the error code ephemeral.
+
105  // Here we put the code back into the parser, until we've removed this method.
+
106  parser.valid = code == SUCCESS;
+
107  parser.error = code;
+
108  return parser;
+
109 }
+
110 #endif // SIMDJSON_DISABLE_DEPRECATED_API
+
111 
+
113 int json_parse(const char *buf, dom::parser &parser) noexcept = delete;
+
115 dom::parser build_parsed_json(const char *buf) noexcept = delete;
+
116 
+
117 } // namespace simdjson
+
118 
+
119 #endif // SIMDJSON_DOM_JSONPARSER_H
+
We want to support argument-dependent lookup (ADL).
+
error_code
All possible errors returned by simdjson.
Definition: error.h:17
+
@ SUCCESS
No error.
Definition: error.h:18
+
+
+ + + + diff --git a/logger-inl_8h_source.html b/logger-inl_8h_source.html new file mode 100644 index 000000000..af95be212 --- /dev/null +++ b/logger-inl_8h_source.html @@ -0,0 +1,276 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/logger-inl.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
logger-inl.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 namespace logger {
+
5 
+
6 static constexpr const char * DASHES = "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
+
7 static constexpr const int LOG_EVENT_LEN = 20;
+
8 static constexpr const int LOG_BUFFER_LEN = 30;
+
9 static constexpr const int LOG_SMALL_BUFFER_LEN = 10;
+
10 static int log_depth = 0; // Not threadsafe. Log only.
+
11 
+
12 // Helper to turn unprintable or newline characters into spaces
+
13 static inline char printable_char(char c) {
+
14  if (c >= 0x20) {
+
15  return c;
+
16  } else {
+
17  return ' ';
+
18  }
+
19 }
+
20 
+
21 inline void log_event(const json_iterator &iter, const char *type, std::string_view detail, int delta, int depth_delta) noexcept {
+
22  log_line(iter, "", type, detail, delta, depth_delta);
+
23 }
+
24 
+
25 inline void log_value(const json_iterator &iter, token_position index, depth_t depth, const char *type, std::string_view detail) noexcept {
+
26  log_line(iter, index, depth, "", type, detail);
+
27 }
+
28 inline void log_value(const json_iterator &iter, const char *type, std::string_view detail, int delta, int depth_delta) noexcept {
+
29  log_line(iter, "", type, detail, delta, depth_delta);
+
30 }
+
31 
+
32 inline void log_start_value(const json_iterator &iter, token_position index, depth_t depth, const char *type, std::string_view detail) noexcept {
+
33  log_line(iter, index, depth, "+", type, detail);
+
34  if (LOG_ENABLED) { log_depth++; }
+
35 }
+
36 inline void log_start_value(const json_iterator &iter, const char *type, int delta, int depth_delta) noexcept {
+
37  log_line(iter, "+", type, "", delta, depth_delta);
+
38  if (LOG_ENABLED) { log_depth++; }
+
39 }
+
40 
+
41 inline void log_end_value(const json_iterator &iter, const char *type, int delta, int depth_delta) noexcept {
+
42  if (LOG_ENABLED) { log_depth--; }
+
43  log_line(iter, "-", type, "", delta, depth_delta);
+
44 }
+
45 
+
46 inline void log_error(const json_iterator &iter, const char *error, const char *detail, int delta, int depth_delta) noexcept {
+
47  log_line(iter, "ERROR: ", error, detail, delta, depth_delta);
+
48 }
+
49 inline void log_error(const json_iterator &iter, token_position index, depth_t depth, const char *error, const char *detail) noexcept {
+
50  log_line(iter, index, depth, "ERROR: ", error, detail);
+
51 }
+
52 
+
53 inline void log_event(const value_iterator &iter, const char *type, std::string_view detail, int delta, int depth_delta) noexcept {
+
54  log_event(iter.json_iter(), type, detail, delta, depth_delta);
+
55 }
+
56 
+
57 inline void log_value(const value_iterator &iter, const char *type, std::string_view detail, int delta, int depth_delta) noexcept {
+
58  log_value(iter.json_iter(), type, detail, delta, depth_delta);
+
59 }
+
60 
+
61 inline void log_start_value(const value_iterator &iter, const char *type, int delta, int depth_delta) noexcept {
+
62  log_start_value(iter.json_iter(), type, delta, depth_delta);
+
63 }
+
64 
+
65 inline void log_end_value(const value_iterator &iter, const char *type, int delta, int depth_delta) noexcept {
+
66  log_end_value(iter.json_iter(), type, delta, depth_delta);
+
67 }
+
68 
+
69 inline void log_error(const value_iterator &iter, const char *error, const char *detail, int delta, int depth_delta) noexcept {
+
70  log_error(iter.json_iter(), error, detail, delta, depth_delta);
+
71 }
+
72 
+
73 inline void log_headers() noexcept {
+
74  if (LOG_ENABLED) {
+
75  // Technically a static variable is not thread-safe, but if you are using threads
+
76  // and logging... well...
+
77  static bool displayed_hint{false};
+
78  log_depth = 0;
+
79  printf("\n");
+
80  if(!displayed_hint) {
+
81  // We only print this helpful header once.
+
82  printf("# Logging provides the depth and position of the iterator user-visible steps:\n");
+
83  printf("# +array says 'this is where we were when we discovered the start array'\n");
+
84  printf("# -array says 'this is where we were when we ended the array'\n");
+
85  printf("# skip says 'this is a structural or value I am skipping'\n");
+
86  printf("# +/-skip says 'this is a start/end array or object I am skipping'\n");
+
87  printf("#\n");
+
88  printf("# The indentation of the terms (array, string,...) indicates the depth,\n");
+
89  printf("# in addition to the depth being displayed.\n");
+
90  printf("#\n");
+
91  printf("# Every token in the document has a single depth determined by the tokens before it,\n");
+
92  printf("# and is not affected by what the token actually is.\n");
+
93  printf("#\n");
+
94  printf("# Not all structural elements are presented as tokens in the logs.\n");
+
95  printf("#\n");
+
96  printf("# We never give control to the user within an empty array or an empty object.\n");
+
97  printf("#\n");
+
98  printf("# Inside an array, having a depth greater than the array's depth means that\n");
+
99  printf("# we are pointing inside a value.\n");
+
100  printf("# Having a depth equal to the array means that we are pointing right before a value.\n");
+
101  printf("# Having a depth smaller than the array means that we have moved beyond the array.\n");
+
102  displayed_hint = true;
+
103  }
+
104  printf("\n");
+
105  printf("| %-*s ", LOG_EVENT_LEN, "Event");
+
106  printf("| %-*s ", LOG_BUFFER_LEN, "Buffer");
+
107  printf("| %-*s ", LOG_SMALL_BUFFER_LEN, "Next");
+
108  // printf("| %-*s ", 5, "Next#");
+
109  printf("| %-*s ", 5, "Depth");
+
110  printf("| Detail ");
+
111  printf("|\n");
+
112 
+
113  printf("|%.*s", LOG_EVENT_LEN+2, DASHES);
+
114  printf("|%.*s", LOG_BUFFER_LEN+2, DASHES);
+
115  printf("|%.*s", LOG_SMALL_BUFFER_LEN+2, DASHES);
+
116  // printf("|%.*s", 5+2, DASHES);
+
117  printf("|%.*s", 5+2, DASHES);
+
118  printf("|--------");
+
119  printf("|\n");
+
120  fflush(stdout);
+
121  }
+
122 }
+
123 
+
124 inline void log_line(const json_iterator &iter, const char *title_prefix, const char *title, std::string_view detail, int delta, int depth_delta) noexcept {
+
125  log_line(iter, iter.position()+delta, depth_t(iter.depth()+depth_delta), title_prefix, title, detail);
+
126 }
+
127 inline void log_line(const json_iterator &iter, token_position index, depth_t depth, const char *title_prefix, const char *title, std::string_view detail) noexcept {
+
128  if (LOG_ENABLED) {
+
129  const int indent = depth*2;
+
130  const auto buf = iter.token.buf;
+
131  printf("| %*s%s%-*s ",
+
132  indent, "",
+
133  title_prefix,
+
134  LOG_EVENT_LEN - indent - int(strlen(title_prefix)), title
+
135  );
+
136  {
+
137  // Print the current structural.
+
138  printf("| ");
+
139  // Before we begin, the index might point right before the document.
+
140  // This could be unsafe, see https://github.com/simdjson/simdjson/discussions/1938
+
141  if(index < iter._root) {
+
142  printf("%*s", LOG_BUFFER_LEN, "");
+
143  } else {
+
144  auto current_structural = &buf[*index];
+
145  for (int i=0;i<LOG_BUFFER_LEN;i++) {
+
146  printf("%c", printable_char(current_structural[i]));
+
147  }
+
148  }
+
149  printf(" ");
+
150  }
+
151  {
+
152  // Print the next structural.
+
153  printf("| ");
+
154  auto next_structural = &buf[*(index+1)];
+
155  for (int i=0;i<LOG_SMALL_BUFFER_LEN;i++) {
+
156  printf("%c", printable_char(next_structural[i]));
+
157  }
+
158  printf(" ");
+
159  }
+
160  // printf("| %5u ", *(index+1));
+
161  printf("| %5i ", depth);
+
162  printf("| %6.*s ", int(detail.size()) , detail.data());
+
163  printf("|\n");
+
164  fflush(stdout);
+
165  }
+
166 }
+
167 
+
168 } // namespace logger
+
169 } // namespace ondemand
+
170 } // namespace SIMDJSON_IMPLEMENTATION
+
171 } // namespace simdjson
+
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/logger_8h_source.html b/logger_8h_source.html new file mode 100644 index 000000000..cbc3e125d --- /dev/null +++ b/logger_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/logger.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
logger.h
+
+
+
1 namespace simdjson {
+
2 namespace SIMDJSON_IMPLEMENTATION {
+
3 namespace ondemand {
+
4 
+
5 class json_iterator;
+
6 class value_iterator;
+
7 
+
8 namespace logger {
+
9 
+
10 #if SIMDJSON_VERBOSE_LOGGING
+
11  static constexpr const bool LOG_ENABLED = true;
+
12 #else
+
13  static constexpr const bool LOG_ENABLED = false;
+
14 #endif
+
15 
+
16 // We do not want these functions to be 'really inlined' since real inlining is
+
17 // for performance purposes and if you are using the loggers, you do not care about
+
18 // performance (or should not).
+
19 static inline void log_headers() noexcept;
+
20 static inline void log_line(const json_iterator &iter, token_position index, depth_t depth, const char *title_prefix, const char *title, std::string_view detail) noexcept;
+
21 static inline void log_line(const json_iterator &iter, const char *title_prefix, const char *title, std::string_view detail, int delta, int depth_delta) noexcept;
+
22 static inline void log_event(const json_iterator &iter, const char *type, std::string_view detail="", int delta=0, int depth_delta=0) noexcept;
+
23 static inline void log_value(const json_iterator &iter, token_position index, depth_t depth, const char *type, std::string_view detail="") noexcept;
+
24 static inline void log_value(const json_iterator &iter, const char *type, std::string_view detail="", int delta=-1, int depth_delta=0) noexcept;
+
25 static inline void log_start_value(const json_iterator &iter, token_position index, depth_t depth, const char *type, std::string_view detail="") noexcept;
+
26 static inline void log_start_value(const json_iterator &iter, const char *type, int delta=-1, int depth_delta=0) noexcept;
+
27 static inline void log_end_value(const json_iterator &iter, const char *type, int delta=-1, int depth_delta=0) noexcept;
+
28 static inline void log_error(const json_iterator &iter, token_position index, depth_t depth, const char *error, const char *detail="") noexcept;
+
29 static inline void log_error(const json_iterator &iter, const char *error, const char *detail="", int delta=-1, int depth_delta=0) noexcept;
+
30 
+
31 static inline void log_event(const value_iterator &iter, const char *type, std::string_view detail="", int delta=0, int depth_delta=0) noexcept;
+
32 static inline void log_value(const value_iterator &iter, const char *type, std::string_view detail="", int delta=-1, int depth_delta=0) noexcept;
+
33 static inline void log_start_value(const value_iterator &iter, const char *type, int delta=-1, int depth_delta=0) noexcept;
+
34 static inline void log_end_value(const value_iterator &iter, const char *type, int delta=-1, int depth_delta=0) noexcept;
+
35 static inline void log_error(const value_iterator &iter, const char *error, const char *detail="", int delta=-1, int depth_delta=0) noexcept;
+
36 
+
37 } // namespace logger
+
38 } // namespace ondemand
+
39 } // namespace SIMDJSON_IMPLEMENTATION
+
40 } // namespace simdjson
+
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
+
We want to support argument-dependent lookup (ADL).
+
+
+ + + + diff --git a/logotiny.png b/logotiny.png new file mode 100644 index 0000000000000000000000000000000000000000..13f177d7d9d6cc908bf41de9fbf02dd6626495c2 GIT binary patch literal 4291 zcmZu!1zc3w_kTDri?kphJ)j^xLrV<{3@Ihu(kU~*&>#}Bh=fvtNK3cQ(4in9DKUU_ zOLqx^{)gTD?f&b&&w1zEb5DNn{k;2mQ94>G`1h46Y%Ho?C+vakK)FOd!USH{}`d17%Icy`@g z)dURy6zx|;kjzKHgpc3rtZ(dPtf?Voi*ggRwnN$23;MaaUwHvCeo}bR&ECrz;^+1V ziI(z{<@nP=3NK%&p&XDuO}t!XIgB-RAc`nYdx)4IzCaE*2?PR>@w9W0(nTo$?T(+x zayWT;xl2KzzP`SKz9NDsPe-Vbq@*MiCJYr87QkBwp#70v)_wv=^zFZb{3i~=9&PLC z?C#}^LPD!G&a? z|3~+?y$tlK-T&79U)cVs#e)kc!Dsr0jacq#@9iKbd+aK*47!b5Si?kRW8Q%=v9p63P{Mpcz%f`;l z5j|miaob=Hm(u-ywfp6=3pMj)ZB%xhsT#+WikD2*S{l+IDPG;jCYP23{4=!*WA%zv zgs<1pZHlg;{6i^F;LB_5Hi=b>5&gpg;LdeHJvG-3EX zzu74W_VC(+j6V=v@Vn>zrFOBmKAnBaQ;v(rEwN5j7)C4P43E?J-0Z6${-}D;Zsr)v zAo53H!=gO7(~p>q5#^}a(-IwJJ|1CHkIdfJEH_K_qJ+YenoRQS)S?p9dCtznagptN zTQ7TDda>nnVN5`Y(9QVMjKOpUMensiYb#Gr&%>moB;7aRRAE8ztQuK&O4Z^G3{s&+ zK*H>28|Ywz@APiej|t%jZk_{^e2Hg_v-fdD3^eqKm%G(@@Hyp;Hvjj*k}+$U=Xqf= z=BHr0@uJPddG02NAVeTgbM8F7Fa(w*0XDxC@-^GRZRuWU`j0+`lUWTTW z%9S6-sTQ?hqE0ubZ!;>F{N0LtQ-f#UEADN72WiszE*IxHmLjSzPJvuiFV`rVDCCo^ z@w3lHl6@J{^x2|S@WU zz!tEUvnsT6u+lra+?^PH{}um@)UAXB>Knv_2xsTwfwx<+`Jo~F*OQ7AER8~|cUx6> z|(k zv+xxH-2B(0uNji0ertm{j9=fNT6m(PqZLOAH1*0PJ0Q5@&2evjet!KG<$@mzk!(Fc z%Vz4sEFUeBDri6Mqo0nC_?ElF#Tbt*xKM7}X^(y;zX$n+Yw{vl9mFr9)C`Sfmed6W zF2za^f=E5}@gFOf{lyN(bOORwTjk6U*ze*Gy38nsil>|P0yT$ThYq~XvEyEL^7sYs zU`nSx^}rg3&oB}vcK{-3&33@6LLQWvUo1JRj4{Zp!K;{?mzQL=$zRXau_uWq85DUP z27m}?{eH>CMV%~fTO*!uLXHmdDT*#c)H5aX+k0r$FOH$=mJLPAue6g?^RsW^6pMnJ zG>=^NIi7yF^qP-Amy#tebIKF0?(cW8K^Mii{9|(l*cK-=R8@&9)do9Qj?R=4XvrR| z?+qb#Z*ayjX_q{4%XPckeU3)y-hGiM z*=k=lQmS-_tBvL)mZsXK4LsSZhe4sc-eak0Fzah(s-G#*NkN~9!Ql(mU(p99rHew- zLk{A)FKKN;ZY%4p2iDuUNvew83&$Nr4@=@?Q^TpxWHD>)UEr`{G{tXHV@I{3pc4Cprss=&`W<)+mabHP6Z3@R-%BzTpg zqN1?DmjR|Vk6x!qd6#r(agxFKgPxL|H-rn`7bk|Bl@Q8t23Ms~KM@PHlR|CrRChOc zCOLJQ*{#Z`x%`4B%mln_-qw46e(dYB=R3=FyoOK%u~yln+2hZV05~#H+3X~Q%5tp2 zVyX*inFWWCu_-^RR-u%;sM;7UO#zek=d|Ruh9KlR3KXc+Kss{)6=?M&#SO*+`RliRYbxEL=8-@Nz4 zZ0j#4hYKYY7+Tl6BeNFkAn>h&Xi@3Wv7;}#Y)?73i;>3- z!D1Pn(Lg-eGU}-P*bozv_yFyAZ>wZHnvFStF=vM7fQylF1lhwS7WOsy429cvzboPaE>~M?x&h?tR|)S!k65J zi+cUfNsp{o$XSc~i5afz_v?-v^E$W)I^Wj(N<-PAXCO@Necj$}&6ficlT)>x zZ>jp>Gp_Mqa9Uk!PNETjnix#QO(A;;eKqwQsFT$cTPfmxg4i zBT1-Rr^Nf!L(yNS&%H^*O;KlbE8CJ184^#VSIVg?`M0Z64%f-5TbeL>c`y043C&xm z1f$ykKB5X4c@3spw^Kdya5?Ty8nbzp0eY2`b>@Brd3T&zrh@#>v{l)Eu3RhXUIhPE zFgs7zK0_B()8un{j|;WdY-_*Y-EI0Q#c|-2(-rnacsHuF2O!zGy98c!_(lu3DHA6$ zo;wxih!m#?nm(3i$T?m~kp~TaSTc{J%Bk%I3|Z5So=F>kZ$Tj_h9=X7TeD!;?lgkk zP7ritq>i?9h$r;iuW%P1uA|*9BXF=^$Gn%@-6Hf6Mj4TqD=`>G43J_uY!_TCk_qgf zQu}vFE2fu>B~`^fzTa$C4?PrCo-i|__*JAiE7Y`7#3D;R89mS;(V@+cNGs|I!G1He z=7T99Y?;evrBmLm*;EI1p;P!SIFV9HHs8uc27qHO)On+xuiWx&CB@wWG4FT7b*LU~~8e>|Bhc3wcxh8wHM+s{!5+Y7T;>U+gOV0=T}rT`q_?%l?5%H9njFE zH?oO(f8Vn%m+j+79bZkMYhp5FojX%Neh?WHfsoX=m~3~cb*w@EFr{`7~} z*@1n-kDbP1kEPB4;ZLzb!X7LiV3><+?e+C_Ts_*cXJBAVgw$~oDCYL#oA+17lS1V7ztY*;Y;bSFfpRMfmkwVvi;PKnRvbnKL5-wJU z-}*-`SNmQo`eogMSpn6LCWIfg2*D!WEDbXUv_7JW>Bd75nQFiqQvG=HKei^I&FPo3MsU(4v0u@Dl&TyWe1(`SdP>&1ncx#{W5X>w2C z`{?&zaKD%f?%7zGiK6d}H~l`E-kSQmx1m{Uo?4UOgqPq}O_mt5j(^}~aTwf+QNT(xr(-*Yj(sIRY|99^QN3w>zq zyg61r$xg;39z!Q!in!P+tEDbe(YS@B+-^1B94##@2R0jc*^%y@KTW72E+2h<$&Rah zD7St5T^nfs(rc{eCpEUY+ZI8J4LEkemun_~mDT<{RwPs@&?} z*LSw-@48q=XhMuk%e1##_fj#AUkY|xerN^u(Ode3R{dg;4bTrXxKN3>J8EMWcefOR z@Zy%(V;j@;*`74$WAsm8`D_Mb@4M4Sy$K3q$GT0u`d)5c$?m6#u~t-dBE`a*FMpi6 zs)WIT7!UW2d%+iVnRfE>gL zf_2+q`M4|_{uFa=L!S0#@zQnypH-4>nh}1Bpde>wXLy;!n2yY)xuQPY^*gJy51Am= k1&KYdxtKmwc^&!-Bq@9+Q*pGL^y)`kO-Tz;p + + + + + + +simdjson: The Basics + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
The Basics
+
+
+

An overview of what you need to know to use simdjson, with examples.

+ +

+Requirements

+
    +
  • A recent compiler (LLVM clang 6 or better, GNU GCC 7.4 or better, Xcode 11 or better) on a 64-bit (PPC, ARM or x64 Intel/AMD) POSIX systems such as macOS, freeBSD or Linux. We require that the compiler supports the C++11 standard or better.
  • +
  • Visual Studio 2017 or better under 64-bit Windows. Users should target a 64-bit build (x64) instead of a 32-bit build (x86). We support the LLVM clang compiler under Visual Studio (clangcl) as well as as the regular Visual Studio compiler. We also support MinGW 64-bit under Windows.
  • +
+

Support for AVX-512 require a processor with AVX512-VBMI2 support (Ice Lake or better) under a 64-bit system and a recent compiler (LLVM clang 6 or better, GCC 8 or better, Visual Studio 2019 or better). You need a correspondingly recent assembler such as gas (2.30+) or nasm (2.14+): recent compilers usually come with recent assemblers. If you mix a recent compiler with an incompatible/old assembler (e.g., when using a recent compiler with an old Linux distribution), you may get errors at build time because the compiler produces instructions that the assembler does not recognize: you should update your assembler to match your compiler (e.g., upgrade binutils to version 2.30 or better under Linux) or use an older compiler matching the capabilities of your assembler.

+

We test the library on a big-endian system (IBM s390x with Linux) .

+

+Including simdjson

+

To include simdjson, copy simdjson.h and simdjson.cpp into your project. Then include it in your project with:

+
{c++}
+
#include "simdjson.h"
+
using namespace simdjson; // optional
+

You can compile with:

+
c++ myproject.cpp simdjson.cpp
+

Note:

    +
  • Users on macOS and other platforms where default compilers do not provide C++11 compliant by default should request it with the appropriate flag (e.g., c++ -std=c++11 myproject.cpp simdjson.cpp).
  • +
  • The library relies on runtime CPU detection: avoid specifying an architecture at compile time (e.g., -march-native).
  • +
+

+Using simdjson with package managers

+

You can install the simdjson library on your system or in your project using multiple package managers such as MSYS2, the conan package manager, vcpkg, brew, the apt package manager (debian-based Linux systems), the FreeBSD package manager (FreeBSD), and so on. Visit our wiki for more details.

+

+Using simdjson as a CMake dependency

+

You can include the simdjson library as a CMake dependency by including the following lines in your CMakeLists.txt:

+
include(FetchContent)
+
+
FetchContent_Declare(
+
simdjson
+
GIT_REPOSITORY https://github.com/simdjson/simdjson.git
+
GIT_TAG tags/v0.9.6
+
GIT_SHALLOW TRUE)
+
+
FetchContent_MakeAvailable(simdjson)
+

You should provide GIT_TAG with the release you need. If you omit GIT_TAG ..., you will work from the main branch of simdjson: we recommend that if you are working on production code, you always work from a release.

+

Elsewhere in your project, you can declare dependencies on simdjson with lines such as these:

+
add_executable(myprogram myprogram.cpp)
+
target_link_libraries(myprogram simdjson)
+

We recommend CMake version 3.15 or better.

+

See our CMake demonstration. It works under Linux, FreeBSD, macOS and Windows (including Visual Studio).

+

The CMake build in simdjson can be tailored with a few variables. You can see the available variables and their default values by entering the cmake -LA command.

+

+Versions

+

Users are discouraged from building production code from the project's main branch. The main branch is used for development: it may contain new features but also additional bugs.

+

Users should pick a release. They should also access the documentation matching the release that they have chosen. Note that new features may be added over time.

+

Our releases are tagged using semantic versioning: the tags are made of three numbers prefixed by the letter v and separated by periods.

+

You can always find the latest release at the following hyperlink:

+

https://github.com/simdjson/simdjson/releases/latest/

+

The archive you download at this location contains its own corresponding documentation.

+

You can also choose to browse a specific version of the documentation and the code using GitHub, by appending the version number to the hyperlink, like so:

+

https://github.com/simdjson/simdjson/blob/vx.y.z/doc/basics.md

+

where x.y.z should correspond to the version number you have chosen.

+

+The Basics: Loading and Parsing JSON Documents

+

The simdjson library allows you to navigate and validate JSON documents (RFC 8259). As required by the standard, your JSON document should be in a Unicode (UTF-8) string. The whole string, from the beginning to the end, needs to be valid: we do not attempt to tolerate bad inputs before or after a document.

+

The simdjson library offers a tree-like API, which you can access by creating a ondemand::parser and calling the iterate() method. The iterate method quickly indexes the input string and may detect some errors. The following example illustrates how to get started with an input JSON file ("twitter.json"):

+
{c++}
+
ondemand::parser parser;
+
auto json = padded_string::load("twitter.json"); // load JSON file 'twitter.json'.
+
ondemand::document doc = parser.iterate(json); // position a pointer at the beginning of the JSON data
+

You can also create a padded string—for efficiency reasons, simdjson requires a string with a few bytes (simdjson::SIMDJSON_PADDING) at the end—and calling iterate():

+
{c++}
+
ondemand::parser parser;
+
auto json = "[1,2,3]"_padded; // The _padded suffix creates a simdjson::padded_string instance
+
ondemand::document doc = parser.iterate(json); // parse a string
+

If you have a buffer of your own with enough padding already (SIMDJSON_PADDING extra bytes allocated), you can use padded_string_view to pass it in:

+
{c++}
+
ondemand::parser parser;
+
char json[3+SIMDJSON_PADDING];
+
strcpy(json, "[1]");
+
ondemand::document doc = parser.iterate(json, strlen(json), sizeof(json));
+

The simdjson library will also accept std::string instances, as long as the capacity() of the string exceeds the size() by at least SIMDJSON_PADDING. You can increase the capacity() with the reserve() function of your strings.

+

We recommend against creating many std::string or many std::padding_string instances in your application to store your JSON data. Consider reusing the same buffers and limiting memory allocations.

+

By default, the simdjson library throws exceptions (simdjson_error) on errors. We omit try-catch clauses from our illustrating examples: if you omit try-catch in your code, an uncaught exception will halt your program. It is also possible to use simdjson without generating exceptions, and you may even build the library without exception support at all. See Error Handling for details.

+

+Documents are Iterators

+

The simdjson library relies on an approach to parsing JSON that we call "On Demand". A document is not a fully-parsed JSON value; rather, it is an iterator over the JSON text. This means that while you iterate an array, or search for a field in an object, it is actually walking through the original JSON text, merrily reading commas and colons and brackets to make sure you get where you are going. This is the key to On Demand's performance: since it's just an iterator, it lets you parse values as you use them. And particularly, it lets you skip values you do not want to use.

+

We refer to "On Demand" as a front-end component since it is an interface between the low-level parsing functions and the user. It hides much of the complexity of parsing JSON documents.

+

+Parser, Document and JSON Scope

+

For code safety, you should keep (1) the parser instance, (2) the input string and (3) the document instance alive throughout your parsing. Additionally, you should follow the following rules:

+
    +
  • A parser may have at most one document open at a time, since it holds allocated memory used for the parsing.
  • +
  • By design, you should only have one document instance per JSON document. Thus, if you must pass a document instance to a function, you should avoid passing it by value: choose to pass it by reference instance to avoid the copy. (We also provide a document_reference class if you need to pass by value.)
  • +
+

During the iterate call, the original JSON text is never modified–only read. After you are done with the document, the source (whether file or string) can be safely discarded.

+

For best performance, a parser instance should be reused over several files: otherwise you will needlessly reallocate memory, an expensive process. It is also possible to avoid entirely memory allocations during parsing when using simdjson. See our performance notes for details.

+

+C++11 Support and string_view

+

The simdjson library builds on compilers supporting the C++11 standard. It is also a strict requirement: we have no plan to support older C++ compilers.

+

We represent parsed Unicode (UTF-8) strings in simdjson using the std::string_view class. It avoids the need to copy the data, as would be necessary with the std::string class. It also avoids the pitfalls of null-terminated C strings. It makes it easier for our users to copy the data into their own favorite class instances (e.g., alternatives to std::string).

+

A std::string_view instance is effectively just a pointer to a region in memory representing a string. In simdjson, we return std::string_view instances that either point within the input string you parsed, or to a temporary string buffer inside our parser class instances. When using std::string_view instances, it is your responsibility to ensure that std::string_view instance does not outlive the pointed-to memory (e.g., either the input buffer or the parser instance). Furthermore, some operations reset the string buffer inside our parser instances: e.g., when we parse a new document. Thus a std::string_view instance is often best viewed as a temporary string value that is tied to the document you are parsing. At the cost of some memory allocation, you may convert your std::string_view instances for long-term storage into std::string instances: std::string mycopy(view) (C++17) or std::string mycopy(view.begin(), view.end()) (prior to C++17).

+

The std::string_view class has become standard as part of C++17 but it is not always available on compilers which only supports C++11. When we detect that string_view is natively available, we define the macro SIMDJSON_HAS_STRING_VIEW.

+

When we detect that it is unavailable, we use string-view-lite as a substitute. In such cases, we use the type alias using string_view = nonstd::string_view; to offer the same API, irrespective of the compiler and standard library. The macro SIMDJSON_HAS_STRING_VIEW will be undefined to indicate that we emulate string_view.

+

Some users prefer to use non-JSON native encoding formats such as UTF-16 or UTF-32. Users may transcode the UTF-8 strings produced by the simdjson library to other formats. See the simdutf library, for example.

+

+Using the Parsed JSON

+

We recommend that you first compile and run your code in Debug mode: under Visual Studio, it means having the _DEBUG macro defined, and, for other compilers, it means leaving the __OPTIMIZE__ macro undefined. The simdjson code will set SIMDJSON_DEVELOPMENT_CHECKS=1. Alternatively, you can set the macro SIMDJSON_DEVELOPMENT_CHECKS to 1 prior to including the simdjson.h header to enable these additional checks: just make sure you remove the definition once your code has been tested. When SIMDJSON_DEVELOPMENT_CHECKS is set to 1, the simdjson library runs additional (expensive) tests on your code to help ensure that you are using the library in a safe manner. Once your code has been tested, you can then run it in Release mode: under Visual Studio, it means having the _DEBUG macro undefined, and, for other compilers, it means setting __OPTIMIZE__ to a positive integer. You can also forcefully disable these checks by setting SIMDJSON_DEVELOPMENT_CHECKS to 0. Once your code is tested, we further encourage you to define NDEBUG in your Release builds to disable additional runtime testing and get the best performance.

+

Once you have a document (simdjson::ondemand::document), you can navigate it with idiomatic C++ iterators, operators and casts. Besides the document instances and native types (double, uint64_t, int64_t, bool), we also access Unicode (UTF-8) strings (std::string_view), objects (simdjson::ondemand::object) and arrays (simdjson::ondemand::array). We also have a generic ephemeral type (simdjson::ondemand::value) which represents a potential array or object, or scalar type (double, uint64_t, int64_t, bool, null, string) inside an array or an object. Both generic types (simdjson::ondemand::document and simdjson::ondemand::value) have a type() method returning a json_type value describing the value (json_type::array, json_type::object, json_type::number, json_type::string, json_type::boolean, json_type::null). A generic value (simdjson::ondemand::value) is only valid temporarily, as soon as you access other values, other keys in objects, etc. it becomes invalid: you should therefore consume the value immediately by converting it to a scalar type, an array or an object.

+

Advanced users who need to determine the number types (integer or float) dynamically, should review our section dynamic number types. Indeed, we have an additional ondemand::number type which may represent either integers or floating-point values, depending on how the numbers are formatted. floating-point values followed by an integer.

+

We invite you to keep the following rules in mind:

    +
  1. While you are accessing the document, the document instance should remain in scope: it is your "iterator" which keeps track of where you are in the JSON document. By design, there is one and only one document instance per JSON document.
  2. +
  3. Because On Demand is really just an iterator, you must fully consume the current object or array before accessing a sibling object or array.
  4. +
  5. Values can only be consumed once, you should get the values and store them if you plan to need them multiple times. You are expected to access the keys of an object just once. You are expected to go through the values of an array just once.
  6. +
+

The following specific instructions indicate how to use the JSON when exceptions are enabled, but simdjson has full, idiomatic support for users who avoid exceptions. See the simdjson error handling documentation for more.

+
    +
  • Validate What You Use: When calling iterate, the document is quickly indexed. If it is not a valid Unicode (UTF-8) string or if there is an unclosed string, an error may be reported right away. However, it is not fully validated. On Demand only fully validates the values you use and the structure leading to it.
  • +
  • Extracting Values: You can cast a JSON element to a native type: double(element). This works for std::string_view, double, uint64_t, int64_t, bool, ondemand::object and ondemand::array. We also have explicit methods such as get_string(), get_double(), get_uint64(), get_int64(), get_bool(), get_object() and get_array(). After a cast or an explicit method, the number, string or boolean will be parsed, or the initial [ or { will be verified. An exception is thrown if the cast is not possible. The get_string() returns a valid UTF-8 string, after unescaping characters as needed: unmatched surrogate pairs are treated as an error. When calling get_uint64() and get_int64(), if the number does not fit in a corresponding 64-bit integer type, it is also considered an error.
  • +
+
+

IMPORTANT NOTE: values can only be parsed once. Since documents are iterators, once you have parsed a value (such as by casting to double), you cannot get at it again. It is an error to call get_string() twice on an object (or to cast an object twice to std::string_view).

+
+

* Field Access: To get the value of the "foo" field in an object, use object["foo"]. This will scan through the object looking for the field with the matching string, doing a character-by-character comparison. For efficiency reason, you should avoid looking up the same field repeatedly: e.g., do not do object["foo"] followed by object["foo"] with the same object instance. If you consume an object twice: std::string_view(object["foo"] followed by std::string_view(object["foo"], your code is in error. Furthermore, you can only consume one field at a time, on the same object. The value instance you get from content["bids"] becomes invalid when you call content["asks"]. If you have retrieved content["bids"].get_array() and you later call content["asks"].get_array(), then the first array should no longer be accessed: it would be unsafe to do so. You can detect such mistakes by first compiling and running the code in Debug mode: an OUT_OF_ORDER_ITERATION error is generated.

+
+

NOTE: JSON allows you to escape characters in keys. E.g., the key "date" may be written as "\u0064\u0061\u0074\u0065". By default, simdjson does not unescape keys when matching by default. Thus if you search for the key "date" and the JSON document uses "\u0064\u0061\u0074\u0065" as a key, it will not be recognized. This is not generally a problem. Nevertheless, if you do need to support escaped keys, the method unescaped_key() provides the desired unescaped keys by parsing and writing out the unescaped keys to a string buffer and returning a std::string_view instance. You should expect a performance penalty when using unescaped_key().

{c++}
+
> auto json = R"({"k\u0065y": 1})"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
ondemand::object object = doc.get_object();
+
for(auto field : object) {
+
// parses and writes out the key, after unescaping it,
+
// to a string buffer. It causes a performance penalty.
+
std::string_view keyv = field.unescaped_key();
+
if(keyv == "key") { std::cout << uint64_t(field.value()); }
+
}
+

By default, field lookup is order-insensitive, so you can look up values in any order. However, we still encourage you to look up fields in the order you expect them in the JSON, as it is still faster.

+

If you want to enforce finding fields in order, you can use object.find_field("foo") instead. This will only look forward, and will fail to find fields in the wrong order: for example, this will fail:

+
{c++}
+
ondemand::parser parser;
+
auto json = R"( { "x": 1, "y": 2 } )"_padded;
+
auto doc = parser.iterate(json);
+
double y = doc.find_field("y"); // The cursor is now after the 2 (at })
+
double x = doc.find_field("x"); // This fails, because there are no more fields after "y"
+

By contrast, using the default (order-insensitive) lookup succeeds:

+
{c++}
+
ondemand::parser parser;
+
auto json = R"( { "x": 1, "y": 2 } )"_padded;
+
auto doc = parser.iterate(json);
+
double y = doc["y"]; // The cursor is now after the 2 (at })
+
double x = doc["x"]; // Success: [] loops back around to find "x"
+
+

* Array Iteration: To iterate through an array, use for (auto value : array) { ... }. This will step through each value in the JSON array.

+

If you know the type of the value, you can cast it right there, too! for (double value : array) { ... }.

    +
  • Object Iteration: You can iterate through an object's fields, as well: for (auto field : object) { ... }
      +
    • field.unescaped_key() will get you the unescaped key string.
    • +
    • field.value() will get you the value, which you can then use all these other methods on.
    • +
    +
  • +
  • Array Index: Because it is forward-only, you cannot look up an array element by index by index. Instead, you should iterate through the array and keep an index yourself.
  • +
  • Output to strings: Given a document, a value, an array or an object in a JSON document, you can output a JSON string version suitable to be parsed again as JSON content: simdjson::to_json_string(element). A call to to_json_string consumes fully the element: if you apply it on a document, the JSON pointer is advanced to the end of the document. The simdjson::to_json_string does not allocate memory. The to_json_string function should not be confused with retrieving the value of a string instance which are escaped and represented using a lightweight std::string_view instance pointing at an internal string buffer inside the parser instance. To illustrate, the first of the following two code segments will print the unescaped string "test" complete with the quote whereas the second one will print the escaped content of the string (without the quotes).
    +

    ```C++ // serialize a JSON to an escaped std::string instance so that it can be parsed again as JSON auto silly_json = R"( { "test": "result" } )"_padded; ondemand::document doc = parser.iterate(silly_json); std::cout << simdjson::to_json_string(doc["test"]) << std::endl; // Requires simdjson 1.0 or better >` C++ // retrieves an unescaped string value as a string_view instance auto silly_json = R"( { "test": "result" } )"_padded; ondemand::document doc = parser.iterate(silly_json); std::cout << std::string_view(doc["test"]) << std::endl; >``` </blockquote> You can useto_json_stringto efficiently extract components of a JSON document to reconstruct a new JSON document, as in the following example: <blockquote>``C++ auto cars_json = R"( [ + { "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] }, + { "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] }, + { "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] } +] )"_padded; std::vector<std::string_view> arrays; // We are going to collect string_view instances which point inside the cars_json string // and are therefore valid as long as cars_json remains in scope. { ondemand::parser parser; for (ondemand::object car : parser.iterate(cars_json)) { if(uint64_t(car["year"]) > 2000) { arrays.push_back(simdjson::to_json_string(car["tire_pressure"])); } } } // We can now convert to a JSON string: std::ostringstream oss; oss << "["; for(size_t i = 0; i < arrays.size(); i++) { if(i>0) { oss << ","; } oss << arrays[i]; } oss << "]"; auto json_string = oss.str(); // json_string == "[[ 40.1, 39.9, 37.7, 40.4 ],[ 30.1, 31.0, 28.6, 28.7 ]]" >``` </blockquote>* **Extracting Values (without exceptions):** You can use a variant usage ofget()with error codes to avoid exceptions. You first declare the variable of the appropriate type (double, uint64_t,int64_t,bool,ondemand::object<tt>andondemand::array<tt>) and pass it by reference toget()` which gives you back an error code: e.g.,

    +
    {c++}
    +
    auto abstract_json = R"(
    +
    { "str" : { "123" : {"abc" : 3.14 } } }
    +
    )"_padded;
    +
    ondemand::parser parser;
    +
    +
    double value;
    +
    auto doc = parser.iterate(abstract_json);
    +
    auto error = doc["str"]["123"]["abc"].get(value);
    +
    if (error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
    +
    cout << value << endl; // Prints 3.14
    +

    This examples also show how we can string several operations and only check for the error once, a strategy we call error chaining. Though error chaining makes the code very compact, it also makes error reporting less precise: in this instance, you may get the same error whether the field "str", "123" or "abc" is missing. If you need to break down error handling per operation, avoid error chaining.

    +
    +
  • +
  • Counting elements in arrays: Sometimes it is useful to scan an array to determine its length prior to parsing it. For this purpose, array instances have a count_elements method. Users should be aware that the count_elements method can be costly since it requires scanning the whole array. You should only call count_elements as a last resort as it may require scanning the document twice or more. You may use it as follows if your document is itself an array:
  • +
+
{C++}
+
auto cars_json = R"( [ 40.1, 39.9, 37.7, 40.4 ] )"_padded;
+
auto doc = parser.iterate(cars_json);
+
size_t count = doc.count_elements(); // requires simdjson 1.0 or better
+
std::vector<double> values(count);
+
size_t index = 0;
+
for(double x : doc) { values[index++] = x; }
+

If you access an array inside a document, you can use the count_elements method as follow. You should not let the array instance go out of scope before consuming it after calling the count_elements method:

ondemand::parser parser;
+
auto cars_json = R"( { "test":[ { "val1":1, "val2":2 }, { "val1":1, "val2":2 } ] } )"_padded;
+
auto doc = parser.iterate(cars_json);
+
auto test_array = doc.find_field("test").get_array();
+
size_t count = test_array.count_elements(); // requires simdjson 1.0 or better
+
std::cout << "Number of elements: " << count << std::endl;
+
for(ondemand::object elem: test_array) {
+
std::cout << simdjson::to_json_string(elem);
+
}
+
    +
  • Counting fields in objects: Other times, it is useful to scan an object to determine the number of fields prior to parsing it. For this purpose, object instances have a count_fields method. Again, users should be aware that the count_fields method can be costly since it requires scanning the whole objects. You should only call count_fields as a last resort as it may require scanning the document twice or more. You may use it as follows if your document is itself an object:
  • +
+
{C++}
+
ondemand::parser parser;
+
auto json = R"( { "test":{ "val1":1, "val2":2 } } )"_padded;
+
auto doc = parser.iterate(json);
+
size_t count = doc.count_fields(); // requires simdjson 1.0 or better
+
std::cout << "Number of fields: " << new_count << std::endl; // Prints "Number of fields: 1"
+

Similarly to count_elements, you should not let an object instance go out of scope before consuming it after calling the count_fields method. If you access an object inside a document, you can use the count_fields method as follow.

ondemand::parser parser;
+
auto json = R"( { "test":{ "val1":1, "val2":2 } } )"_padded;
+
auto doc = parser.iterate(json);
+
auto test_object = doc.find_field("test").get_object();
+
size_t count = test_object.count_fields(); // requires simdjson 1.0 or better
+
std::cout << "Number of fields: " << count << std::endl; // Prints "Number of fields: 2"
+
    +
  • Tree Walking and JSON Element Types: Sometimes you don't necessarily have a document with a known type, and are trying to generically inspect or walk over JSON elements. You can also represent arbitrary JSON values with ondemand::value instances: it can represent anything except a scalar document (lone number, string, null or Boolean). You can check for scalar documents with the method scalar(). You can query the type of a document or a value with the type() method. The type() method does not consume or validate documents and values, but it tells you whether they are

      +
    • arrays (json_type::array),
    • +
    • objects (json_type::object)
    • +
    • numbers (json_type::number),
    • +
    • strings (json_type::string),
    • +
    • Booleans (json_type::boolean),
    • +
    • null (json_type::null).
    • +
    +

    You must still validate and consume the values (e.g., call is_null()) after calling type(). You may also access raw strings. For example, the following is a quick and dirty recursive function that verbosely prints the JSON document as JSON. This example also illustrates lifecycle requirements: the document instance holds the iterator. The document must remain in scope while you are accessing instances of value, object and array.

    {c++}
    +
    void recursive_print_json(ondemand::value element) {
    +
    bool add_comma;
    +
    switch (element.type()) {
    +
    case ondemand::json_type::array:
    +
    cout << "[";
    +
    add_comma = false;
    +
    for (auto child : element.get_array()) {
    +
    if (add_comma) {
    +
    cout << ",";
    +
    }
    +
    // We need the call to value() to get
    +
    // an ondemand::value type.
    +
    recursive_print_json(child.value());
    +
    add_comma = true;
    +
    }
    +
    cout << "]";
    +
    break;
    +
    case ondemand::json_type::object:
    +
    cout << "{";
    +
    add_comma = false;
    +
    for (auto field : element.get_object()) {
    +
    if (add_comma) {
    +
    cout << ",";
    +
    }
    +
    // key() returns the key as it appears in the raw
    +
    // JSON document, if we want the unescaped key,
    +
    // we should do field.unescaped_key().
    +
    cout << "\"" << field.key() << "\": ";
    +
    recursive_print_json(field.value());
    +
    add_comma = true;
    +
    }
    +
    cout << "}\n";
    +
    break;
    +
    case ondemand::json_type::number:
    +
    // assume it fits in a double
    +
    cout << element.get_double();
    +
    break;
    +
    case ondemand::json_type::string:
    +
    // get_string() would return escaped string, but
    +
    // we are happy with unescaped string.
    +
    cout << "\"" << element.get_raw_json_string() << "\"";
    +
    break;
    +
    case ondemand::json_type::boolean:
    +
    cout << element.get_bool();
    +
    break;
    +
    case ondemand::json_type::null:
    +
    // We check that the value is indeed null
    +
    // otherwise: an error is thrown.
    +
    if(element.is_null()) {
    +
    cout << "null";
    +
    }
    +
    break;
    +
    }
    +
    }
    +
    void basics_treewalk() {
    +
    padded_string json = R"( [
    +
    { "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
    +
    { "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
    +
    { "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
    +
    ] )"_padded;
    +
    ondemand::parser parser;
    +
    ondemand::document doc = parser.iterate(json);
    +
    ondemand::value val = doc;
    +
    recursive_print_json(val);
    +
    std::cout << std::endl;
    +
    }
    +
  • +
+

+Using the Parsed JSON: Additional examples

+

Let us review these concepts with some additional examples. For simplicity, we omit the include clauses (#include "simdjson.h") as well as namespace-using clauses (using namespace simdjson;).

+

The first example illustrates how we can chain operations. In this instance, we repeatedly select keys using the bracket operator (doc["str"]) and then finally request a number (using get_double()). It is safe to write code in this manner: if any step causes an error, the error status propagates and an exception is thrown at the end. You do not need to constantly check for errors.

+
{C++}
+
auto abstract_json = R"(
+
{ "str" : { "123" : {"abc" : 3.14 } } }
+
)"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(abstract_json);
+
cout << doc["str"]["123"]["abc"].get_double() << endl; // Prints 3.14
+

In the following example, we start with a JSON document that contains an array of objects. We iterate through the objects using a for-loop. Within each object, we use the bracket operator (e.g., car["make"]) to select values. We also show how we can iterate through an array, corresponding to the key tire_pressure, that is contained inside each object.

+
{c++}
+
ondemand::parser parser;
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
+
// Iterating through an array of objects
+
for (ondemand::object car : parser.iterate(cars_json)) {
+
// Accessing a field by name
+
cout << "Make/Model: " << std::string_view(car["make"]) << "/" << std::string_view(car["model"]) << endl;
+
+
// Casting a JSON element to an integer
+
uint64_t year = car["year"];
+
cout << "- This car is " << 2020 - year << "years old." << endl;
+
+
// Iterating through an array of floats
+
double total_tire_pressure = 0;
+
for (double tire_pressure : car["tire_pressure"]) {
+
total_tire_pressure += tire_pressure;
+
}
+
cout << "- Average tire pressure: " << (total_tire_pressure / 4) << endl;
+
}
+

The following example illustrates how you may also iterate through object values, effectively visiting all key-value pairs in the object.

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
using namespace std;
+
using namespace simdjson;
+
+
// ...
+
+
ondemand::parser parser;
+
auto points_json = R"( [
+
{ "12345" : {"x":12.34, "y":56.78, "z": 9998877} },
+
{ "12545" : {"x":11.44, "y":12.78, "z": 11111111} }
+
] )"_padded;
+
+
// Parse and iterate through an array of objects
+
for (ondemand::object points : parser.iterate(points_json)) {
+
// Iterating through an object, you iterate through key-value pairs (a 'field').
+
for (auto point : points) {
+
// Get the key corresponding the the field 'point'.
+
cout << "id: " << std::string_view(point.unescaped_key()) << ": (";
+
// Get the value corresponding the the field 'point'.
+
ondemand::object xyz = point.value();
+
cout << xyz["x"].get_double() << ", ";
+
cout << xyz["y"].get_double() << ", ";
+
cout << xyz["z"].get_int64() << endl;
+
}
+
}
+

+Minifying JSON strings without parsing

+

In some cases, you may have valid JSON strings that you do not wish to parse but that you wish to minify. That is, you wish to remove all unnecessary spaces. We have a fast function for this purpose (simdjson::minify(const char * input, size_t length, const char * output, size_t& new_length)). This function does not validate your content, and it does not parse it. It is much faster than parsing the string and re-serializing it in minified form (simdjson::minify(parser.parse())). Usage is relatively simple. You must pass an input pointer with a length parameter, as well as an output pointer and an output length parameter (by reference). The output length parameter is not read, but written to. The output pointer should point to a valid memory region that is as large as the original string length. The input pointer and input length are read, but not written to.

+
{C++}
+
// Starts with a valid JSON document as a string.
+
// It does not have to be null-terminated.
+
const char * some_string = "[ 1, 2, 3, 4] ";
+
size_t length = std::strlen(some_string);
+
// Create a buffer to receive the minified string. Make sure that there is enough room (length bytes).
+
std::unique_ptr<char[]> buffer{new char[length]};
+
size_t new_length{}; // It will receive the minified length.
+
auto error = simdjson::minify(some_string, length, buffer.get(), new_length);
+
// The buffer variable now has "[1,2,3,4]" and new_length has value 9.
+

Though it does not validate the JSON input, it will detect when the document ends with an unterminated string. E.g., it would refuse to minify the string "this string is not terminated because of the missing final quote.

+

+UTF-8 validation (alone)

+

The simdjson library has fast functions to validate UTF-8 strings. They are many times faster than most functions commonly found in libraries. You can use our fast functions, even if you do not care about JSON.

+
{C++}
+
const char * some_string = "[ 1, 2, 3, 4] ";
+
size_t length = std::strlen(some_string);
+
bool is_ok = simdjson::validate_utf8(some_string, length);
+

The UTF-8 validation function merely checks that the input is valid UTF-8: it works with strings in general, not just JSON strings.

+

Your input string does not need any padding. Any string will do. The validate_utf8 function does not do any memory allocation on the heap, and it does not throw exceptions.

+

If you find yourself needing only fast Unicode functions, consider using the simdutf library instead: https://github.com/simdutf/simdutf

+

+JSON Pointer

+

The simdjson library also supports JSON pointer through the at_pointer() method, letting you reach further down into the document in a single call. JSON pointer is supported by both the DOM approach as well as the On Demand approach.

+

Note: The On Demand implementation of JSON pointer relies on find_field which implies that it does not unescape keys when matching.

+

Consider the following example:

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
ondemand::parser parser;
+
auto cars = parser.iterate(cars_json);
+
cout << cars.at_pointer("/0/tire_pressure/1") << endl; // Prints 39.9
+

A JSON Path is a sequence of segments each starting with the '/' character. Within arrays, an integer index allows you to select the indexed node. Within objects, the string value of the key allows you to select the value. If your keys contain the characters '/' or '~', they must be escaped as '~1' and '~0' respectively. An empty JSON Path refers to the whole document.

+

For multiple JSON pointer queries on a document, one can call at_pointer multiple times.

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
ondemand::parser parser;
+
auto cars = parser.iterate(cars_json);
+
size_t size = cars.count_elements();
+
+
for (size_t i = 0; i < size; i++) {
+
std::string json_pointer = "/" + std::to_string(i) + "/tire_pressure/1";
+
double x = cars.at_pointer(json_pointer);
+
std::cout << x << std::endl; // Prints 39.9, 31 and 30
+
}
+

Note that at_pointer calls rewind to reset the parser at the beginning of the document. Hence, it invalidates all previously parsed values, objects and arrays: make sure to consume the values between each call to at_pointer. Consider the following example where one wants to store each object from the JSON into a vector of struct car_type:

+
{c++}
+
struct car_type {
+
std::string make;
+
std::string model;
+
uint64_t year;
+
std::vector<double> tire_pressure;
+
car_type(std::string_view _make, std::string_view _model, uint64_t _year,
+
std::vector<double>&& _tire_pressure) :
+
make{_make}, model{_model}, year(_year), tire_pressure(_tire_pressure) {}
+
};
+
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
+
ondemand::parser parser;
+
std::vector<double> measured;
+
ondemand::document cars = parser.iterate(cars_json);
+
std::vector<car_type> content;
+
for (int i = 0; i < 3; i++) {
+
std::string json_pointer = "/" + std::to_string(i);
+
// Each successive at_pointer call invalidates
+
// previously parsed values, strings, objects and array.
+
ondemand::object obj(cars.at_pointer(json_pointer).get_object());
+
// We materialize the object.
+
std::string_view make = obj["make"];
+
std::string_view model = obj["model"];
+
uint64_t year(obj["year"]);
+
// We materialize the array.
+
ondemand::array arr(obj["tire_pressure"].get_array());
+
std::vector<double> values;
+
for(auto x : arr) {
+
double value_double(x.get_double());
+
values.push_back(value_double);
+
}
+
content.emplace_back(make, model, year, std::move(values));
+
}
+

Furthermore, at_pointer calls rewind at the beginning of the call (i.e. the document is not reset after at_pointer). Consider the following example,

+
{c++}
+
auto json = R"( {
+
"k0": 27,
+
"k1": [13,26],
+
"k2": true
+
} )"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
std::cout << doc.at_pointer("/k1/1") << std::endl; // Prints 26
+
std::cout << doc.at_pointer("/k2") << std::endl; // Prints true
+
doc.rewind(); // Need to manually rewind to be able to use find_field properly from start of document
+
std::cout << doc.find_field("k0") << std::endl; // Prints 27
+

When the JSON path is the empty string ("") applied to a scalar document (lone string, number, Boolean or null), a SCALAR_DOCUMENT_AS_VALUE error is returned because scalar document cannot be represented as value instances. You can check that a document is a scalar with the method scalar().

+

+Error Handling

+

Error handing with exception and a single try/catch clause makes the code simple, but it gives you little control over errors. For easier debugging or more robust error handling, you may want to consider our exception-free approach.

+

The entire simdjson API is usable with and without exceptions. All simdjson APIs that can fail return simdjson_result<T>, which is a <value, error_code> pair. You can retrieve the value with .get() without generating an exception, like so:

+
{c++}
+
ondemand::document doc;
+
auto error = parser.iterate(json).get(doc);
+
if (error) { cerr << error << endl; exit(1); }
+

When there is no error, the error code simdjson::SUCCESS is returned: it evaluates as false as a Boolean. We have several error codes to indicate errors, they all evaluate to true as a Boolean: your software should not generally not depend on exact error codes. We may change the error codes in future releases and the exact error codes could vary depending on your system.

+

When you use the code without exceptions, it is your responsibility to check for error before using the result: if there is an error, the result value will not be valid and using it will caused undefined behavior. Most compilers should be able to help you if you activate the right set of warnings: they can identify variables that are written to but never otherwise accessed.

+

Let us illustrate with an example where we try to access a number that is not valid (3.14.1). If we want to proceed without throwing and catching exceptions, we can do so as follows:

+
{C++}
+
bool simple_error_example() {
+
ondemand::parser parser;
+
auto json = R"({"bad number":3.14.1 })"_padded;
+
ondemand::document doc;
+
if( parser.iterate(json).get(doc) != SUCCESS ) { return false; }
+
double x;
+
auto error = doc["bad number"].get_double().get(x);
+
// returns "simdjson::NUMBER_ERROR"
+
if(error != SUCCESS) {
+
std::cout << error << std::endl;
+
return false;
+
}
+
std::cout << "Got " << x << std::endl;
+
return true;
+
}
+

Observe how we verify the error variable before accessing the retrieved number (variable x).

+

The equivalent with exception handling might look as follows.

+
{C++}
+
bool simple_error_example_except() {
+
TEST_START();
+
ondemand::parser parser;
+
auto json = R"({"bad number":3.14.1 })"_padded;
+
try {
+
ondemand::document doc = parser.iterate(json);
+
double x = doc["bad number"].get_double();
+
std::cout << "Got " << x << std::endl;
+
return true;
+
} catch(simdjson_error& e) {
+
// e.error() == NUMBER_ERROR
+
std::cout << e.error() << std::endl;
+
return false;
+
}
+
}
+

Notice how we can retrieve the exact error condition (in this instance simdjson::NUMBER_ERROR) from the exception.

+

We can write a "quick start" example where we attempt to parse the following JSON file and access some data, without triggering exceptions:

{
+
"statuses": [
+
{
+
"id": 505874924095815700
+
},
+
{
+
"id": 505874922023837700
+
}
+
],
+
"search_metadata": {
+
"count": 100
+
}
+
}
+

Our program loads the file, selects value corresponding to key "search_metadata" which expected to be an object, and then it selects the key "count" within that object.

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::ondemand::parser parser;
+
auto error = padded_string::load("twitter.json").get(json);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
simdjson::ondemand::document tweets;
+
error = parser.iterate(json).get(tweets);
+
if( error ) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
simdjson::ondemand::value res;
+
error = tweets["search_metadata"]["count"].get(res);
+
if (error != SUCCESS) {
+
std::cerr << "could not access keys : " << error << std::endl;
+
return EXIT_FAILURE;
+
}
+
std::cout << res << " results." << std::endl;
+
return EXIT_SUCCESS;
+
}
+

The following is a similar example where one wants to get the id of the first tweet without triggering exceptions. To do this, we use ["statuses"].at(0)["id"]. We break that expression down:

+
    +
  • Get the list of tweets (the "statuses" key of the document) using ["statuses"]). The result is expected to be an array.
  • +
  • Get the first tweet using .at(0). The result is expected to be an object.
  • +
  • Get the id of the tweet using ["id"]. We expect the value to be a non-negative integer.
  • +
+

Observe how we use the at method when querying an index into an array, and not the bracket operator.

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::ondemand::parser parser;
+
simdjson::ondemand::document tweets;
+
padded_string json;
+
auto error = padded_string::load("twitter.json").get(json);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
error = parser.iterate(json).get(tweets);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
uint64_t identifier;
+
error = tweets["statuses"].at(0)["id"].get(identifier);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
std::cout << identifier << std::endl;
+
}
+

The at method can only be called once on an array. It cannot be used to iterate through the values of an array.

+

+Error Handling Examples without Exceptions

+

This is how the example in "Using the Parsed JSON" could be written using only error code checking (without exceptions):

+
{c++}
+
bool parse() {
+
ondemand::parser parser;
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
ondemand::document doc;
+
+
// Iterating through an array of objects
+
auto error = parser.iterate(cars_json).get(doc);
+
if(error) { std::cerr << error << std::endl; return false; }
+
ondemand::array cars; // invalid until the get() succeeds
+
error = doc.get_array().get(cars);
+
+
for (auto car_value : cars) {
+
ondemand::object car; // invalid until the get() succeeds
+
error = car_value.get_object().get(car);
+
if(error) { std::cerr << error << std::endl; return false; }
+
+
// Accessing a field by name
+
std::string_view make;
+
std::string_view model;
+
error = car["make"].get(make);
+
if(error) { std::cerr << error << std::endl; return false; }
+
error = car["model"].get(model);
+
if(error) { std::cerr << error << std::endl; return false; }
+
+
cout << "Make/Model: " << make << "/" << model << endl;
+
+
// Casting a JSON element to an integer
+
uint64_t year;
+
error = car["year"].get(year);
+
if(error) { std::cerr << error << std::endl; return false; }
+
cout << "- This car is " << 2020 - year << " years old." << endl;
+
+
// Iterating through an array of floats
+
double total_tire_pressure = 0;
+
ondemand::array pressures;
+
error = car["tire_pressure"].get_array().get(pressures);
+
if(error) { std::cerr << error << std::endl; return false; }
+
for (auto tire_pressure_value : pressures) {
+
double tire_pressure;
+
error = tire_pressure_value.get_double().get(tire_pressure);
+
if(error) { std::cerr << error << std::endl; return false; }
+
total_tire_pressure += tire_pressure;
+
}
+
cout << "- Average tire pressure: " << (total_tire_pressure / 4) << endl;
+
}
+
return true;
+
}
+

For safety, you should only use our ondemand instances (e.g., ondemand::object) after you have initialized them and checked that there is no error:

+
{c++}
+
ondemand::object car; // invalid until the get() succeeds
+
// the `car` instance should not use used before it is initialized
+
error = car_value.get_object().get(car);
+
if(error) {
+
// the `car` instance should not use used
+
} else {
+
// the `car` instance can be safely used
+
}
+

The following examples illustrates how to iterate through the content of an object without having to handle exceptions.

{c++}
+
auto json = R"({"k\u0065y": 1})"_padded;
+
ondemand::parser parser;
+
ondemand::document doc;
+
auto error = parser.iterate(json).get(doc);
+
if(error) { return false; }
+
ondemand::object object; // invalid until the get() succeeds
+
error = doc.get_object().get(object);
+
if(error) { return false; }
+
for(auto field : object) {
+
ondemand::raw_json_string keyv;
+
error = field.key().get(keyv);
+
if(error) { return false; }
+
if(keyv == "key") {
+
uint64_t intvalue;
+
error = field.value().get(intvalue);
+
if(error) { return false; }
+
std::cout << intvalue;
+
}
+
}
+

+Disabling Exceptions

+

The simdjson can be build with exceptions entirely disabled. It checks the __cpp_exceptions macro at compile time. Even if exceptions are enabled in your compiler, you may still disable exceptions specifically for simdjson, by setting SIMDJSON_EXCEPTIONS to 0 (false) at compile-time when building the simdjson library. If you are building with CMake, to ensure you don't write any code that uses exceptions, you compile with SIMDJSON_EXCEPTIONS=OFF. For example, if including the project via cmake:

+
target_compile_definitions(simdjson PUBLIC SIMDJSON_EXCEPTIONS=OFF)
+

+Exceptions

+

Users more comfortable with an exception flow may choose to directly cast the simdjson_result<T> to the desired type:

+
{c++}
+
simdjson::ondemand::document doc = parser.iterate(json); // Throws an exception if there was an error!
+

When used this way, a simdjson_error exception will be thrown if an error occurs, preventing the program from continuing if there was an error.

+

If one is willing to trigger exceptions, it is possible to write simpler code:

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::ondemand::parser parser;
+
padded_string json = padded_string::load("twitter.json");
+
simdjson::ondemand::document tweets = parser.iterate(json);
+
uint64_t identifier = tweets["statuses"].at(0)["id"];
+
std::cout << identifier << std::endl;
+
return EXIT_SUCCESS;
+
}
+

+Current location in document

+

Sometimes, it might be helpful to know the current location in the document during iteration. This is especially useful when encountering errors. The current_location() method on a document instances makes it easy to identify common JSON errors. Users can call the current_location() method on a validdocument instance to retrieve a const char * pointer to the current location in the document. This method also works even after an error has invalidated the document and the parser (e.g. TAPE_ERROR, INCOMPLETE_ARRAY_OR_OBJECT). When the input was a padding_string or another null-terminated source, then you may use the const char * pointer as a C string. As an example, consider the following example where we used the exception-free simdjson interface:

+
{c++}
+
auto broken_json = R"( {"double": 13.06, false, "integer": -343} )"_padded; // Missing key
+
ondemand::parser parser;
+
auto doc = parser.iterate(broken_json);
+
int64_t i;
+
auto error = doc["integer"].get_int64().get(i); // Expect to get integer from "integer" key, but get TAPE_ERROR
+
if (error) {
+
std::cout << error << std::endl; // Prints TAPE_ERROR error message
+
std::cout<< doc.current_location() << std::endl; // Prints "false, "integer": -343} " (location of TAPE_ERROR)
+
}
+

You may also use current_location() with exceptions as follows:

+
{c++}
+
auto broken_json = R"( {"double": 13.06, false, "integer": -343} )"_padded;
+
ondemand::parser parser;
+
ondemand::document doc = parser.iterate(broken_json);
+
try {
+
return int64_t(doc["integer"]);
+
} catch(simdjson_error& err) {
+
std::cerr << doc.current_location() << std::endl;
+
return -1;
+
}
+

In these examples, we tried to access the "integer" key, but since the parser had to go through a value without a key before (false), a TAPE_ERROR error is thrown. The pointer returned by the current_location() method then points at the location of the error. The current_location() may also be used when the error is triggered by a user action, even if the JSON input is valid. Consider the following example:

+
{c++}
+
auto json = R"( [1,2,3] )"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
int64_t i;
+
auto error = doc["integer"].get_int64().get(i); // Incorrect call on array, INCORRECT_TYPE error
+
if (error) {
+
std::cout << error << std::endl; // Prints INCORRECT_TYPE error message
+
std::cout<< doc.current_location() << std::endl; // Prints "[1,2,3] " (location of INCORRECT_TYPE error)
+
}
+

If the location is invalid (i.e. at the end of a document), the current_location() methods returns an OUT_OF_BOUNDS error. For example:

+
{c++}
+
auto json = R"( [1,2,3] )"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
for (auto val : doc) {
+
// Do something with val
+
}
+
std::cout << doc.current_location() << std::endl; // Throws OUT_OF_BOUNDS
+

Conversely, if doc.current_location().error() == simdjson::SUCCESS, then the document has more content.

+

Finally, the current_location() method may also be used even when no exceptions/errors are thrown. This can be helpful for users that want to know the current state of iteration during parsing. For example:

+
{c++}
+
auto json = R"( [[1,2,3], -23.4, {"key": "value"}, true] )"_padded;
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
for (auto val : doc) {
+
ondemand::object obj; // invalid until the get() succeeds
+
auto error = val.get_object().get(obj); // Only get objects
+
if (!error) {
+
std::cout << doc.current_location() << std::endl; // Prints ""key": "value"}, true] "
+
}
+
}
+

The current_location() method requires a valid document instance. If the iterate function fails to return a valid document, then you cannot use current_location() to identify the location of an error in the input string. The errors reported by iterate function include EMPTY if no JSON document is detected, UTF8_ERROR if the string is not a valid UTF-8 string, UNESCAPED_CHARS if a string contains control characters that must be escaped and UNCLOSED_STRING if there is an unclosed string in the document. We do not provide location information for these errors.

+

+Rewinding

+

In some instances, you may need to go through a document more than once. For that purpose, you may call the rewind() method on the document instance. It allows you to restart processing from the beginning without rescanning all of the input data again. It invalidates all values, objects and arrays that you have created so far (including unescaped strings).

+

In the following example, we print on the screen the number of cars in the JSON input file before printout the data.

+
{C++}
+
ondemand::parser parser;
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
+
auto doc = parser.iterate(cars_json);
+
for (simdjson_unused ondemand::object car : doc) {
+
if(car["make"] == "Toyota") { count++; }
+
}
+
std::cout << "We have " << count << " Toyota cars.\n";
+
doc.rewind(); // requires simdjson 1.0 or better
+
for (ondemand::object car : doc) {
+
cout << "Make/Model: " << std::string_view(car["make"]) << "/" << std::string_view(car["model"]) << endl;
+
}
+

Performance note: the On Demand front-end does not materialize the parsed numbers and other values. If you are accessing everything twice, you may need to parse them twice. Thus the rewind functionality is best suited for cases where the first pass only scans the structure of the document.

+

Both arrays and objects have a similar method reset(). It is similar to the document rewind() method, except that it does not rewind the internal string buffer. Thus you should consume values only once even if you can iterate through the array or object more than once. If you unescape a string within an array more than once, you have unsafe code.

+

+Direct Access to the Raw String

+

The simdjson library makes explicit assumptions about types. For examples, numbers must be integers (up to 64-bit integers) or binary64 floating-point numbers. Some users have different needs. For example, some users might want to support big integers. The library makes this possible by providing a raw_json_token method which returns a std::string_view instance containing the value as a string which you may then parse as you see fit.

+
{C++}
+
simdjson::ondemand::parser parser;
+
simdjson::padded_string docdata = R"({"value":12321323213213213213213213213211223})"_padded;
+
simdjson::ondemand::document doc = parser.iterate(docdata);
+
simdjson::ondemand::object obj = doc.get_object();
+
std::string_view token = obj["value"].raw_json_token();
+
// token has value 12321323213213213213213213213211223, it points inside the input string
+

The raw_json_token method even works when the JSON value is a string. In such cases, it will return the complete string with the quotes and with eventual escaped sequences as in the source document.

+
{C++}
+
simdjson::ondemand::parser parser;
+
simdjson::padded_string docdata = R"({"value":"12321323213213213213213213213211223"})"_padded;
+
simdjson::ondemand::document doc = parser.iterate(docdata);
+
simdjson::ondemand::object obj = doc.get_object();
+
string_view token = obj["value"].raw_json_token();
+
// token has value "12321323213213213213213213213211223", it points inside the input string
+

The raw_json_token() should be fast and free of allocation.

+

+Newline-Delimited JSON (ndjson) and JSON lines

+

When processing large inputs (e.g., in the context of data engineering), engineers commonly serialize data into streams of multiple JSON documents. That is, instead of one large (e.g., 2 GB) JSON document containing multiple records, it is often preferable to write out multiple records as independent JSON documents, to be read one-by-one.

+

The simdjson library also supports multithreaded JSON streaming through a large file containing many smaller JSON documents in either ndjson or JSON lines format. If your JSON documents all contain arrays or objects, we even support direct file concatenation without whitespace. However, if there is content between your JSON documents, it should be exclusively ASCII white-space characters.

+

The concatenated file has no size restrictions (including larger than 4GB), though each individual document must be no larger than 4 GB.

+

Here is an example:

+
{c++}
+
auto json = R"({ "foo": 1 } { "foo": 2 } { "foo": 3 } )"_padded;
+
ondemand::parser parser;
+
ondemand::document_stream docs = parser.iterate_many(json);
+
for (auto doc : docs) {
+
std::cout << doc["foo"] << std::endl;
+
}
+
// Prints 1 2 3
+

Unlike parser.iterate, parser.iterate_many may parse "on demand" (lazily). That is, no parsing may have been done before you enter the loop for (auto doc : docs) { and you should expect the parser to only ever fully parse one JSON document at a time.

+

As with parser.iterate, when calling parser.iterate_many(string), no copy is made of the provided string input. The provided memory buffer may be accessed each time a JSON document is parsed. Calling parser.iterate_many(string) on a temporary string buffer (e.g., docs = parser.parse_many("[1,2,3]"_padded)) is unsafe (and will not compile) because the document_stream instance needs access to the buffer to return the JSON documents.

+

The iterate_many function can also take an optional parameter size_t batch_size which defines the window processing size. It is set by default to a large value (1000000 corresponding to 1 MB). None of your JSON documents should exceed this window size, or else you will get the error simdjson::CAPACITY. You cannot set this window size larger than 4 GB: you will get the error simdjson::CAPACITY. The smaller the window size is, the less memory the function will use. Setting the window size too small (e.g., less than 100 kB) may also impact performance negatively. Leaving it to 1 MB is expected to be a good choice, unless you have some larger documents.

+

The following toy examples illustrates how to get capacity errors. It is an artificial example since you should never use a batch_size of 50 bytes (it is far too small).

+
{c++}
+
// We are going to set the capacity to 50 bytes which means that we cannot
+
// loading a document longer than 50 bytes. The first few documents are small,
+
// but the last one is large. We will get an error at the last document.
+
auto json = R"([1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100])"_padded;
+
ondemand::parser parser;
+
ondemand::document_stream stream;
+
size_t counter{0};
+
auto error = parser.iterate_many(json, 50).get(stream);
+
if( error ) { /* handle the error */ }
+
for (auto doc: stream) {
+
if(counter < 6) {
+
int64_t val;
+
error = doc.at_pointer("/4").get(val);
+
if( error ) { /* handle the error */ }
+
std::cout << "5 = " << val << std::endl;
+
} else {
+
ondemand::value val;
+
error = doc.at_pointer("/4").get(val);
+
// error == simdjson::CAPACITY
+
if(error) {
+
std::cerr << error << std::endl;
+
// We left 293 bytes unprocessed at the tail end of the input.
+
std::cout << " unprocessed bytes at the end: " << stream.truncated_bytes() << std::endl;
+
break;
+
}
+
}
+
counter++;
+
}
+

This example should print out:

+
5 = 5
+
5 = 5
+
5 = 5
+
5 = 5
+
5 = 5
+
5 = 5
+
This parser can't support a document that big
+
unprocessed bytes at the end: 293
+

If your documents are large (e.g., larger than a megabyte), then the iterate_many function is maybe ill-suited. It is really meant to support reading efficiently streams of relatively small documents (e.g., a few kilobytes each). If you have larger documents, you should use other functions like iterate.

+

See iterate_many.md for detailed information and design.

+

+Parsing Numbers Inside Strings

+

Though the JSON specification allows for numbers and string values, many engineers choose to integrate the numbers inside strings, e.g., they prefer {"a":"1.9"} to{"a":1.9}. The simdjson library supports parsing valid numbers inside strings which makes it more convenient for people working with those types of documents. This feature is supported through three methods: get_double_in_string, get_int64_in_string and get_uint64_in_string. However, it is important to note that these methods are not substitute to the regular get_double, get_int64 and get_uint64. The usage of the get_*_in_string methods is solely to parse valid JSON numbers inside strings, and so we expect users to call these methods appropriately. In particular, a valid JSON number has no leading and no trailing whitespaces, and the strings "nan", "1e" and "infinity" will not be accepted as valid numbers. As an example, suppose we have the following JSON text:

+
{c++}
+
auto json =
+
{
+
"ticker":{
+
"base":"BTC",
+
"target":"USD",
+
"price":"443.7807865468",
+
"volume":"31720.1493969300",
+
"change":"Infinity",
+
"markets":[
+
{
+
"market":"bitfinex",
+
"price":"447.5000000000",
+
"volume":"10559.5293639000"
+
},
+
{
+
"market":"bitstamp",
+
"price":"448.5400000000",
+
"volume":"11628.2880079300"
+
},
+
{
+
"market":"btce",
+
"price":"432.8900000000",
+
"volume":"8561.0563600000"
+
}
+
]
+
},
+
"timestamp":1399490941,
+
"timestampstr":"1399490941"
+
}
+

Now, suppose that a user wants to get the time stamp from the timestampstr key. One could do the following:

+
{c++}
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
uint64_t time = doc.at_pointer("/timestampstr").get_uint64_in_string();
+
std::cout << time << std::endl; // Prints 1399490941
+

Another thing a user might want to do is extract the markets array and get the market name, price and volume. Here is one way to do so:

+
{c++}
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
+
// Getting markets array
+
ondemand::array markets = doc.find_field("ticker").find_field("markets").get_array();
+
// Iterating through markets array
+
for (auto value : markets) {
+
std::cout << "Market: " << value.find_field("market").get_string();
+
std::cout << "\tPrice: " << value.find_field("price").get_double_in_string();
+
std::cout << "\tVolume: " << value.find_field("volume").get_double_in_string() << std::endl;
+
}
+
+
/* The above prints
+
Market: bitfinex Price: 447.5 Volume: 10559.5
+
Market: bitstamp Price: 448.54 Volume: 11628.3
+
Market: btce Price: 432.89 Volume: 8561.06
+
*/
+

Finally, here is an example dealing with errors where the user wants to convert the string "Infinity"("change" key) to a float with infinity value.

+
{c++}
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
// Get "change"/"Infinity" key/value pair
+
ondemand::value value = doc.find_field("ticker").find_field("change");
+
double d;
+
std::string_view view;
+
auto error = value.get_double_in_string().get(d);
+
// Check if parsed value into double successfully
+
if (error) {
+
error = value.get_string().get(view);
+
if (error) { /* Handle error */ }
+
else if (view == "Infinity") {
+
d = std::numeric_limits::infinity();
+
}
+
else { /* Handle wrong value */ }
+
}
+

It is also important to note that when dealing an invalid number inside a string, simdjson will report a NUMBER_ERROR error if the string begins with a number whereas simdjson will report a INCORRECT_TYPE error otherwise.

+

The *_in_string methods can also be called on a single document instance: e.g., when your document consist solely of a quoted number.

+

+Dynamic Number Types

+

The JSON standard does not offer strongly typed numbers. It suggests that using the binary64 type (double in C++) is a safe choice, but little else. Given the JSON array [1.0,1], it is not specified whether it is an array of two floating-point numbers, two integers, or one floating-point number followed by an integer.

+

Given an ondemand::value instance, you may ask whether it is a negative value with the is_negative() method. The function is inexpensive.

+

To occasionally distinguish between floating-point values and integers given an ondemand::value instance, you may call the is_integer() method. We recognize an integer number by the lack decimal point and the lack of exponential suffix. E.g., 1e1 is always considered to be a floating-point number. The is_integer() method does not consume the value, but it scans the number string. You should avoid calling it repeatedly.

+

If you need to determine both the type of the number (integer or floating-point) and its value efficiently, you may call the get_number() method on the ondemand::value instance. Upon success, it returns an ondemand::number instance.

+

An ondemand::number instance may contain an integer value or a floating-point value. Thus it is a dynamically typed number. Before accessing the value, you must determine the detected type:

+
    +
  • number.get_number_type() has value number_type::signed_integer if we have a integer in [-9223372036854775808,9223372036854775808). You can recover the value by the get_int64() method applied on the ondemand::number instance. When number.get_number_type() has value number_type::signed_integer, you also have that number.is_int64() is true. Calling get_int64() on the ondemand::number instance when number.get_number_type() is not number_type::signed_integer is unsafe. You may replace get_int64() by a cast to a int64_t value.
  • +
  • number.get_number_type() has value number_type::unsigned_integer if we have a integer in [9223372036854775808,18446744073709551616). You can recover the value by the get_uint64() method applied on the ondemand::number instance. When number.get_number_type() has value number_type::unsigned_integer, you also have that number.is_uint64() is true. Calling get_uint64() on the ondemand::number instance when number.get_number_type() is not number_type::unsigned_integer is unsafe. You may replace get_uint64() by a cast to a uint64_t value.
  • +
  • number.get_number_type() has value number_type::floating_point_number if we have and we have a floating-point (binary64) number. You can recover the value by the get_double() method applied on the ondemand::number instance. When number.get_number_type() has value number_type::floating_point_number, you also have that number.is_double() is true. Calling get_double() on the ondemand::number instance when number.get_number_type() is not number_type::floating_point_number is unsafe. You may replace get_double() by a cast to a double value.
  • +
+

You must check the type before accessing the value: it is an error to call get_int64() when number.get_number_type() is not number_type::signed_integer and when number.is_int64() is false. You are responsible for this check as the user of the library.

+

The get_number() function is designed with performance in mind. When calling get_number(), you scan the number string only once, determining efficiently the type and storing it in an efficient manner.

+

Consider the following example:

{C++}
+
ondemand::parser parser;
+
padded_string docdata = R"([1.0, 3, 1, 3.1415,-13231232,9999999999999999999])"_padded;
+
ondemand::document doc = parser.iterate(docdata);
+
ondemand::array arr = doc.get_array();
+
for(ondemand::value val : arr) {
+
std::cout << val << " ";
+
std::cout << "negative: " << val.is_negative() << " ";
+
std::cout << "is_integer: " << val.is_integer() << " ";
+
ondemand::number num = val.get_number();
+
ondemand::number_type t = num.get_number_type();
+
switch(t) {
+
case ondemand::number_type::signed_integer:
+
std::cout << "integer: " << int64_t(num) << " ";
+
std::cout << "integer: " << num.get_int64() << std::endl;
+
break;
+
case ondemand::number_type::unsigned_integer:
+
std::cout << "large 64-bit integer: " << uint64_t(num) << " ";
+
std::cout << "large 64-bit integer: " << num.get_uint64() << std::endl;
+
break;
+
case ondemand::number_type::floating_point_number:
+
std::cout << "float: " << double(num) << " ";
+
std::cout << "float: " << num.get_double() << std::endl;
+
break;
+
}
+
}
+

It will output:

+
1.0 negative: 0 is_integer: 0 float: 1 float: 1
+
3 negative: 0 is_integer: 1 integer: 3 integer: 3
+
1 negative: 0 is_integer: 1 integer: 1 integer: 1
+
3.1415 negative: 0 is_integer: 0 float: 3.1415 float: 3.1415
+
-13231232 negative: 1 is_integer: 1 integer: -13231232 integer: -13231232
+
9999999999999999999 negative: 0 is_integer: 1 large 64-bit integer: 9999999999999999999 large 64-bit integer: 9999999999999999999
+

+Raw Strings

+

It is sometimes useful to have access to a raw (unescaped) string: we make available a minimalist raw_json_string data type which contains a pointer inside the string in the original document, right after the quote. It is accessible via get_raw_json_string() on a string instance and returned by the key() method on an object's field instance. It is always optional: replacing get_raw_json_string() with get_string() and key() by unescaped_key() returns an string_view instance of the unescaped string.

+

You can quickly compare a raw_json_string instance with a target string. You may also unescape the raw_json_string on your own string buffer: parser.unescape(mystr, ptr) advances the provided pointer ptr and returns a string_view instance on the newly serialized string upon success, otherwise it returns an error. When unescaping to your own string buffer, you should ensure that you have sufficient memory space: the total size of the strings plus simdjson::SIMDJSON_PADDING bytes. The following example illustrates how we can unescape JSON string to a user-provided buffer:

+
{C++}
+
auto json = R"( {"name": "Jack The Ripper \u0033"} )"_padded;
+
// We create a buffer large enough to store all strings we need:
+
std::unique_ptr<uint8_t[]> buffer(new uint8_t[json.size() + simdjson::SIMDJSON_PADDING]);
+
uint8_t * ptr = buffer.get();
+
ondemand::parser parser;
+
ondemand::document doc = parser.iterate(json);
+
// We store our strings as 'string_view' instances in a vector:
+
std::vector<std::string_view> mystrings;
+
for (auto key_value : doc.get_object()) {
+
std::string_view keysv = parser.unescape(key_value.key(), ptr);// writes 'name'
+
mystrings.push_back(keysv);
+
std::string_view valuesv = parser.unescape(key_value.value().get_raw_json_string(), ptr);
+
// writes 'Jack The Ripper 3', escaping the \u0033
+
mystrings.push_back(valuesv);
+
}
+

+Thread Safety

+

We built simdjson with thread safety in mind.

+

The simdjson library is single-threaded except for `iterate_many` and `parse_many` which may use secondary threads under their control when the library is compiled with thread support.

+

We recommend using one parser object per thread. When using the On Demand front-end (our default), you should access the document instances in a single-threaded manner since it acts as an iterator (and is therefore not thread safe).

+

The CPU detection, which runs the first time parsing is attempted and switches to the fastest parser for your CPU, is transparent and thread-safe.

+

In a threaded environment, stack space is often limited. Running code like simdjson in debug mode may require hundreds of kilobytes of stack memory. Thus stack overflows are a possibility. We recommend you turn on optimization when working in an environment where stack space is limited. If you must run your code in debug mode, we recommend you configure your system to have more stack space. We discourage you from running production code based on a debug build.

+

+Standard Compliance

+

The simdjson library is fully compliant with the RFC 8259 JSON specification.

+
    +
  • The only insignificant whitespace characters allowed are the space, the horizontal tab, the line feed and the carriage return. In particular, a JSON document may not contain an unescaped null character.
  • +
  • A single string or a single number is considered to be a valid JSON document.
  • +
  • We fully validate the numbers according to the JSON specification. For example, the string 01 is not valid JSON document since the specification states that leading zeros are not allowed.
  • +
  • The specification allows implementations to set limits on the range and precision of numbers accepted. We support 64-bit floating-point numbers as well as integer values.
      +
    • We parse integers and floating-point numbers as separate types which allows us to support all signed (two's complement) 64-bit integers, like a Java long or a C/C++ long long and all 64-bit unsigned integers. When we cannot represent exactly an integer as a signed or unsigned 64-bit value, we reject the JSON document.
    • +
    • We support the full range of 64-bit floating-point numbers (binary64). The values range from std::numeric_limits<double>::lowest() to std::numeric_limits<double>::max(), so from -1.7976e308 all the way to 1.7975e308. Extreme values (less or equal to -1e308, greater or equal to 1e308) are rejected: we refuse to parse the input document. Numbers are parsed with a perfect accuracy (ULP 0): the nearest floating-point value is chosen, rounding to even when needed. If you serialized your floating-point numbers with 17 significant digits in a standard compliant manner, the simdjson library is guaranteed to recover the same numbers, exactly.
    • +
    +
  • +
  • The specification states that JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8. The simdjson library does full UTF-8 validation as part of the parsing. The specification states that implementations MUST NOT add a byte order mark: the simdjson library rejects documents starting with a byte order mark.
  • +
  • The simdjson library validates string content for unescaped characters. Unescaped line breaks and tabs in strings are not allowed.
  • +
  • The simdjson library accepts objects with repeated keys: all of the name/value pairs, including duplicates, are reported. We do not enforce key uniqueness.
  • +
  • The specification states that an implementation may set limits on the size of texts that it accepts. The simdjson library limits single JSON documents to 4 GiB. It will refuse to parse a JSON document larger than 4294967295 bytes. (This limitation does not apply to streams of JSON documents, only to single JSON documents.)
  • +
  • The specification states that an implementation may set limits on the maximum depth of nesting. By default, the simdjson will refuse to parse documents with a depth exceeding 1024.
  • +
+

+Backwards Compatibility

+

The only header file supported by simdjson is simdjson.h. Older versions of simdjson published a number of other include files such as document.h or ParsedJson.h alongside simdjson.h; these headers may be moved or removed in future versions.

+
+
+
+ + + + diff --git a/md_doc_dom.html b/md_doc_dom.html new file mode 100644 index 000000000..7b40b8df5 --- /dev/null +++ b/md_doc_dom.html @@ -0,0 +1,575 @@ + + + + + + + +simdjson: The Document-Object-Model (DOM) front-end + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
The Document-Object-Model (DOM) front-end
+
+
+

An overview of what you need to know to use simdjson, with examples.

+ +

+DOM vs On Demand

+

The simdjson library offers two distinct approaches on how to access a JSON document. We support a conventional Document-Object-Model (DOM) front-end. In such a scenario, the JSON document is entirely parsed, validated and materialized in memory as the first step. The programmer may then access the parsed data using this in-memory model.

+

+The Basics: Loading and Parsing JSON Documents using the DOM front-end

+

The simdjson library offers a simple DOM tree API, which you can access by creating a dom::parser and calling the load() method:

+
{c++}
+
dom::parser parser;
+
dom::element doc = parser.load(filename); // load and parse a file
+

Or by creating a padded string (for efficiency reasons, simdjson requires a string with SIMDJSON_PADDING bytes at the end) and calling parse():

+
{c++}
+
dom::parser parser;
+
dom::element doc = parser.parse("[1,2,3]"_padded); // parse a string, the _padded suffix creates a simdjson::padded_string instance
+

The parsed document resulting from the parser.load and parser.parse calls depends on the parser instance. Thus the parser instance must remain in scope. Furthermore, you must have at most one parsed document in play per parser instance. You cannot copy a parser instance, you may only move it.

+

If you need to keep a document around long term, you can keep or move the parser instance. Note that moving a parser instance, or keeping one in a movable data structure like vector or map, can cause any outstanding element, object or array instances to be invalidated. The element, object or array instances are mere thin wrappers akin to an std::vector<int>::iterator: they are invalid when default constructed, they must be tied to a valid document instance. If you need to store a parser in a movable data structure, you should use a std::unique_ptr to avoid this invalidation(e.g., std::unique_ptr<dom::parser> parser(new dom::parser{})).

+

During theload or parse calls, neither the input file nor the input string are ever modified. After calling load or parse, the source (either a file or a string) can be safely discarded. All of the JSON data is stored in the parser instance. The parsed document is also immutable in simdjson: you do not modify it by accessing it.

+

For best performance, a parser instance should be reused over several files: otherwise you will needlessly reallocate memory, an expensive process. It is also possible to avoid entirely memory allocations during parsing when using simdjson. See our performance notes for details.

+

If you need a lower-level interface, you may call the function parser.parse(const char * p, size_t l) on a pointer p while specifying the length of your input l in bytes. To see how to get the very best performance from a low-level approach, you way want to read our performance notes on this topic (see the Padding and Temporary Copies section).

+

+Using the Parsed JSON

+

Once you have an element, you can navigate it with idiomatic C++ iterators, operators and casts.

+
    +
  • Extracting Values (with exceptions): You can cast a JSON element to a native type: double(element) or double x = json_element. This works for double, uint64_t, int64_t, bool, dom::object and dom::array. An exception (simdjson::simdjson_error) is thrown if the cast is not possible.
  • +
  • Extracting Values (without exceptions): You can use a variant usage of get() with error codes to avoid exceptions. You first declare the variable of the appropriate type (double, uint64_t, int64_t, bool, std::string_view, dom::object and dom::array) and pass it by reference to get() which gives you back an error code: e.g.,
    {c++}
    +
    simdjson::error_code error;
    +
    simdjson::padded_string numberstring = "1.2"_padded; // our JSON input ("1.2")
    +
    simdjson::dom::parser parser;
    +
    double value; // variable where we store the value to be parsed
    +
    error = parser.parse(numberstring).get(value);
    +
    if (error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
    +
    std::cout << "I parsed " << value << " from " << numberstring.data() << std::endl;
    +
    The strings contain unescaped valid UTF-8 strings: no unmatched surrogate is allowed.
  • +
  • Field Access: To get the value of the "foo" field in an object, use object["foo"].
  • +
  • Array Iteration: To iterate through an array, use for (auto value : array) { ... }. If you know the type of the value, you can cast it right there, too! for (double value : array) { ... }
  • +
  • Object Iteration: You can iterate through an object's fields, too: for (auto [key, value] : object)
  • +
  • Array Index: To get at an array value by index, use the at() method: array.at(0) gets the first element. The at() method has linear-time complexity so it should not be used to iterate over the values of an array.
    +

    Note that array[0] does not compile, because implementing [] gives the impression indexing is a O(1) operation, which it is not presently in simdjson. Instead, you should iterate over the elements using a for-loop, as in our examples.

    +
    +* Array and Object size Given an array or an object, you can get its size (number of elements or keys) with the size() method.
  • +
  • Checking an Element Type: You can check an element's type with element.type(). It returns an element_type with values such as simdjson::dom::element_type::ARRAY, simdjson::dom::element_type::OBJECT, simdjson::dom::element_type::INT64, simdjson::dom::element_type::UINT64,simdjson::dom::element_type::DOUBLE, simdjson::dom::element_type::STRING, simdjson::dom::element_type::BOOL or, simdjson::dom::element_type::NULL_VALUE.
  • +
  • Output to streams and strings: Given a document or an element (or node) out of a JSON document, you can output a minified string version using the C++ stream idiom (out << element). You can also request the construction of a minified string version (simdjson::minify(element)). Numbers are serialized as 64-bit floating-point numbers (double).
  • +
+

+Examples

+

The following code illustrates all of the above:

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
dom::parser parser;
+
+
// Iterating through an array of objects
+
for (dom::object car : parser.parse(cars_json)) {
+
// Accessing a field by name
+
cout << "Make/Model: " << car["make"] << "/" << car["model"] << endl;
+
+
// Casting a JSON element to an integer
+
uint64_t year = car["year"];
+
cout << "- This car is " << 2020 - year << "years old." << endl;
+
+
// Iterating through an array of floats
+
double total_tire_pressure = 0;
+
for (double tire_pressure : car["tire_pressure"]) {
+
total_tire_pressure += tire_pressure;
+
}
+
cout << "- Average tire pressure: " << (total_tire_pressure / 4) << endl;
+
+
// Writing out all the information about the car
+
for (auto field : car) {
+
cout << "- " << field.key << ": " << field.value << endl;
+
}
+
}
+

Here is a different example illustrating the same ideas:

+
{C++}
+
auto abstract_json = R"( [
+
{ "12345" : {"a":12.34, "b":56.78, "c": 9998877} },
+
{ "12545" : {"a":11.44, "b":12.78, "c": 11111111} }
+
] )"_padded;
+
dom::parser parser;
+
+
// Parse and iterate through an array of objects
+
for (dom::object obj : parser.parse(abstract_json)) {
+
for(const auto key_value : obj) {
+
cout << "key: " << key_value.key << " : ";
+
dom::object innerobj = key_value.value;
+
cout << "a: " << double(innerobj["a"]) << ", ";
+
cout << "b: " << double(innerobj["b"]) << ", ";
+
cout << "c: " << int64_t(innerobj["c"]) << endl;
+
}
+
}
+

And another one:

+
{C++}
+
auto abstract_json = R"(
+
{ "str" : { "123" : {"abc" : 3.14 } } } )"_padded;
+
dom::parser parser;
+
double v = parser.parse(abstract_json)["str"]["123"]["abc"];
+
cout << "number: " << v << endl;
+

+C++17 Support

+

While the simdjson library can be used in any project using C++ 11 and above, field iteration has special support C++ 17's destructuring syntax. For example:

+
{c++}
+
padded_string json = R"( { "foo": 1, "bar": 2 } )"_padded;
+
dom::parser parser;
+
dom::object object; // invalid until the get() succeeds
+
auto error = parser.parse(json).get(object);
+
if (error) { cerr << error << endl; return; }
+
for (auto [key, value] : object) {
+
cout << key << " = " << value << endl;
+
}
+

For comparison, here is the C++ 11 version of the same code:

+
{c++}
+
// C++ 11 version for comparison
+
padded_string json = R"( { "foo": 1, "bar": 2 } )"_padded;
+
dom::parser parser;
+
dom::object object; // invalid until the get() succeeds
+
auto error = parser.parse(json).get(object);
+
if (error) { cerr << error << endl; return; }
+
for (dom::key_value_pair field : object) {
+
cout << field.key << " = " << field.value << endl;
+
}
+

+JSON Pointer

+

The simdjson library also supports JSON pointer through the at_pointer() method, letting you reach further down into the document in a single call:

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
dom::parser parser;
+
dom::element cars = parser.parse(cars_json);
+
cout << cars.at_pointer("/0/tire_pressure/1") << endl; // Prints 39.9
+

A JSON Path is a sequence of segments each starting with the '/' character. Within arrays, an integer index allows you to select the indexed node. Within objects, the string value of the key allows you to select the value. If your keys contain the characters '/' or '~', they must be escaped as '~1' and '~0' respectively. An empty JSON Path refers to the whole document.

+

We also extend the JSON Pointer support to include relative paths. You can apply a JSON path to any node and the path gets interpreted relatively, as if the current node were a whole JSON document.

+

Consider the following example:

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
dom::parser parser;
+
dom::element cars = parser.parse(cars_json);
+
cout << cars.at_pointer("/0/tire_pressure/1") << endl; // Prints 39.9
+
for (dom::element car_element : cars) {
+
dom::object car; // invalid until the get() succeeds
+
simdjson::error_code error;
+
if ((error = car_element.get(car))) { std::cerr << error << std::endl; return; }
+
double x = car.at_pointer("/tire_pressure/1");
+
cout << x << endl; // Prints 39.9, 31 and 30
+
}
+

+Error Handling

+

All simdjson APIs that can fail return simdjson_result<T>, which is a <value, error_code> pair. You can retrieve the value with .get(), like so:

+
{c++}
+
dom::element doc;
+
auto error = parser.parse(json).get(doc);
+
if (error) { cerr << error << endl; exit(1); }
+

When there is no error, the error code simdjson::SUCCESS is returned: it evaluates as false as a Boolean. We have several error codes to indicate errors, they all evaluate to true as a Boolean: your software should not generally not depend on exact error codes. We may change the error codes in future releases and the exact error codes could vary depending on your system.

+

When you use the code without exceptions, it is your responsibility to check for error before using the result: if there is an error, the result value will not be valid and using it will caused undefined behavior.

+

We can write a "quick start" example where we attempt to parse the following JSON file and access some data, without triggering exceptions:

{
+
"statuses": [
+
{
+
"id": 505874924095815700
+
},
+
{
+
"id": 505874922023837700
+
}
+
],
+
"search_metadata": {
+
"count": 100
+
}
+
}
+

Our program loads the file, selects value corresponding to key "search_metadata" which expected to be an object, and then it selects the key "count" within that object.

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::dom::parser parser;
+
simdjson::dom::element tweets; // invalid until the get() succeeds
+
auto error = parser.load("twitter.json").get(tweets);
+
if (error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
+
simdjson::dom::element res; // invalid until the get() succeeds
+
if ((error = tweets["search_metadata"]["count"].get(res))) {
+
std::cerr << "could not access keys" << std::endl;
+
return EXIT_FAILURE;
+
}
+
std::cout << res << " results." << std::endl;
+
}
+

The following is a similar example where one wants to get the id of the first tweet without triggering exceptions. To do this, we use ["statuses"].at(0)["id"]. We break that expression down:

+
    +
  • Get the list of tweets (the "statuses" key of the document) using ["statuses"]). The result is expected to be an array.
  • +
  • Get the first tweet using .at(0). The result is expected to be an object.
  • +
  • Get the id of the tweet using ["id"]. We expect the value to be a non-negative integer.
  • +
+

Observe how we use the at method when querying an index into an array, and not the bracket operator.

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::dom::parser parser;
+
simdjson::dom::element tweets; // invalid until the get() succeeds
+
auto error = parser.load("twitter.json").get(tweets);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
uint64_t identifier;
+
error = tweets["statuses"].at(0)["id"].get(identifier);
+
if(error) { std::cerr << error << std::endl; return EXIT_FAILURE; }
+
std::cout << identifier << std::endl;
+
return EXIT_SUCCESS;
+
}
+

The at() method has linear-time complexity: it should not be used to iterate over the content of an array.

+

+Error Handling Example

+

This is how the example in "Using the Parsed JSON" could be written using only error code checking:

+
{c++}
+
auto cars_json = R"( [
+
{ "make": "Toyota", "model": "Camry", "year": 2018, "tire_pressure": [ 40.1, 39.9, 37.7, 40.4 ] },
+
{ "make": "Kia", "model": "Soul", "year": 2012, "tire_pressure": [ 30.1, 31.0, 28.6, 28.7 ] },
+
{ "make": "Toyota", "model": "Tercel", "year": 1999, "tire_pressure": [ 29.8, 30.0, 30.2, 30.5 ] }
+
] )"_padded;
+
dom::parser parser;
+
dom::array cars; // invalid until the get() succeeds
+
auto error = parser.parse(cars_json).get(cars);
+
if (error) { cerr << error << endl; exit(1); }
+
+
// Iterating through an array of objects
+
for (dom::element car_element : cars) {
+
dom::object car;
+
if ((error = car_element.get(car))) { cerr << error << endl; exit(1); }
+
+
// Accessing a field by name
+
std::string_view make, model;
+
if ((error = car["make"].get(make))) { cerr << error << endl; exit(1); }
+
if ((error = car["model"].get(model))) { cerr << error << endl; exit(1); }
+
cout << "Make/Model: " << make << "/" << model << endl;
+
+
// Casting a JSON element to an integer
+
uint64_t year;
+
if ((error = car["year"].get(year))) { cerr << error << endl; exit(1); }
+
cout << "- This car is " << 2020 - year << "years old." << endl;
+
+
// Iterating through an array of floats
+
double total_tire_pressure = 0;
+
dom::array tire_pressure_array;
+
if ((error = car["tire_pressure"].get(tire_pressure_array))) { cerr << error << endl; exit(1); }
+
for (dom::element tire_pressure_element : tire_pressure_array) {
+
double tire_pressure;
+
if ((error = tire_pressure_element.get(tire_pressure))) { cerr << error << endl; exit(1); }
+
total_tire_pressure += tire_pressure;
+
}
+
cout << "- Average tire pressure: " << (total_tire_pressure / 4) << endl;
+
+
// Writing out all the information about the car
+
for (auto field : car) {
+
cout << "- " << field.key << ": " << field.value << endl;
+
}
+
}
+

Here is another example:

+
{C++}
+
auto abstract_json = R"( [
+
{ "12345" : {"a":12.34, "b":56.78, "c": 9998877} },
+
{ "12545" : {"a":11.44, "b":12.78, "c": 11111111} }
+
] )"_padded;
+
dom::parser parser;
+
dom::array array; // invalid until after the next line
+
auto error = parser.parse(abstract_json).get(array);
+
if (error) { cerr << error << endl; exit(1); }
+
// Iterate through an array of objects
+
for (dom::element elem : array) {
+
dom::object obj;
+
if ((error = elem.get(obj))) { cerr << error << endl; exit(1); }
+
for (auto & key_value : obj) {
+
cout << "key: " << key_value.key << " : ";
+
dom::object innerobj;
+
if ((error = key_value.value.get(innerobj))) { cerr << error << endl; exit(1); }
+
+
double va, vb;
+
if ((error = innerobj["a"].get(va))) { cerr << error << endl; exit(1); }
+
cout << "a: " << va << ", ";
+
if ((error = innerobj["b"].get(vc))) { cerr << error << endl; exit(1); }
+
cout << "b: " << vb << ", ";
+
+
int64_t vc;
+
if ((error = innerobj["c"].get(vc))) { cerr << error << endl; exit(1); }
+
cout << "c: " << vc << endl;
+
}
+
}
+

And another one:

+
{C++}
+
auto abstract_json = R"(
+
{ "str" : { "123" : {"abc" : 3.14 } } } )"_padded;
+
dom::parser parser;
+
double v;
+
auto error = parser.parse(abstract_json)["str"]["123"]["abc"].get(v);
+
if (error) { cerr << error << endl; exit(1); }
+
cout << "number: " << v << endl;
+

Notice how we can string several operations (parser.parse(abstract_json)["str"]["123"]["abc"].get(v)) and only check for the error once, a strategy we call error chaining.

+

The next two functions will take as input a JSON document containing an array with a single element, either a string or a number. They return true upon success.

+
{C++}
+
simdjson::dom::parser parser{};
+
+
bool parse_double(const char *j, double &d) {
+
auto error = parser.parse(j, std::strlen(j))
+
.at(0)
+
.get(d, error);
+
if (error) { return false; }
+
return true;
+
}
+
+
bool parse_string(const char *j, std::string &s) {
+
std::string_view answer;
+
auto error = parser.parse(j, strlen(j))
+
.at(0)
+
.get(answer, error);
+
if (error) { return false; }
+
s.assign(answer.data(), answer.size());
+
return true;
+
}
+

To ensure you don't write any code that uses exceptions, compile with SIMDJSON_EXCEPTIONS=OFF. For example, if including the project via cmake:

+
target_compile_definitions(simdjson PUBLIC SIMDJSON_EXCEPTIONS=OFF)
+

+Exceptions

+

Users more comfortable with an exception flow may choose to directly cast the simdjson_result<T> to the desired type:

+
{c++}
+
dom::element doc = parser.parse(json); // Throws an exception if there was an error!
+

When used this way, a simdjson_error exception will be thrown if an error occurs, preventing the program from continuing if there was an error.

+

If one is willing to trigger exceptions, it is possible to write simpler code:

+
{C++}
+
#include <iostream>
+
#include "simdjson.h"
+
+
int main(void) {
+
simdjson::dom::parser parser;
+
simdjson::dom::element tweets = parser.load("twitter.json");
+
std::cout << "ID: " << tweets["statuses"].at(0)["id"] << std::endl;
+
return EXIT_SUCCESS;
+
}
+

+Tree Walking and JSON Element Types

+

Sometimes you don't necessarily have a document with a known type, and are trying to generically inspect or walk over JSON elements. To do that, you can use iterators and the type() method. For example, here's a quick and dirty recursive function that verbosely prints the JSON document as JSON (* ignoring nuances like trailing commas and escaping strings, for brevity's sake):

+
{c++}
+
void print_json(dom::element element) {
+
switch (element.type()) {
+
case dom::element_type::ARRAY:
+
cout << "[";
+
for (dom::element child : dom::array(element)) {
+
print_json(child);
+
cout << ",";
+
}
+
cout << "]";
+
break;
+
case dom::element_type::OBJECT:
+
cout << "{";
+
for (dom::key_value_pair field : dom::object(element)) {
+
cout << "\"" << field.key << "\": ";
+
print_json(field.value);
+
}
+
cout << "}";
+
break;
+
case dom::element_type::INT64:
+
cout << int64_t(element) << endl;
+
break;
+
case dom::element_type::UINT64:
+
cout << uint64_t(element) << endl;
+
break;
+
case dom::element_type::DOUBLE:
+
cout << double(element) << endl;
+
break;
+
case dom::element_type::STRING:
+
cout << std::string_view(element) << endl;
+
break;
+
case dom::element_type::BOOL:
+
cout << bool(element) << endl;
+
break;
+
case dom::element_type::NULL_VALUE:
+
cout << "null" << endl;
+
break;
+
}
+
}
+
+
void basics_treewalk_1() {
+
dom::parser parser;
+
print_json(parser.load("twitter.json"));
+
}
+

+Reusing the parser for maximum efficiency

+

If you're using simdjson to parse multiple documents, or in a loop, you should make a parser once and reuse it. The simdjson library will allocate and retain internal buffers between parses, keeping buffers hot in cache and keeping memory allocation and initialization to a minimum. In this manner, you can parse terabytes of JSON data without doing any new allocation.

+
{c++}
+
dom::parser parser;
+
+
// This initializes buffers and a document big enough to handle this JSON.
+
dom::element doc = parser.parse("[ true, false ]"_padded);
+
cout << doc << endl;
+
+
// This reuses the existing buffers, and reuses and *overwrites* the old document
+
doc = parser.parse("[1, 2, 3]"_padded);
+
cout << doc << endl;
+
+
// This also reuses the existing buffers, and reuses and *overwrites* the old document
+
dom::element doc2 = parser.parse("true"_padded);
+
// Even if you keep the old reference around, doc and doc2 refer to the same document.
+
cout << doc << endl;
+
cout << doc2 << endl;
+

It's not just internal buffers though. The simdjson library reuses the document itself. The dom::element, dom::object and dom::array instances are references to the internal document. You are only borrowing the document from simdjson, which purposely reuses and overwrites it each time you call parse. This prevent wasteful and unnecessary memory allocation in 99% of cases where JSON is just read, used, and converted to native values or thrown away.

+
+

You are only borrowing the document from the simdjson parser. Don't keep it long term!

+
+

This is key: don't keep the document&, dom::element, dom::array, dom::object or string_view objects you get back from the API. Convert them to C++ native values, structs and arrays that you own.

+

+Server Loops: Long-Running Processes and Memory Capacity

+

The simdjson library automatically expands its memory capacity when larger documents are parsed, so that you don't unexpectedly fail. In a short process that reads a bunch of files and then exits, this works pretty flawlessly.

+

Server loops, though, are long-running processes that will keep the parser around forever. This means that if you encounter a really, really large document, simdjson will not resize back down. The simdjson library lets you adjust your allocation strategy to prevent your server from growing without bound:

+
    +
  • You can set a max capacity when constructing a parser:
  • +
+
{c++}
+
dom::parser parser(1000*1000); // Never grow past documents > 1MB
+
for (web_request request : listen()) {
+
dom::element doc;
+
auto error = parser.parse(request.body).get(doc);
+
// If the document was above our limit, emit 413 = payload too large
+
if (error == CAPACITY) { request.respond(413); continue; }
+
// ...
+
}
+

This parser will grow normally as it encounters larger documents, but will never pass 1MB.

+
    +
  • You can set a fixed capacity that never grows, as well, which can be excellent for predictability and reliability, since simdjson will never call malloc after startup!
  • +
+
{c++}
+
dom::parser parser(0); // This parser will refuse to automatically grow capacity
+
auto error = parser.allocate(1000*1000); // This allocates enough capacity to handle documents <= 1MB
+
if (error) { cerr << error << endl; exit(1); }
+
+
for (web_request request : listen()) {
+
dom::element doc;
+
error = parser.parse(request.body).get(doc);
+
// If the document was above our limit, emit 413 = payload too large
+
if (error == CAPACITY) { request.respond(413); continue; }
+
// ...
+
}
+

+Best Use of the DOM API

+

The simdjson API provides access to the JSON DOM (document-object-model) content as a tree of dom::element instances, each representing an object, an array or an atomic type (null, true, false, number). These dom::element instances are lightweight objects (e.g., spanning 16 bytes) and it might be advantageous to pass them by value, as opposed to passing them by reference or by pointer.

+

+Padding and Temporary Copies

+

The simdjson function parser.parse reads data from a padded buffer, containing SIMDJSON_PADDING extra bytes added at the end. If you are passing a padded_string to parser.parse or loading the JSON directly from disk (parser.load), padding is automatically handled. When calling parser.parse on a pointer (e.g., parser.parse(my_char_pointer, my_length_in_bytes)) a temporary copy is made by default with adequate padding and you, again, do not need to be concerned with padding.

+

Some users may not be able use our padded_string class or to load the data directly from disk (parser.load). They may need to pass data pointers to the library. If these users wish to avoid temporary copies and corresponding temporary memory allocations, they may want to call parser.parse with the realloc_if_needed parameter set to false (e.g., parser.parse(my_char_pointer, my_length_in_bytes, false)). In such cases, they need to ensure that there are at least SIMDJSON_PADDING extra bytes at the end that can be safely accessed and read. They do not need to initialize the padded bytes to any value in particular. The following example is safe:

+

```C++ const char *json = R"({"key":"value"})"; const size_t json_len = std::strlen(json); std::unique_ptr<char[]> padded_json_copy{new char[json_len + SIMDJSON_PADDING]}; memcpy(padded_json_copy.get(), json, json_len); memset(padded_json_copy.get() + json_len, 0, SIMDJSON_PADDING); simdjson::dom::parser parser; simdjson::dom::element element = parser.parse(padded_json_copy.get(), json_len, false); ````

+

Setting the realloc_if_needed parameter false in this manner may lead to better performance since copies are avoided, but it requires that the user takes more responsibilities: the simdjson library cannot verify that the input buffer was padded with SIMDJSON_PADDING extra bytes.

+
+
+
+ + + + diff --git a/md_doc_implementation_selection.html b/md_doc_implementation_selection.html new file mode 100644 index 000000000..4c171b289 --- /dev/null +++ b/md_doc_implementation_selection.html @@ -0,0 +1,170 @@ + + + + + + + +simdjson: CPU Architecture-Specific Implementations + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
CPU Architecture-Specific Implementations
+
+
+
+

+Overview

+

The simdjson library takes advantage of SIMD instruction sets such as NEON, SSE and AVX to achieve much of its speed. Because these instruction sets work differently, simdjson has to compile a different version of the JSON parser for different CPU architectures, often with different algorithms to take better advantage of a given CPU!

+

The current implementations are:

    +
  • icelake: AVX-512F, AVX-512VBMI, etc.
  • +
  • haswell: AVX2 (2013 Intel Haswell or later)
  • +
  • westmere: SSE4.2 (2010 Westmere or later).
  • +
  • arm64: 64-bit ARMv8-A NEON
  • +
  • ppc64: 64-bit POWER8 and POWER9 with VSX and ALTIVEC extensions. Both big endian and little endian are implemented, depends on the compiler you are using. The library is tested on recent, little-endian, POWER systems.
  • +
  • fallback: A generic implementation that runs on any 64-bit processor.
  • +
+

In many cases, you don't know where your compiled binary is going to run, so simdjson automatically compiles all the implementations into the executable. On Intel, it will include 3 implementations (haswell, westmere and fallback), on ARM it will include 2 (arm64 and fallback), and on PPC it will include 2 (ppc64 and fallback).

+

If you know more about where you're going to run and want to save the space, you can disable any of these implementations at compile time with -DSIMDJSON_IMPLEMENTATION_X=0 (where X is ICELAKE, HASWELL, WESTMERE, ARM64, PPC64 and FALLBACK).

+

The simdjson library automatically sets header flags for each implementation as it compiles; there is no need to set architecture-specific flags yourself (e.g., -mavx2, /AVX2 or -march=haswell), and it may even break runtime dispatch and your binaries will fail to run on older processors. Note: for POWER9 processors make sure you compile it with -mcpu=power9 and -mtune=power9 to get maximum performance.

+

+Runtime CPU Detection

+

When you first use simdjson, it will detect the CPU you're running on, and swap over to the fastest implementation for it. This is a small, one-time cost and for many people will be paid the first time they call parse() or load().

+

+Inspecting the Detected Implementation

+

You can check what implementation is running with active_implementation:

+
{c++}
+
cout << "simdjson v" << SIMDJSON_VERSION << endl;
+
cout << "Detected the best implementation for your machine: " << simdjson::get_active_implementation()->name();
+
cout << "(" << simdjson::get_active_implementation()->description() << ")" << endl;
+

Implementation detection will happen in this case when you first call name().

+

+Querying Available Implementations

+

You can list all available implementations, regardless of which one was selected:

+
{c++}
+
for (auto implementation : simdjson::get_available_implementations()) {
+
cout << implementation->name() << ": " << implementation->description() << endl;
+
}
+

And look them up by name:

+
{c++}
+
cout << simdjson::get_available_implementations()["fallback"]->description() << endl;
+

Though the fallback implementation should always be available, others might be missing. When an implementation is not available, the bracket call simdjson::get_available_implementations()[name] will return the null pointer.

+

The available implementations have been compiled but may not necessarily be run safely on your system see Checking that an Implementation can Run on your System.

+

+Manually Selecting the Implementation

+

If you're trying to do performance tests or see how different implementations of simdjson run, you can select the CPU architecture yourself:

+
{c++}
+
// Use the fallback implementation, even though my machine is fast enough for anything
+
simdjson::get_active_implementation() = simdjson::get_available_implementations()["fallback"];
+

You are responsible for ensuring that the requirements of the selected implementation match your current system. Furthermore, you should check that the implementation is available before setting it to simdjson::get_active_implementation() by comparing it with the null pointer.

+
{c++}
+
auto my_implementation = simdjson::get_available_implementations()["haswell"];
+
if(! my_implementation) { exit(1); }
+
if(! my_implementation->supported_by_runtime_system()) { exit(1); }
+
simdjson::get_active_implementation() = my_implementation;
+

+Checking that an Implementation can Run on your System

+

You should call supported_by_runtime_system() to compare the processor's features with the need of the implementation.

+
{c++}
+
for (auto implementation : simdjson::get_available_implementations()) {
+
if(implementation->supported_by_runtime_system()) {
+
cout << implementation->name() << ": " << implementation->description() << endl;
+
}
+
}
+

The call to supported_by_runtime_system() may be relatively expensive. Do not call supported_by_runtime_system() each time you parse a JSON input (for example). It is meant to be called a handful of times at most in the life of a program.

+
+
+
+ + + + diff --git a/md_doc_iterate_many.html b/md_doc_iterate_many.html new file mode 100644 index 000000000..6de4a98a7 --- /dev/null +++ b/md_doc_iterate_many.html @@ -0,0 +1,222 @@ + + + + + + + +simdjson: iterate_many + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
iterate_many
+
+
+

When serializing large databases, it is often better to write out many independent JSON documents, instead of one large monolithic document containing many records. The simdjson library provides high-speed access to files or streams containing multiple small JSON documents separated by ASCII white-space characters. Given an input such as

{"text":"a"}
+
{"text":"b"}
+
{"text":"c"}
+
...
+

... you want to read the entries (individual JSON documents) as quickly and as conveniently as possible. Importantly, the input might span several gigabytes, but you want to use a small (fixed) amount of memory. Ideally, you'd also like the parallelize the processing (using more than one core) to speed up the process.

+

+Contents

+ +

+Motivation

+

The main motivation for this piece of software is to achieve maximum speed and offer a better quality of life in parsing files containing multiple small JSON documents.

+

The JavaScript Object Notation (JSON) RFC7159 is a handy serialization format. However, when serializing a large sequence of values as an array, or a possibly indeterminate-length or never- ending sequence of values, JSON may be inconvenient.

+

Consider a sequence of one million values, each possibly one kilobyte when encoded – roughly one gigabyte. It is often desirable to process such a dataset incrementally without having to first read all of it before beginning to produce results.

+

+How it works

+

+Context

+

Before parsing anything, simdjson first preprocesses the JSON text by identifying all structural indexes (i.e. the starting position of any JSON value, as well as any important operators like ,, :, ] or }) and validating UTF8. This stage is referred to stage 1. However, during this process, simdjson has no knowledge of whether parsed a valid document, multiple documents, or even if the document is complete. Then, to iterate through the JSON text during parsing, we use what we call a JSON iterator that will navigate through the text using these structural indexes. This JSON iterator is not visible though, but it is the key component to make parsing work.

+

Prior to iterate_many, most people who had to parse a multiline JSON file would proceed by reading the file line by line, using a utility function like std::getline or equivalent, and would then use the parse on each of those lines. From a performance point of view, this process is highly inefficient, in that it requires a lot of unnecessary memory allocation and makes use of the getline function, which is fundamentally slow, slower than the act of parsing with simdjson (more on this here).

+

Unlike the popular parser RapidJson, our DOM does not require the buffer once the parsing job is completed, the DOM and the buffer are completely independent. The drawback of this architecture is that we need to allocate some additional memory to store our ParsedJson data, for every document inside a given file. Memory allocation can be slow and become a bottleneck, therefore, we want to minimize it as much as possible.

+

+Design

+

To achieve a minimum amount of allocations, we opted for a design where we create only one parser object and therefore allocate its memory once, and then recycle it for every document in a given file. But, knowing that they often have largely varying size, we need to make sure that we allocate enough memory so that all the documents can fit. This value is what we call the batch size. As of right now, we need to manually specify a value for this batch size, it has to be at least as big as the biggest document in your file, but not too big so that it submerges the cached memory. The bigger the batch size, the fewer we need to make allocations. We found that 1MB is somewhat a sweet spot.

+
    +
  1. When the user calls iterate_many, we return a document_stream which the user can iterate over to receive parsed documents.
  2. +
  3. We call stage 1 on the first batch_size bytes of JSON in the buffer, detecting structural indexes for all documents in that batch.
  4. +
  5. The document_stream owns a document instance that keeps track of the current document position in the stream using a JSON iterator. To obtain a valid document, the document_stream returns a reference to its document instance.
  6. +
  7. Each time the user calls ++ to read the next document, the JSON iterator moves to the start the next document.
  8. +
  9. When we reach the end of the batch, we call stage 1 on the next batch, starting from the end of the last document, and go to step 3.
  10. +
+

+Threads

+

But how can we make use of threads if they are available? We found a pretty cool algorithm that allows us to quickly identify the position of the last JSON document in a given batch. Knowing exactly where the end of the last document in the batch is, we can safely parse through the last document without any worries that it might be incomplete. Therefore, we can run stage 1 on the next batch concurrently while parsing the documents in the current batch. Running stage 1 in a different thread can, in best cases, remove almost entirely its cost and replaces it by the overhead of a thread, which is orders of magnitude cheaper. Ain't that awesome!

+

Thread support is only active if thread supported is detected in which case the macro SIMDJSON_THREADS_ENABLED is set. Otherwise the library runs in single-thread mode.

+

A document_stream instance uses at most two threads: there is a main thread and a worker thread.

+

+Support

+

Since we want to offer flexibility and not restrict ourselves to a specific file format, we support any file that contains any amount of valid JSON document, separated by one or more character that is considered whitespace by the JSON spec. Anything that is not whitespace will be parsed as a JSON document and could lead to failure.

+

Whitespace Characters:

    +
  • Space
  • +
  • Linefeed
  • +
  • Carriage return
  • +
  • Horizontal tab
  • +
+

If your documents are all objects or arrays, then you may even have nothing between them. E.g., [1,2]{"32":1} is recognized as two documents.

+

Some official formats **(non-exhaustive list)**:

+

+API

+

See basics.md for an overview of the API.

+

+Use cases

+

From jsonlines.org:

+
    +
  • Better than CSV ```json ["Name", "Session", "Score", "Completed"] ["Gilbert", "2013", 24, true] ["Alexa", "2013", 29, true] ["May", "2012B", 14, false] ["Deloise", "2012A", 19, true] ``` CSV seems so easy that many programmers have written code to generate it themselves, and almost every implementation is different. Handling broken CSV files is a common and frustrating task. CSV has no standard encoding, no standard column separator and multiple character escaping standards. String is the only type supported for cell values, so some programs attempt to guess the correct types.

    +

    JSON Lines handles tabular data cleanly and without ambiguity. Cells may use the standard JSON types.

    +

    The biggest missing piece is an import/export filter for popular spreadsheet programs so that non-programmers can use this format.

    +
  • +
  • Easy Nested Data ```json {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]} {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]} {"name": "May", "wins": []} {"name": "Deloise", "wins": [["three of a kind", "5♣"]]} ``‘ JSON Lines’ biggest strength is in handling lots of similar nested data structures. One .jsonl file is easier to work with than a directory full of XML files.
  • +
+

+Tracking your position

+

Some users would like to know where the document they parsed is in the input array of bytes. It is possible to do so by accessing directly the iterator and calling its current_index() method which reports the location (in bytes) of the current document in the input stream. You may also call the source() method to get a std::string_view instance on the document and error() to check if there were any error.

+

Let us illustrate the idea with code:

+
{C++}
+
auto json = R"([1,2,3] {"1":1,"2":3,"4":4} [1,2,3] )"_padded;
+
simdjson::ondemand::parser parser;
+
simdjson::ondemand::document_stream stream;
+
auto error = parser.iterate_many(json).get(stream);
+
if( error ) { /* do something */ }
+
auto i = stream.begin();
+
size_t count{0};
+
for(; i != stream.end(); ++i) {
+
auto doc = *i;
+
if(!i.error()) {
+
std::cout << "got full document at " << i.current_index() << std::endl;
+
std::cout << i.source() << std::endl;
+
count++;
+
} else {
+
std::cout << "got broken document at " << i.current_index() << std::endl;
+
return false;
+
}
+
}
+

This code will print:

got full document at 0
+
[1,2,3]
+
got full document at 9
+
{"1":1,"2":3,"4":4}
+
got full document at 29
+
[1,2,3]
+

+Incomplete streams

+

Some users may need to work with truncated streams. The simdjson may truncate documents at the very end of the stream that cannot possibly be valid JSON (e.g., they contain unclosed strings, unmatched brackets, unmatched braces). After iterating through the stream, you may query the truncated_bytes() method which tells you how many bytes were truncated. If the stream is made of full (whole) documents, then you should expect truncated_bytes() to return zero.

+

Consider the following example where a truncated document ({"key":"intentionally unclosed string) containing 39 bytes has been left within the stream. In such cases, the first two whole documents are parsed and returned, and the truncated_bytes() method returns 39.

+
{C++}
+
auto json = R"([1,2,3] {"1":1,"2":3,"4":4} {"key":"intentionally unclosed string )"_padded;
+
simdjson::ondemand::parser parser;
+
simdjson::ondemand::document_stream stream;
+
auto error = parser.iterate_many(json,json.size()).get(stream);
+
if(error) { std::cerr << error << std::endl; return; }
+
for(auto i = stream.begin(); i != stream.end(); ++i) {
+
std::cout << i.source() << std::endl;
+
}
+
std::cout << stream.truncated_bytes() << " bytes "<< std::endl; // returns 39 bytes
+

This will print:

[1,2,3]
+
{"1":1,"2":3,"4":4}
+
39 bytes
+

Importantly, you should only call truncated_bytes() after iterating through all of the documents since the stream cannot tell whether there are truncated documents at the very end when it may not have accessed that part of the data yet.

+
+
+
+ + + + diff --git a/md_doc_ondemand_design.html b/md_doc_ondemand_design.html new file mode 100644 index 000000000..3100b2518 --- /dev/null +++ b/md_doc_ondemand_design.html @@ -0,0 +1,597 @@ + + + + + + + +simdjson: A Better Way to Parse Documents? + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
A Better Way to Parse Documents?
+
+
+

Whether we parse JSON or XML, or any other serialized format, there are relatively few common strategies:

+
    +
  • The most established approach is the construction of document-object-model (DOM).
  • +
  • Another established approach is a event-based approach (like SAX, SAJ).
  • +
  • Another popular approach is the schema-based deserialization model.
  • +
+

We propose an approach that is as easy to use and often as flexible as the DOM approach, yet as fast and efficient as the schema-based or event-based approaches. We call this new approach "On Demand". The simdjson On Demand API offers a familiar, friendly DOM API and provides the performance of just-in-time parsing on top of the simdjson superior performance.

+

To achieve ease of use, we mimicked the form of a traditional DOM API: you can iterate over arrays, look up fields in objects, and extract native values like double, uint64_t, string and bool.

+

To achieve performance, we introduced some key limitations that make the DOM API streaming: array/object iteration cannot be restarted, and string/number values can only be parsed once. If these limitations are acceptable to you, the On Demand API could help you write maintainable applications with a computation efficiency that is difficult to surpass.

+

A code example illustrates our API from a programmer's point of view:

+
{c++}
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
for (auto tweet : doc["statuses"]) {
+
std::string_view text = tweet["text"];
+
std::string_view screen_name = tweet["user"]["screen_name"];
+
uint64_t retweets = tweet["retweet_count"];
+
uint64_t favorites = tweet["favorite_count"];
+
cout << screen_name << " (" << retweets << " retweets / " << favorites << " favorites): " << text << endl;
+
}
+

Such code would be apply to a JSON document such as the following JSON mimicking a sample result from the Twitter API:

+
{
+
"statuses": [{
+
"text": "@aym0566x \n\n名前:前田あゆみ\n第一印象:なんか怖っ!\n今の印象:とりあえずキモい。噛み合わない\n好きなところ:ぶすでキモいとこ😋✨✨\n思い出:んーーー、ありすぎ😊❤️\nLINE交換できる?:あぁ……ごめん✋\nトプ画をみて:照れますがな😘✨\n一言:お前は一生もんのダチ💖",
+
"user": {
+
"name": "AYUMI",
+
"screen_name": "ayuu0123",
+
"followers_count": 262,
+
"friends_count": 252
+
},
+
"retweet_count": 0,
+
"favorite_count": 0
+
},
+
{
+
"text": "RT @KATANA77: えっそれは・・・(一同) http://t.co/PkCJAcSuYK",
+
"user": {
+
"name": "RT&ファボ魔のむっつんさっm",
+
"screen_name": "yuttari1998",
+
"followers_count": 95,
+
"friends_count": 158
+
},
+
"retweet_count": 82,
+
"favorite_count": 42
+
}
+
],
+
"search_metadata": {
+
"count": 100,
+
}
+
}
+

This streaming approach means that unused fields and values are not parsed or converted, thus saving space and time. In our example, the "name", "followers_count", and "friends_count" keys and matching values are skipped.

+

Further, the On Demand API does not parse a value at all until you try to convert it (e.g., to double, int, string, or bool). In our example, when accessing the key-value pair "retweet_count": 82, the parser may not convert the pair of characters 82 to the binary integer 82. Because the programmer specifies the data type, we avoid branch mispredictions related to data type determination and improve the performance.

+

We expect users of an On Demand API to work in terms of a JSON dialect, which is a set of expectations and specifications that come in addition to the JSON specification. The On Demand approach is designed around several principles:

+
    +
  • Streaming (*): It avoids preparsing values, keeping the memory usage and the latency down.
  • +
  • Forward-Only: To prevent reiteration of the same values and to keep the number of variables down (literally), only a single index is maintained and everything uses it (even if you have nested for loops). This means when you are going through an array of arrays, for example, that the inner array loop will advance the index to the next comma, and the array can just pick it up and look at it.
  • +
  • Natural Iteration: A JSON array or object can be iterated with a normal C++ for loop. Nested arrays and objects are supported by nested for loops.
  • +
  • Use-Specific Parsing: Parsing is always specific to the type required by the programmer. For example, if the programmer asks for an unsigned integer, we just start parsing digits. If there were no digits, we toss an error. There are even different parsers for double, uint64_t and int64_t values. This use-specific parsing avoids the branchiness of a generic "type switch," and makes the code more inlineable and compact.
  • +
  • Validate What You Use: On Demand deliberately validates the values you use and the structure leading to it, but nothing else. The goal is a guarantee that the value you asked for is the correct one and is not malformed: there must be no confusion over whether you got the right value.
  • +
+

To understand why On Demand is different, it is helpful to review the major approaches to parsing and parser APIs in use today.

+

+DOM Parsers

+

Many of the most usable, popular JSON APIs (including simdjson) deserialize into a DOM: an intermediate tree of objects, arrays and values. In this model, we convert the input data all at once into a tree-like structure (the DOM). The DOM is then accessed by the programmer like any other in-memory data structure. The resulting API let you refer to each array or object separately, using familiar techniques like iteration (for (auto value : array)) or indexing (object["key"]). In some cases, the values are even deserialized directly into familiar C++ constructs like vectors and maps.

+

The DOM approach is conceptually simple and "programmer friendly". Using the DOM tree is often easy enough that many users use the DOM as-is instead of creating their own custom data structures.

+

The DOM approach was the only way to parse JSON documents up to version 0.6 of the simdjson library. Our DOM API looks similar to our On Demand example, except it calls parse instead of iterate:

+
{c++}
+
dom::parser parser;
+
auto doc = parser.parse(json);
+
for (auto tweet : doc["statuses"]) {
+
std::string_view text = tweet["text"];
+
std::string_view screen_name = tweet["user"]["screen_name"];
+
uint64_t retweets = tweet["retweet_count"];
+
cout << screen_name << " (" << retweets << " retweets): " << text << endl;
+
}
+

Pros of the DOM approach:

    +
  • Straightforward, programmer-friendly interface (arrays and objects).
  • +
  • Safe: all of the input data has been validated before it is accessed.
  • +
  • All of the JSON document is available at once to the programmer.
  • +
+

Cons of the DOM approach:

    +
  • The memory usage scales linearly with the size of the input document.
  • +
  • Parses and stores everything, using memory and CPU cycles even on unused values.
  • +
  • Performance drain from type blindness.
  • +
+

What the simdjson library demonstrates is that a DOM API may be quite fast indeed: we can parse files at speeds of several gigabytes per second. However, in some instances, it may be possible to achieve even higher speeds.

+

+Event-Based Parsers (SAX, SAJ, etc.)

+

The event-based model (originally from the "Streaming API for XML") uses streaming to eliminate the cost of parsing and storing the entire JSON. In the event-based model, a core JSON engine parses the JSON document piece by piece, but instead of stuffing values in a DOM tree, it passes each value to a callback function, letting the user decide for themselves how to handle it. In such a model, the programmer may need to provide functions for all possible events (a number, a string, a new object, a new array, the array ends, the object ends, and so on). This allows programmers to work with much larger files without running out of memory.

+

The drawback is complexity: event-based APIs generally have you define a single callback for each type (e.g. string_field(std::string_view key, std::string_view value)). Because of this, the programmer suffers from context blindness: when they find a string they have to check where it is before they know what to do with it. Is this string the text of the tweet, the screen name, or something else? Are we even in a tweet right now, or is this from some other place in the document entirely? Though an event-based approach may allow superior performance, it is demanding of the programmer who must efficiently keep track of its current state within the JSON input.

+

The following is event-based example of the Twitter problem we have reviewed in the DOM and On Demand examples. To make it short enough to use as an example at all, it has heavily redacted: it only solves a part of the problem (does not get user.screen_name), it has bugs (it does not handle sub-objects in a tweet at all), and it uses a theoretical, simple event-based API that minimizes ceremony.

+
{c++}
+
struct twitter_callbacks {
+
bool in_statuses;
+
bool in_tweet;
+
std::string_view text;
+
uint64_t retweets;
+
uint64_t favorites;
+
void start_object_field(std::string_view key) {
+
if (key == "statuses") { in_statuses = true; }
+
}
+
void start_object() {
+
if (in_statuses) { in_tweet = true; }
+
}
+
void string_field(std::string_view key, std::string_view value) {
+
if (in_tweet && key == "text") { text = value; }
+
}
+
void number_field(std::string_view key, uint64_t value) {
+
if (in_tweet) {
+
if (key == "retweet_count") { retweets = value; }
+
if (key == "favorite_count") { favorites = value; }
+
}
+
}
+
void end_object() {
+
if (in_tweet) {
+
cout << "[redacted] (" << retweets << " retweets / " << favorites << " favorites): " << text << endl;
+
in_tweet = false;
+
} else if (in_statuses) {
+
in_statuses = false;
+
}
+
}
+
};
+
sax::parser parser;
+
parser.parse(twitter_callbacks());
+

This is a large amount of code, requiring mental gymnastics even to read. An actual implementation is harder to write and to maintain.

+

Pros of the event-based approach:

    +
  • Speed and space benefits from low, predictable memory usage.
  • +
  • Parsing can be done more lazily: the API can delegate work to the programmer for better performance.
  • +
  • It is highly flexible: given enough effort, most tasks can be accomplished efficiently.
  • +
+

Cons of the event-based approach:

    +
  • Performance drain from context blindness (e.g., switch statements for "where am I in the document")
  • +
  • Difficult to use (high code complexity, high maintenance, difficult to debug)
  • +
  • Lacks the safety of DOM: malformed documents could be ingested.
  • +
+

Though an event-based approach might have its niche uses, we believe that it is rarely ideally suited. We suspect that it is mostly used when performance and memory is a concern, and no other option (except DOM) is readily available.

+

+Schema-Based Parser Generators

+

In a schema-based model, the programmer provides a description of a data structure, and the parser constructs the data structure in question during parsing. These parsers take a schema–a description of your JSON, with field names, types, everything–and generate classes/structs in your language of choice, as well as a parser to deserialize the JSON into those structs. Some such parsers let you define your own data structures (struct) and they let a preprocessor inspects it and generates a custom JSON parser for it. Though not all of these schema-based parser generators generate a parser or even optimize for streaming, but they are able to in principle. Unlike the DOM and the event-based models, a schema-based approach assumes that the structure of the document is known at compile-time.

+

Pros of the schema-based approach:

    +
  • Ease of Use is on par with DOM
  • +
  • Parsers that generate iterators and lazy values in structs can keep memory pressure down to event-based levels.
  • +
  • Type Blindness can be entirely solved with specific parsers for each type, saving many branches.
  • +
  • Context Blindness can be solved, especially if object fields are required and in order, saving even more branches.
  • +
  • Can be made a safe as DOM: the input can be entirely validated prior to ingestion.
  • +
+

Cons of the schema-based approach:

    +
  • It is less flexible than the DOM or event-based approaches, sometimes limited to a deserialization-to-objects scenario.
  • +
  • The structure of the data must be fully known at compile-time.
  • +
+

+Type Blindness and Branch Misprediction

+

The DOM and event-based parsing model suffer from type blindness: even when the programmer knows exactly what fields and what types are in the JSON document, the parser does not. This means it has to look at each value blind with a big "switch" statement, asking "is this a number? A string? A boolean? An array? An object?"

+

In modern processors, this kind of switch statement can make your program run slower than it needs to because of the high cost of branch misprediction. Indeed, modern processor cores rely on speculative execution for speed. They "read ahead" in your program, predicting which instructions to run as soon as the data is available. A single-threaded program can execute 2, 3 or even more instructions per cycle–largely because of speculative execution.

+

Unfortunately, when the processor mispredicts the instructions, typically due to a mispredicted branch, all of the work done from the misprediction has be discarded and started anew. The processor may have been executing 3 or 4 instructions per cycle, and consuming the corresponding power, but all of the work may have been wasteful.

+

Type blindness means that the processor has to guess, for every JSON value, whether it will be an array, an object, number, string or boolean since these correspond to distinct code paths. Though some JSON files have predictable content, we find in practice that many JSON files stress the branch prediction. Though branch predictors improve with each new generation of processors, the cost of branch mispredictions also tends to increase as pipelines expand, and the processors become able to schedule longer streams of instructions.

+

On Demand parsing is tailor-made to solve this problem at the source, parsing values only after the user declares their type by asking for a double, an int, a string, etc. It attempts to do so while preserving most of the flexibility of DOM parsing.

+

+Algorithm

+

To help visualize the algorithm, we'll walk through the example C++ given at the top, for this JSON:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+

+Starting the iteration

+
    +
  1. First, we declare a parser object that keeps internal buffers necessary for parsing. This can be reused to parse multiple JSON files, so you do not pay the high cost of allocating memory every time (and so it can stay in cache!).

    +

    This declaration does not allocate any memory; that will happen in the next step.

    +
  2. +
+
{c++}
+
ondemand::parser parser;
+
    +
  1. We then start iterating the JSON document by allocating internal parser buffers, preprocessing the JSON, and initializing the iterator.
  2. +
+
{c++}
+
auto doc = parser.iterate(json);
+

Since this is the first time this parser has been used, iterate() first allocates internal parser buffers if this is the first time through. When reusing an existing parser, allocation only happens if the new document is bigger than internal buffers can handle. The On Demand API only ever allocates memory in the iterate() function call.

+

The simdjson library then preprocesses the JSON text at high speed, finding all tokens (i.e. the starting position of any JSON value, as well as any important operators like ,, :, ] or }).

+

Finally, a document iterator is created, initialized at the position of the first value in the json text input. The document iterator is bumped forward by array / object iterators and object[] lookup, and must be kept around until iteration is complete.

+

This operation can fail as this stage if the document in invalid! The result type is simdjson_result<document>. The simdjson library uses simdjson_result when a value needs to be returned by a function that can fail given improper inputs. The simdjson_result value contain an error_code and a document, and it was designed to allow you to use either error code checking or C++ exceptions via a direct cast document(parser.iterate(json)) you can use get() to check the error and cast to a value, or cast directly to a value. However, the simdjson library rely on error chaining, so it is possible to delay error checks: we shall shortly explain error chaining more fully.

+
+

NOTE: You should always have such a document instance (here doc) and it should remain in scope for the duration of your parsing function. E.g., you should not use the returned document as a temporary (e.g., auto x = parser.iterate(json).get_object();) followed by other operations as the destruction of the document instance makes all of the derived instances ill-defined.

+
+

At this point, the iterator is at the start of the JSON:

+
{
+
^ (depth 1)
+
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. We iterate over the "statuses" field using a typical C++ iterator, reading past the initial { "statuses": [ {.
  2. +
+
{c++}
+
for (ondemand::object tweet : doc["statuses"]) {
+

This shorthand does a lot, and it is helpful to see what it expands to. Comments in front of each one explain what's going on:

+
{c++}
+
// Validate that the top-level value is an object: check for {. Increase depth to 2 (root > field).
+
ondemand::object top = doc.get_object();
+
+
// Find the field statuses by:
+
// 1. Check whether the object is empty (check for }). (We do not really need to do this unless
+
// the key lookup fails!)
+
// 2. Check if we're at the field by looking for the string "statuses" using byte-by-byte comparison.
+
// 3. Validate that there is a `:` after it.
+
auto tweets_field = top["statuses"];
+
+
// - Validate that the field value is an array: check for [
+
// - If the array is empty (if there is a ] next), decrease depth back to 0.
+
// - If not, increase depth to 3 (root > statuses > tweet).
+
ondemand::array tweets = tweets_field.get_array();
+
// These three method calls do nothing substantial (the real checking happens in get_array() and ++)
+
// != checks whether the array is finished (if we found a ] and decreased depth back to 0).
+
ondemand::array_iterator tweets_iter = tweets.begin();
+
while (tweets_iter != tweets.end()) {
+
auto tweet_value = *tweets_iter;
+
+
// - Validate that the array element is an object: check for {
+
// - If the object is empty (if there is a } next), decrease depth back to 1.
+
// - If not, increase depth to 4 (root > statuses > tweet > field).
+
ondemand::object tweet = tweet_value.get_object();
+
...
+
}
+
+

NOTE: What is not explained in this code expansion is error chaining. Generally, you can use document methods on a simdjson_result<...> value; any errors will just be passed down the chain. Many method calls can be chained in this manner. So for (object tweet : doc["statuses"]), which is the equivalent of object tweet = *(doc.get_object()["statuses"].get_array().begin()).get_object(), could fail in any of 6 method calls, and the error will only be checked at the end, when you attempt to cast the final simdjson_result<object> to object. Upon casting, an exception is thrown if there was an error.

+
+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
^ (depth 4 - root > statuses > tweet > field)
+
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. We get the "text" field as a string.
  2. +
+
{c++}
+
std::string_view text = tweet["text"];
+

First, ["text"] skips the "id" field because it does not match: skips the key, : and value (1). We then check whether there are more fields by looking for either , or }.

+

The second field is matched ("text"), so we validate the : and move to the actual value.

+
+

NOTE: ["text"] does a raw match, comparing the key directly against the raw JSON. This allows simdjson to do field lookup very, very quickly when the keys you want to match have letters, numbers and punctuation. However, this means that fields with escapes in them will not be matched.

+
+

To convert to a string, we check for " and use simdjson's fast unescaping algorithm to copy first! (plus a terminating \0) into a buffer managed by the document. This buffer stores all strings from a single iteration. The next string will be written after the \0.

+

A string_view is returned which points to that buffer, and contains the length.

+

We advance to the comma, and decrease depth to 3 (root > statuses > tweet).

+

At this point, we are here in the JSON:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
^ (depth 2 - root > statuses > tweet)
+
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. We get the "screen_name" from the "user" object.
  2. +
+
{c++}
+
ondemand::object user = tweet["user"];
+
screen_name = user["screen_name"];
+

First, ["user"] finds the ,, discovers the next key is "user", validates that the : is there, and increases depth to 4 (root > statuses > tweet > field).

+

Next, the cast to ondemand::object checks for { and increases depth to 5 (root > statuses > tweet > user > field).

+

["screen_name"] finds the first field "screen_name" and validates the :.

+

To convert the result to usable string (i.e., the screen name lemire), the characters are written to the document's string buffer (after possibly escaping them), which now has two string_views pointing into it, and looks like first!\0lemire\0.

+

The iterator advances to the comma and decreases depth back to 4 (root > statuses > tweet > user).

+

At this point, the iterator is here in the JSON:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
^ (depth 4 - root > statuses > tweet > user)
+
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. We get "retweet_count" as an unsigned integer.
  2. +
+
{c++}
+
uint64_t retweets = tweet["retweet_count"];
+

First, ["retweet_count"] checks whether the previous field value is finished (if it was, depth would be 3 (root > statuses > tweet). Since it's not, we skip JSON until depth is 3. This brings the iterator to the , after the user object:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
^ (depth 4 - root > statuses > tweet > user)
+
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+

Because of the cast to uint64_t, simdjson knows it's parsing an unsigned integer. This lets us use a fast parser which only knows how to parse digits. It validates that it is an integer by rejecting negative numbers, strings, and other values based on the fact that they are not the digits 0-9. This type specificity is part of why parsing with on demand is so fast: you lose all the code that has to understand those other types.

+

The iterator is advanced to the }, and depth decreased back to 3 (root > statuses > tweet).

+

At this point, we are here in the JSON:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
^ (depth 3 - root > statuses > tweet)
+
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. We loop to the next tweet.
  2. +
+
{c++}
+
for (ondemand::object tweet : doc["statuses"]) {
+
...
+
}
+

The relevant parts of the loop are:

+
{c++}
+
while (iter != statuses.end()) {
+
ondemand::object tweet = *iter;
+
...
+
iter++;
+
}
+

First, iter++ (remember, this is the array of tweets) checks whether the previous object was fully iterated. It was not–depth is 3 (root > statuses > tweet), so we skip until it's 2–which in this case just means consuming the }, leaving the iterator at the next comma. Depth is now 2 (root > statuses).

+

Next, iter++ finds the , and advances past it to the {, increasing depth to 3 (root > statuses > tweet).

+

Finally, ondemand::object tweet = *iter validates the { and increases depth to 4 (root > statuses > tweet > field). This leaves the iterator here:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
^ (depth 3 - root > statuses > tweet)
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. This tweet is processed just like the previous one, leaving the iterator here:
  2. +
+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
^ (depth 3 - root > statuses > tweet)
+
],
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. The loop ends. Recall the relevant parts of the statuses loop:
  2. +
+
{c++}
+
while (iter != statuses.end()) {
+
ondemand::object tweet = *iter;
+
...
+
iter++;
+
}
+

First, iter++ finishes up any children, consuming the } and leaving depth at 2 (root > statuses).

+

Next, iter++ notices the ] and ends the array by decreasing depth to 1. This leaves the iterator here in the JSON:

+
{
+
"statuses": [
+
{ "id": 1, "text": "first!", "user": { "screen_name": "lemire", "name": "Daniel" }, "retweet_count": 40 },
+
{ "id": 2, "text": "second!", "user": { "screen_name": "jkeiser2", "name": "John" }, "retweet_count": 3 }
+
],
+
^ (depth 1 - root)
+
"search_metadata": { "count": 2 }
+
}
+
    +
  1. The remainder of the file is skipped.

    +

    Because no more action is taken, JSON processing stops: processing only occurs when you ask for values.

    +

    This means you can very efficiently do things like read a single value from a JSON file, or take the top N, for example. It also means the things you don't use won't be fully validated. This is a general principle of On Demand: don't validate what you don't use. We still fully validate values you do use, however, as well as the objects and arrays that lead to them, so that you can be sure you get the information you need.

    +
  2. +
+

+Design Features

+

+String Parsing

+

When the user requests strings, we unescape them to a single string buffer much like the DOM parser so that users enjoy the same string performance as the core simdjson. We do not write the length to the string buffer, however; that is stored in the string_view instance we return to the user.

+
{C++}
+
ondemand::parser parser;
+
auto doc = parser.iterate(json);
+
std::set<std::string_view> default_users;
+
ondemand::array tweets = doc["statuses"].get_array();
+
for (auto tweet_value : tweets) {
+
auto tweet = tweet_value.get_object();
+
ondemand::object user = tweet["user"].get_object();
+
std::string_view screen_name = user["screen_name"].get_string();
+
bool default_profile = user["default_profile"].get_bool();
+
if (default_profile) { default_users.insert(screen_name); }
+
}
+

By using string_view instances, we avoid the high cost of allocating many small strings (as would be the case with std::string) but be mindful that the life cycle of these string_view instances is tied to the parser instance. If the parser instance is destroyed or reused for a new JSON document, these strings are no longer valid.

+

We iterate through object instances using field instances which represent key-value pairs. The value is accessible by the value() method whereas the key is accessible by the key() method. The keys are treated differently than values are made available as as special type raw_json_string which is a lightweight type that is meant to be used on a temporary basis, amost solely for direct raw ASCII comparisons: key().raw() provides direct access to the unescaped string. You can compare key() with unescaped C strings (e.g., key()=="test"). It is expected that the provided string is a valid JSON string. Importantly, the C string must not contain an unescaped quote character ("). For speed, the comparison is done byte-by-byte without handling the escaped characters. If you occasionally need to access and store the unescaped key values, you may use the unescaped_key() method. Once you have called unescaped_key() method, neither the key() nor the unescaped_key() methods should be called: the current field instance has no longer a key (that is by design). Like other strings, the resulting std::string_view generated from the unescaped_key() method has a lifecycle tied to the parser instance: once the parser is destroyed or reused with another document, the std::string_view instance becomes invalid.

+
{C++}
+
auto doc = parser.iterate(json);
+
for(auto field : doc.get_object()) {
+
std::string_view keyv = field.unescaped_key();
+
}
+

+Iteration Safety

+

The On Demand API is powerful. To compensate, we add some safeguards to ensure that it can be used without fear in production systems:

+
    +
  • If the value fails to be parsed as one type, the program can try to parse it as something else until the program succeeds. Thus the programmer can engineer fall back routines.
  • +
  • If the value succeeds in being parsed or converted to a type, the program cannot try again. An attempt to parse the same node twice will cause the program to abort. We put this safety measure in the API to prevent double iteration of an array which would cause inconsistent iterator state or double-unescaping a string which may cause memory overruns if done.
  • +
  • Guaranteed Iteration: If you discard a value without using it–perhaps you just wanted to know if it was nullptr but did not care what the actual value was–it will iterate. The destructor automates the iteration.
  • +
+

Some care is needed when using the On Demand API in scenarios where you need to access several sibling arrays or objects because only one object or array can be active at any one time. Let us consider the following example:

+
{C++}
+
ondemand::parser parser;
+
const padded_string json = R"({ "parent": {"child1": {"name": "John"} , "child2": {"name": "Daniel"}} })"_padded;
+
auto doc = parser.iterate(json);
+
ondemand::object parent = doc["parent"];
+
// parent owns the focus
+
ondemand::object c1 = parent["child1"];
+
// c1 owns the focus
+
//
+
if(std::string_view(c1["name"]) != "John") { ... }
+
// c2 attempts to grab the focus from parent but fails
+
ondemand::object c2 = parent["child2"];
+
// c2 is now in an unsafe state and the following line would be unsafe
+
// if(std::string_view(c2["name"]) != "Daniel") { return false; }
+
A correct usage is given by the following example:
+
{C++}
+
ondemand::parser parser;
+
const padded_string json = R"({ "parent": {"child1": {"name": "John"} , "child2": {"name": "Daniel"}} })"_padded;
+
auto doc = parser.iterate(json);
+
ondemand::object parent = doc["parent"];
+
// At this point, parent owns the focus
+
{
+
ondemand::object c1 = parent["child1"];
+
// c1 grabbed the focus from parent
+
if(std::string_view(c1["name"]) != "John") { return false; }
+
}
+
// c1 went out of scope, so its destructor was called and the focus
+
// was handed back to parent.
+
{
+
ondemand::object c2 = parent["child2"];
+
// c2 grabbed the focus from parent
+
// the following is safe:
+
if(std::string_view(c2["name"]) != "Daniel") { return false; }
+
}
+

+Benefits of the On Demand Approach

+

We expect that the On Demand approach has many of the performance benefits of the schema-based approach, while providing a flexibility that is similar to that of the DOM-based approach.

+
    +
  • Faster than DOM in some cases. Reduced memory usage.
  • +
  • Straightforward, programmer-friendly interface (arrays and objects).
  • +
  • Highly expressive, beyond deserialization and pointer queries: many tasks can be accomplished with little code.
  • +
+

+Limitations of the On Demand Approach

+

The On Demand approach has some limitations:

+
    +
  • Because it operates in streaming mode, you only have access to the current element in the JSON document. Furthermore, the document is traversed in order so the code is sensitive to the order of the JSON nodes in the same manner as an event-based approach (e.g., SAX). (The one exception to this is field lookup, which is more performant when the order of lookups matches the order of fields in the document, but which will still work with out-of-order fields, with a performance hit.)
  • +
  • The On Demand approach is less safe than DOM: we only validate the components of the JSON document that are used and it is possible to begin ingesting an invalid document only to find out later that the document is invalid. Are you fine ingesting a large JSON document that starts with well formed JSON but ends with invalid JSON content?
  • +
+

There are currently additional technical limitations which we expect to resolve in future releases of the simdjson library:

+
    +
  • The simdjson library offers runtime dispatching which allows you to compile one binary and have it run at full speed on different processors, taking advantage of the specific features of the processor. The On Demand API has limited runtime dispatch support. Under x64 systems, to fully benefit from the On Demand API, we recommend that you compile your code for a specific processor. E.g., if your processor supports AVX2 instructions, you should compile your binary executable with AVX2 instruction support (by using your compiler's commands). If you are sufficiently technically proficient, you can implement runtime dispatching within your application, by compiling your On Demand code for different processors.
  • +
  • There is an initial phase which scans the entire document quickly, irrespective of the size of the document. We plan to break this phase into distinct steps for large files in a future release as we have done with other components of our API (e.g., parse_many).
  • +
+

+Applicability of the On Demand Approach

+

At this time we recommend the On Demand API in the following cases:

+
    +
  1. The 64-bit hardware (CPU) used to run the software is known at compile time. If you need runtime dispatching because you cannot be certain of the hardware used to run your software, you will be better served with the core simdjson API. (This only applies to x64 (AMD/Intel). On 64-bit ARM hardware, runtime dispatching is unnecessary.)
  2. +
  3. The used parts of JSON files do not need to be validated and the layout of the nodes follows a strict JSON dialect. If you are receiving JSON from other systems, you might be better served with core simdjson API as it fully validates the JSON inputs and allows you to navigate through the document at will.
  4. +
  5. Speed and efficiency are of the utmost importance. Keep in mind that the core simdjson API is highly efficient so adopting the On Demand API is not necessary for high efficiency.
  6. +
  7. As a developer, you value a clean, flexible and maintainable API.
  8. +
+

Good applications for the On Demand API might be:

+
    +
  • You are working from pre-existing large JSON files that have been vetted. You expect them to be well formed according to a known JSON dialect and to have a consistent layout. For example, you might be doing biomedical research or machine learning on top of static data dumps in JSON.
  • +
  • Both the generation and the consumption of JSON data is within your system. Your team controls both the software that produces the JSON and the software the parses it, your team knows and control the hardware. Thus you can fully test your system.
  • +
  • You are working with stable JSON APIs which have a consistent layout and JSON dialect.
  • +
+

+Checking Your CPU Selection (x64 systems)

+

The On Demand API uses advanced architecture-specific code for many common processors to make JSON preprocessing and string parsing faster. By default, however, most c++ compilers will compile to the least common denominator (since the program could theoretically be run anywhere). Since On Demand is inlined into your own code, it cannot always use these advanced versions unless the compiler is told to target them.

+

On relevant systems, the On Demand API provides some support for runtime dispatching: that is, it will attempt to detect, at runtime, the instructions that your processor supports and optimize the code accordingly. However, it cannot always make full use of the features of your processor.

+

Some users wish to run at the best possible speed. Under recent Intel and AMD processors, these users should take additional steps to verify that their code is well optimized.

+

Given that the On Demand API offer limited runtime dispatching, it matters that your code is compiled against a specific CPU target. You should verify that the code is compiled against the target you expect. Thankfully, the simdjson library will tell you exactly what it detects as an implementation: haswell (AVX2 x64 processors), westmere (SSE4 x64 processors), arm64 (64-bit ARM), ppc64 (64-bit POWER), fallback (others). Under x64 processors, many programmers will want to target haswell whereas under ARM, most programmers will want to target arm64 (and it should do so automatically). The fallback is probably only good for testing purposes, not for deployment.

+
{C++}
+
std::cout << simdjson::builtin_implementation()->name() << std::endl;
+

If the simdjson::builtin_implementation()->name() call does not return the architecture you wish to target, you may need to pass flags to your compiler.

+

If you are using CMake for your C++ project, then you can pass compilation flags to your compiler by using the CMAKE_CXX_FLAGS variable:

+
cmake -DCMAKE_CXX_FLAGS="-march=haswell" -B build_haswell
+
cmake --build build_haswell
+

You can also pass the flags directly to your compiler when compiling 'by hand':

+
c++ -march=haswell -O3 myproject.cpp simdjson.cpp
+

In these examples, the -march=haswell flags targets a haswell processor and the resulting binary will run on processors that support all features of the haswell processors.

+

Instead of specifying a specific microarchitecture, you can let your compiler do the work. The -march=native flags says "target the current computer," which is a reasonable default for many applications which both compile and run on the same processor.

+

Passing -march=native to the compiler may make On Demand faster by allowing it to use optimizations specific to your machine. You cannot do this, however, if you are compiling code that might be run on less advanced machines. That is, be mindful that when compiling with the -march=native flag, the resulting binary will run on the current system but may not run on other systems (e.g., on an old processor).

+

If you are compiling on an ARM or POWER system, you do not need to be concerned with CPU selection during compilation. The -march=native flag useful for best performance on x64 (e.g., Intel) systems but it is generally unsupported on some platforms such as ARM (aarch64) or POWER.

+
+
+
+ + + + diff --git a/md_doc_parse_many.html b/md_doc_parse_many.html new file mode 100644 index 000000000..3e80ba9a3 --- /dev/null +++ b/md_doc_parse_many.html @@ -0,0 +1,223 @@ + + + + + + + +simdjson: parse_many + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
parse_many
+
+
+

An interface providing features to work with files or streams containing multiple small JSON documents. Given an input such as

{"text":"a"}
+
{"text":"b"}
+
{"text":"c"}
+
...
+

... you want to read the entries (individual JSON documents) as quickly and as conveniently as possible. Importantly, the input might span several gigabytes, but you want to use a small (fixed) amount of memory. Ideally, you'd also like the parallelize the processing (using more than one core) to speed up the process.

+

+Contents

+ +

+Motivation

+

The main motivation for this piece of software is to achieve maximum speed and offer a better quality of life in parsing files containing multiple small JSON documents.

+

The JavaScript Object Notation (JSON) RFC7159 is a handy serialization format. However, when serializing a large sequence of values as an array, or a possibly indeterminate-length or never- ending sequence of values, JSON may be inconvenient.

+

Consider a sequence of one million values, each possibly one kilobyte when encoded – roughly one gigabyte. It is often desirable to process such a dataset incrementally without having to first read all of it before beginning to produce results.

+

+Performance

+

The following is a chart comparing the speed of the different alternatives to parse a multiline JSON. The simdjson library provides a threaded and non-threaded parse_many() implementation. As the figure below shows, if you can, use threads, but if you cannot, the unthreaded mode is still fast! Chart.png

+

+How it works

+

+Context

+

The parsing in simdjson is divided into 2 stages. First, in stage 1, we parse the document and find all the structural indexes ({, }, ], [, ,, ", ...) and validate UTF8. Then, in stage 2, we go through the document again and build the tape using structural indexes found during stage 1. Although stage 1 finds the structural indexes, it has no knowledge of the structure of the document nor does it know whether it parsed a valid document, multiple documents, or even if the document is complete.

+

Prior to parse_many, most people who had to parse a multiline JSON file would proceed by reading the file line by line, using a utility function like std::getline or equivalent, and would then use the parse on each of those lines. From a performance point of view, this process is highly inefficient, in that it requires a lot of unnecessary memory allocation and makes use of the getline function, which is fundamentally slow, slower than the act of parsing with simdjson (more on this here).

+

Unlike the popular parser RapidJson, our DOM does not require the buffer once the parsing job is completed, the DOM and the buffer are completely independent. The drawback of this architecture is that we need to allocate some additional memory to store our ParsedJson data, for every document inside a given file. Memory allocation can be slow and become a bottleneck, therefore, we want to minimize it as much as possible.

+

+Design

+

To achieve a minimum amount of allocations, we opted for a design where we create only one parser object and therefore allocate its memory once, and then recycle it for every document in a given file. But, knowing that they often have largely varying size, we need to make sure that we allocate enough memory so that all the documents can fit. This value is what we call the batch size. As of right now, we need to manually specify a value for this batch size, it has to be at least as big as the biggest document in your file, but not too big so that it submerges the cached memory. The bigger the batch size, the fewer we need to make allocations. We found that 1MB is somewhat a sweet spot.

+
    +
  1. When the user calls parse_many, we return a document_stream which the user can iterate over to receive parsed documents.
  2. +
  3. We call stage 1 on the first batch_size bytes of JSON in the buffer, detecting structural indexes for all documents in that batch.
  4. +
  5. We call stage 2 on the indexes, reading tokens until we reach the end of a valid document (i.e. a single array, object, string, boolean, number or null).
  6. +
  7. Each time the user calls ++ to read the next document, we call stage 2 to parse the next document where we left off.
  8. +
  9. When we reach the end of the batch, we call stage 1 on the next batch, starting from the end of the last document, and go to step 3.
  10. +
+

+Threads

+

But how can we make use of threads if they are available? We found a pretty cool algorithm that allows us to quickly identify the position of the last JSON document in a given batch. Knowing exactly where the end of the batch is, we no longer need for stage 2 to finish in order to load a new batch. We already know where to start the next batch. Therefore, we can run stage 1 on the next batch concurrently while the main thread is going through stage 2. Running stage 1 in a different thread can, in best cases, remove almost entirely its cost and replaces it by the overhead of a thread, which is orders of magnitude cheaper. Ain't that awesome!

+

Thread support is only active if thread supported is detected in which case the macro SIMDJSON_THREADS_ENABLED is set. Otherwise the library runs in single-thread mode.

+

A document_stream instance uses at most two threads: there is a main thread and a worker thread. You should expect the main thread to be fully occupied while the worker thread is partially busy (e.g., 80% of the time).

+

+Support

+

Since we want to offer flexibility and not restrict ourselves to a specific file format, we support any file that contains any amount of valid JSON document, separated by one or more character that is considered whitespace by the JSON spec. Anything that is not whitespace will be parsed as a JSON document and could lead to failure.

+

Whitespace Characters:

    +
  • Space
  • +
  • Linefeed
  • +
  • Carriage return
  • +
  • Horizontal tab
  • +
  • Nothing
  • +
+

Some official formats **(non-exhaustive list)**:

+

+API

+

See basics.md for an overview of the API.

+

+Use cases

+

From jsonlines.org:

+
    +
  • Better than CSV ```json ["Name", "Session", "Score", "Completed"] ["Gilbert", "2013", 24, true] ["Alexa", "2013", 29, true] ["May", "2012B", 14, false] ["Deloise", "2012A", 19, true] ``` CSV seems so easy that many programmers have written code to generate it themselves, and almost every implementation is different. Handling broken CSV files is a common and frustrating task. CSV has no standard encoding, no standard column separator and multiple character escaping standards. String is the only type supported for cell values, so some programs attempt to guess the correct types.

    +

    JSON Lines handles tabular data cleanly and without ambiguity. Cells may use the standard JSON types.

    +

    The biggest missing piece is an import/export filter for popular spreadsheet programs so that non-programmers can use this format.

    +
  • +
  • Easy Nested Data ```json {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]} {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]} {"name": "May", "wins": []} {"name": "Deloise", "wins": [["three of a kind", "5♣"]]} ``‘ JSON Lines’ biggest strength is in handling lots of similar nested data structures. One .jsonl file is easier to work with than a directory full of XML files.
  • +
+

+Tracking your position

+

Some users would like to know where the document they parsed is in the input array of bytes. It is possible to do so by accessing directly the iterator and calling its current_index() method which reports the location (in bytes) of the current document in the input stream. You may also call the source() method to get a std::string_view instance on the document.

+

Let us illustrate the idea with code:

+
{C++}
+
auto json = R"([1,2,3] {"1":1,"2":3,"4":4} [1,2,3] )"_padded;
+
simdjson::dom::parser parser;
+
simdjson::dom::document_stream stream;
+
auto error = parser.parse_many(json).get(stream);
+
if( error ) { /* do something */ }
+
auto i = stream.begin();
+
size_t count{0};
+
for(; i != stream.end(); ++i) {
+
auto doc = *i;
+
if(!doc.error()) {
+
std::cout << "got full document at " << i.current_index() << std::endl;
+
std::cout << i.source() << std::endl;
+
count++;
+
} else {
+
std::cout << "got broken document at " << i.current_index() << std::endl;
+
return false;
+
}
+
}
+

This code will print:

got full document at 0
+
[1,2,3]
+
got full document at 9
+
{"1":1,"2":3,"4":4}
+
got full document at 29
+
[1,2,3]
+

+Incomplete streams

+

Some users may need to work with truncated streams. The simdjson may truncate documents at the very end of the stream that cannot possibly be valid JSON (e.g., they contain unclosed strings, unmatched brackets, unmatched braces). After iterating through the stream, you may query the truncated_bytes() method which tells you how many bytes were truncated. If the stream is made of full (whole) documents, then you should expect truncated_bytes() to return zero.

+

Consider the following example where a truncated document ({"key":"intentionally unclosed string) containing 39 bytes has been left within the stream. In such cases, the first two whole documents are parsed and returned, and the truncated_bytes() method returns 39.

+
{C++}
+
auto json = R"([1,2,3] {"1":1,"2":3,"4":4} {"key":"intentionally unclosed string )"_padded;
+
simdjson::dom::parser parser;
+
simdjson::dom::document_stream stream;
+
auto error = parser.parse_many(json,json.size()).get(stream);
+
if(error) { std::cerr << error << std::endl; return; }
+
for(auto doc : stream) {
+
std::cout << doc << std::endl;
+
}
+
std::cout << stream.truncated_bytes() << " bytes "<< std::endl; // returns 39 bytes
+

Importantly, you should only call truncated_bytes() after iterating through all of the documents since the stream cannot tell whether there are truncated documents at the very end when it may not have accessed that part of the data yet.

+
+
+
+ + + + diff --git a/md_doc_performance.html b/md_doc_performance.html new file mode 100644 index 000000000..7ca680f4d --- /dev/null +++ b/md_doc_performance.html @@ -0,0 +1,206 @@ + + + + + + + +simdjson: Performance Notes + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Performance Notes
+
+
+

simdjson strives to be at its fastest without tuning, and generally achieves this. However, there are still some scenarios where tuning can enhance performance.

+ +

+Reusing the parser for maximum efficiency

+

If you're using simdjson to parse multiple documents, or in a loop, you should make a parser once and reuse it. The simdjson library will allocate and retain internal buffers between parses, keeping buffers hot in cache and keeping memory allocation and initialization to a minimum. In this manner, you can parse terabytes of JSON data without doing any new allocation.

+
{c++}
+
ondemand::parser parser;
+
+
// This initializes buffers big enough to handle this JSON.
+
auto json = "[ true, false ]"_padded;
+
auto doc = parser.iterate(json);
+
for(bool i : doc.get_array()) {
+
cout << i << endl;
+
}
+
+
// This reuses the existing buffers
+
auto number_json = "[1, 2, 3]"_padded;
+
doc = parser.iterate(number_json);
+
for(int64_t i : doc.get_array()) {
+
cout << i << endl;
+
}
+

+Reusing string buffers

+

We recommend against creating many std::string or simdjson::padded_string instances to store the JSON content in your application. Creating many non-trivial objects is convenient but often surprisingly slow. Instead, as much as possible, you should allocate (once or a few times) reusable memory buffers where you write your JSON content. If you have a buffer json_str (of type char*) allocated for capacity bytes and you store a JSON document spanning length bytes, you can pass it to simdjson as follows:

+
{c++}
+
auto doc = parser.iterate(padded_string_view(json_str, length, capacity));
+

or simply

+
{c++}
+
auto doc = parser.iterate(json_str, length, capacity);
+

+Server Loops: Long-Running Processes and Memory Capacity

+

The On Demand approach also automatically expands its memory capacity when larger documents are parsed. However, for longer processes where very large files are processed (such as server loops), this capacity is not resized down. On Demand also lets you adjust the maximal capacity that the parser can process:

+
    +
  • You can set an upper bound (max_capacity) when construction the parser:
    {C++}
    +
    ondemand::parser parser(1000*1000); // Never grows past documents > 1 MB
    +
    auto doc = parser.iterate(json);
    +
    for (web_request request : listen()) {
    +
    padded_string json;
    +
    padded_string json = padded_string::load(request.body);
    +
    auto error = parser.iterate(json);
    +
    // If the document was above our limit, emit 413 = payload too large
    +
    if (error == CAPACITY) { request.respond(413); continue; }
    +
    // ...
    +
    }
    +
  • +
+

The capacity will grow as the parser encounters larger documents up to 1 MB.

+
    +
  • You can also allocate a fixed capacity that will never grow:
    {C++}
    +
    ondemand::parser parser(1000*1000);
    +
    parser.allocate(1000*1000) // Fix the capacity to 1 MB
    +
    auto doc = parser.iterate(json);
    +
    for (web_request request : listen()) {
    +
    padded_string json;
    +
    padded_string json = padded_string::load(request.body);
    +
    auto error = parser.iterate(json);
    +
    // If the document was above our limit, emit 413 = payload too large
    +
    if (error == CAPACITY) { request.respond(413); continue; }
    +
    // ...
    +
    }
    +
    You can also manually set the maximal capacity using the method set_max_capacity().
  • +
+

+Large files and huge page support

+

There is a memory allocation performance cost the first time you process a large file (e.g. 100MB). Between the cost of allocation, the fact that the memory is not in cache, and the initial zeroing of memory, on some systems, allocation runs far slower than parsing (e.g., 1.4GB/s). Reusing the parser mitigates this by paying the cost once, but does not eliminate it.

+

In large file use cases, enabling transparent huge page allocation on the OS can help a lot. We haven't found the right way to do this on Windows or OS/X, but on Linux, you can enable transparent huge page allocation with a command like:

+
echo always > /sys/kernel/mm/transparent_hugepage/enabled
+

In general, when running benchmarks over large files, we recommend that you report performance numbers with and without huge pages if possible. Furthermore, you should amortize the parsing (e.g., by parsing several large files) to distinguish the time spent parsing from the time spent allocating memory. If you are using the parse benchmarking tool provided with the simdjson library, you can use the -H flag to omit the memory allocation cost from the benchmark results.

+
./parse largefile # includes memory allocation cost
+
./parse -H largefile # without memory allocation
+

+Number parsing

+

Some JSON files contain many floating-point values. It is the case with many GeoJSON files. Accurately parsing decimal strings into binary floating-point values with proper rounding is challenging. To our knowledge, it is not possible, in general, to parse streams of numbers at gigabytes per second using a single core. While using the simdjson library, it is possible that you might be limited to a few hundred megabytes per second if your JSON documents are densely packed with floating-point values.

+
    +
  • When possible, you should favor integer values written without a decimal point, as it simpler and faster to parse decimal integer values.
  • +
  • When serializing numbers, you should not use more digits than necessary: 17 digits is all that is needed to exactly represent double-precision floating-point numbers. Using many more digits than necessary will make your files larger and slower to parse.
  • +
  • When benchmarking parsing speeds, always report whether your JSON documents are made mostly of floating-point numbers when it is the case, since number parsing can then dominate the parsing time.
  • +
+

+Visual Studio

+

On Intel and AMD Windows platforms, Microsoft Visual Studio enables programmers to build either 32-bit (x86) or 64-bit (x64) binaries. We urge you to always use 64-bit mode. Visual Studio 2019 should default on 64-bit builds when you have a 64-bit version of Windows, which we recommend.

+

When compiling with Visual Studio, we recommend the flags /Ob2 /O2 or better. We do not recommend that you compile simdjson with architecture-specific flags such as arch:AVX2. The simdjson library automatically selects the best execution kernel at runtime.

+

Recent versions of Microsoft Visual Studio on Windows provides support for the LLVM Clang compiler. You only need to install the "Clang compiler" optional component (ClangCL). You may also get a copy of the 64-bit LLVM CLang compiler for Windows directly from LLVM. The simdjson library fully supports the LLVM Clang compiler under Windows. In fact, you may get better performance out of simdjson with the LLVM Clang compiler than with the regular Visual Studio compiler. Meanwhile the LLVM CLang compiler is binary compatible with Visual Studio which means that you can combine their binaries (executables and libraries).

+

Under Windows, we also support the GNU GCC compiler via MSYS2. The performance of 64-bit MSYS2 under Windows excellent (on par with Linux).

+

+Power Usage and Downclocking

+

The simdjson library relies on SIMD instructions. SIMD instructions are the public transportation of computing. Instead of using 4 distinct instructions to add numbers, you can replace them with a single instruction that does the same work. Though the one instruction is slightly more expensive, the energy used per unit of work is much less with SIMD. If you can increase your speed using SIMD instructions (NEON, SSE, AVX), you should expect to reduce your power usage.

+

The SIMD instructions that simdjson relies upon (SSE and AVX under x64, NEON under ARM, ALTIVEC under PPC) are routinely part of runtime libraries (e.g., Go, Glibc, LLVM, Rust, Java, PHP). What distinguishes the simdjson library is that it is built from the ground up to benefit from these instructions.

+

You should not expect the simdjson library to cause downclocking of your recent Intel CPU cores. On some Intel processors, using SIMD instructions in a sustained manner on the same CPU core may result in a phenomenon called downclocking whereas the processor initially runs these instructions at a slow speed before reducing the frequency of the core for a short time (milliseconds). Intel refers to these states as licenses. On some current Intel processors, it occurs under two scenarios:

+
    +
  • Whenever 512-bit AVX-512 instructions are used.
  • +
  • Whenever heavy 256-bit or wider instructions are used. Heavy instructions are those involving floating point operations or integer multiplications (since these execute on the floating point unit).
  • +
+

The simdjson library does not make use of heavy 256-bit instructions. We do use vectorized multiplications, but only using 128-bit registers. Thus there should be no downclocking due to simdjson on recent processors, except when AVX-512 is allowed and detected. However, we only allow AVX-512 on recent processors (Ice Lake/Tiger Lake or better) where little to no frequency throttling is expected. If you can still concerned, you can easily disable AVX-512 with the CMake option SIMDJSON_AVX512_ALLOWED set to OFF (e.g., cmake -D SIMDJSON_AVX512_ALLOWED=OFF -B build && cmake --build build) or by setting the macro SIMDJSON_AVX512_ALLOWED to 0 in C++ prior to importing the headers.

+

You may still be worried about which SIMD instruction set is used by simdjson. Thankfully, you can always determine and change which architecture-specific implementation is used by simdjson. Thus even if your CPU supports AVX2, you do not need to use AVX2. You are in control.

+
+
+
+ + + + diff --git a/md_doc_tape.html b/md_doc_tape.html new file mode 100644 index 000000000..4413059b6 --- /dev/null +++ b/md_doc_tape.html @@ -0,0 +1,245 @@ + + + + + + + +simdjson: Tape structure in simdjson + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
simdjson +  3.1.0 +
+
Ridiculously Fast JSON
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Tape structure in simdjson
+
+
+

We parse a JSON document to a tape. A tape is an array of 64-bit values. Each node encountered in the JSON document is written to the tape using one or more 64-bit tape elements; the layout of the tape is in "document order": elements are stored as they are encountered in the JSON document.

+

Throughout, little endian encoding is assumed. The tape is indexed starting at 0 (the first element is at index 0).

+

+Example

+

It is sometimes useful to start with an example. Consider the following JSON document:

+
{
+
"Image": {
+
"Width": 800,
+
"Height": 600,
+
"Title": "View from 15th Floor",
+
"Thumbnail": {
+
"Url": "http://www.example.com/image/481989943",
+
"Height": 125,
+
"Width": 100
+
},
+
"Animated": false,
+
"IDs": [116, 943, 234, 38793]
+
}
+
}
+

The following is a dump of the content of the tape, with the first number of each line representing the index of a tape element.

+

+The Tape

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
index element (64 bit word)
0 r // pointing to 39 (right after last node)
1 { // pointing to next tape location 38 (first node after the scope)
2 string "Image"
3 { // pointing to next tape location 37 (first node after the scope)
4 string "Width"
5 integer 800
7 string "Height"
8 integer 600
10 string "Title"
11 string "View from 15th Floor"
12 string "Thumbnail"
13 { // pointing to next tape location 23 (first node after the scope)
14 string "Url"
15 string "http://www.example.com/image/481989943"
16 string "Height"
17 integer 125
19 string "Width"
20 integer 100
22 } // pointing to previous tape location 13 (start of the scope)
23 string "Animated"
24 false
25 string "IDs"
26 [ // pointing to next tape location 36 (first node after the scope)
27 integer 116
29 integer 943
31 integer 234
33 integer 38793
35 ] // pointing to previous tape location 26 (start of the scope)
36 } // pointing to previous tape location 3 (start of the scope)
37 } // pointing to previous tape location 1 (start of the scope)
38 r // pointing to 0 (start root)
+

+General formal of the tape elements

+

Most tape elements are written as ‘('c’ << 56) + xwhere'c'‘ is some ASCII character determining the type of the element (out of 't’, 'f', 'n', 'l', 'u', 'd', '"', '{', '}', '[', ']' ,'r') and where x is a 56-bit value called the payload. The payload is normally interpreted as an unsigned 56-bit integer. Note that 56-bit integers can be quite large.

+

Performance consideration: We believe that accessing the tape in regular units of 64 bits is more important for performance than saving memory.

+

+Simple JSON values

+

Simple JSON nodes are represented with one tape element:

+
    +
  • null is represented as the 64-bit value ‘('n’ << 56)where'n'is the 8-bit code point values (in ASCII) corresponding to the letter'n'.
  • +
  • true is represented as the 64-bit value('t' << 56).
  • +
  • false is represented as the 64-bit value('f' << 56)`.
  • +
+

+Integer and Double values

+

Integer values are represented as two 64-bit tape elements:

    +
  • The 64-bit value ‘('l’ << 56)followed by the 64-bit integer value literally. Integer values are assumed to be signed 64-bit values, using two's complement notation.
  • +
  • The 64-bit value('u' << 56)` followed by the 64-bit integer value literally. Integer values are assumed to be unsigned 64-bit values.
  • +
+

Float values are represented as two 64-bit tape elements:

    +
  • The 64-bit value ‘('d’ << 56)` followed by the 64-bit double value literally in standard IEEE 754 notation.
  • +
+

Performance consideration: We store numbers of the main tape because we believe that locality of reference is helpful for performance.

+

+Root node

+

Each JSON document will have two special 64-bit tape elements representing a root node, one at the beginning and one at the end.

+
    +
  • The first 64-bit tape element contains the value ‘('r’ << 56) + xwherexis the location on the tape of the last root element.
  • +
  • The last 64-bit tape element contains the value('r' << 56)`.
  • +
+

All of the parsed document is located between these two 64-bit tape elements.

+

Hint: We can read the first tape element to determine the length of the tape.

+

+Strings

+

We prefix the string data itself by a 32-bit header to be interpreted as a 32-bit integer. It indicates the length of the string. The actual string data starts at an offset of 4 bytes.

+

We store string values using UTF-8 encoding with null termination on a separate tape. A string value is represented on the main tape as the 64-bit tape element ‘(’"' << 56) + xwhere the payloadx` is the location on the string tape of the null-terminated string.

+

+Arrays

+

JSON arrays are represented using two 64-bit tape elements.

+
    +
  • The first 64-bit tape element contains the value ‘(’[' << 56) + (c << 32) + xwhere the payloadxis 1 + the index of the second 64-bit tape element on the tape as a 32-bit integer and wherecis the count of the number of elements (immediate children) in the array, satured to a 24-bit value (meaning that it cannot exceed 16777215 and if the real count exceeds 16777215, 16777215 is stored). Note that the exact count of elements can always be computed by iterating (e.g., when it is 16777215 or higher).
  • +
  • The second 64-bit tape element contains the value(']' << 56) + xwhere the payloadx` contains the index of the first 64-bit tape element on the tape.
  • +
+

All the content of the array is located between these two tape elements, including arrays and objects.

+

Performance consideration: We can skip the content of an array entirely by accessing the first 64-bit tape element, reading the payload and moving to the corresponding index on the tape.

+

+Objects

+

JSON objects are represented using two 64-bit tape elements.

+
    +
  • The first 64-bit tape element contains the value ‘(’{' << 56) + (c << 32) + xwhere the payloadxis 1 + the index of the second 64-bit tape element on the tape as a 32-bit integer and wherecis the count of the number of key-value pairs (immediate children) in the array, satured to a 24-bit value (meaning that it cannot exceed 16777215 and if the real count exceeds 16777215, 16777215 is stored). Note that the exact count of key-value pairs can always be computed by iterating (e.g., when it is 16777215 or higher).
  • +
  • The second 64-bit tape element contains the value('}' << 56) + xwhere the payloadx` contains the index of the first 64-bit tape element on the tape.
  • +
+

In-between these two tape elements, we alternate between key (which must be strings) and values. A value could be an object or an array.

+

All the content of the object is located between these two tape elements, including arrays and objects.

+

Performance consideration: We can skip the content of an object entirely by accessing the first 64-bit tape element, reading the payload and moving to the corresponding index on the tape.

+
+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 000000000..2fe2214f2 --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 000000000..a2652c31e --- /dev/null +++ b/menudata.js @@ -0,0 +1,117 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"b",url:"namespacemembers.html#index_b"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"j",url:"namespacemembers.html#index_j"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}, +{text:"u",url:"namespacemembers.html#index_u"}, +{text:"v",url:"namespacemembers.html#index_v"}]}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}, +{text:"Enumerator",url:"namespacemembers_eval.html",children:[ +{text:"c",url:"namespacemembers_eval.html#index_c"}, +{text:"d",url:"namespacemembers_eval.html#index_d"}, +{text:"e",url:"namespacemembers_eval.html#index_e"}, +{text:"f",url:"namespacemembers_eval.html#index_f"}, +{text:"i",url:"namespacemembers_eval.html#index_i"}, +{text:"m",url:"namespacemembers_eval.html#index_m"}, +{text:"n",url:"namespacemembers_eval.html#index_n"}, +{text:"o",url:"namespacemembers_eval.html#index_o"}, +{text:"p",url:"namespacemembers_eval.html#index_p"}, +{text:"s",url:"namespacemembers_eval.html#index_s"}, +{text:"t",url:"namespacemembers_eval.html#index_t"}, +{text:"u",url:"namespacemembers_eval.html#index_u"}]}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"k",url:"functions_func_k.html#index_k"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/minify_8h_source.html b/minify_8h_source.html new file mode 100644 index 000000000..d763d3e95 --- /dev/null +++ b/minify_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + +simdjson: include/simdjson/minify.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    minify.h
    +
    +
    +
    1 #ifndef SIMDJSON_MINIFY_H
    +
    2 #define SIMDJSON_MINIFY_H
    +
    3 
    +
    4 #include "simdjson/common_defs.h"
    +
    5 #include "simdjson/padded_string.h"
    +
    6 #include <string>
    +
    7 #include <ostream>
    +
    8 #include <sstream>
    +
    9 
    +
    10 namespace simdjson {
    +
    11 
    +
    12 
    +
    13 
    +
    28 simdjson_warn_unused error_code minify(const char *buf, size_t len, char *dst, size_t &dst_len) noexcept;
    +
    29 
    +
    30 } // namespace simdjson
    +
    31 
    +
    32 #endif // SIMDJSON_MINIFY_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    std::string minify(T x)
    Minifies a JSON element or document, printing the smallest possible valid JSON.
    +
    +
    + + + + diff --git a/modules.html b/modules.html new file mode 100644 index 000000000..a73c7e995 --- /dev/null +++ b/modules.html @@ -0,0 +1,109 @@ + + + + + + + +simdjson: Modules + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules
    +
    +
    +
    Here is a list of all modules:
    + + + + +
     Object iterationMethods to iterate and find object fields
     Array iterationMethods to iterate over array elements
     Scalar values
    +
    +
    +
    + + + + diff --git a/modules.js b/modules.js new file mode 100644 index 000000000..41ebef868 --- /dev/null +++ b/modules.js @@ -0,0 +1,6 @@ +var modules = +[ + [ "Object iteration", "group__object.html", "group__object" ], + [ "Array iteration", "group__array.html", "group__array" ], + [ "Scalar values", "group__scalar.html", null ] +]; \ No newline at end of file diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 000000000..405d5bd19 --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,328 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - b -

      +
    • builtin_implementation() +: simdjson +
    • +
    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

      +
    • get_active_implementation() +: simdjson +
    • +
    • get_available_implementations() +: simdjson +
    • +
    + + +

    - i -

    + + +

    - j -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    + + +

    - v -

    +
    +
    + + + + diff --git a/namespacemembers_enum.html b/namespacemembers_enum.html new file mode 100644 index 000000000..4278e17a3 --- /dev/null +++ b/namespacemembers_enum.html @@ -0,0 +1,112 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/namespacemembers_eval.html b/namespacemembers_eval.html new file mode 100644 index 000000000..3fdbd64d5 --- /dev/null +++ b/namespacemembers_eval.html @@ -0,0 +1,248 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - i -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    +
    +
    + + + + diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 000000000..debba0e99 --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,134 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/namespacemembers_type.html b/namespacemembers_type.html new file mode 100644 index 000000000..60b709b5a --- /dev/null +++ b/namespacemembers_type.html @@ -0,0 +1,109 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html new file mode 100644 index 000000000..74b4c0884 --- /dev/null +++ b/namespacemembers_vars.html @@ -0,0 +1,109 @@ + + + + + + + +simdjson: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 000000000..1e06e96de --- /dev/null +++ b/namespaces.html @@ -0,0 +1,162 @@ + + + + + + + +simdjson: Namespace List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 12345]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NsimdjsonWe want to support argument-dependent lookup (ADL)
     Ndom
     CarrayJSON array
     Citerator
     CdocumentA parsed JSON document
     Cdocument_streamA forward-only stream of documents
     CiteratorAn iterator through a forward-only stream of documents
     CelementA JSON element
     CobjectJSON object
     Citerator
     Ckey_value_pairKey/value pair in an object
     CparserA persistent document parser
     NSIMDJSON_IMPLEMENTATION
     NondemandA fast, simple, DOM-like interface that parses JSON as you use it
     Nlogger
     CarrayA forward-only JSON array
     Carray_iteratorA forward-only JSON array
     CdocumentA JSON document
     Cdocument_referenceA document_reference is a thin wrapper around a document reference instance
     Cdocument_streamA forward-only stream of documents
     Citerator
     CfieldA JSON field (key/value pair) in an object
     CnumberA type representing a JSON number
     CobjectA forward-only JSON object field iterator
     Cobject_iterator
     CparserA JSON fragment iterator
     Craw_json_stringA string escaped per JSON rules, terminated with quote (")
     CvalueAn ephemeral JSON value returned during iteration
     Copen_container
     Cdom_parser_implementation
     Cimplementation_simdjson_result_baseThe result of a simdjson operation that could fail
     Csimdjson_result< dom::array >The result of a JSON conversion that may fail
     Csimdjson_result< dom::document_stream >
     Csimdjson_result< dom::element >The result of a JSON navigation that may fail
     Csimdjson_result< dom::object >The result of a JSON conversion that may fail
     Csimdjson_errorException thrown when an exception-supporting simdjson method is called
     Csimdjson_resultThe result of a simdjson operation that could fail
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
     Csimdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
     CimplementationAn implementation of simdjson for a particular CPU architecture
     Cpadded_stringString with extra allocation for ease of use with parser::parse()
     Cpadded_string_viewUser-provided string that promises it has extra padded bytes at the end for use with parser::parse()
     Nstd
    +
    +
    +
    + + + + diff --git a/namespaces_dup.js b/namespaces_dup.js new file mode 100644 index 000000000..b1e56bf6c --- /dev/null +++ b/namespaces_dup.js @@ -0,0 +1,7 @@ +var namespaces_dup = +[ + [ "simdjson", "namespacesimdjson.html", "namespacesimdjson" ], + [ "std", null, [ + [ "string_view", "common__defs_8h.html#aa4a130ec97b5c7e2b248ecf0c0476d4c", null ] + ] ] +]; \ No newline at end of file diff --git a/namespacesimdjson.html b/namespacesimdjson.html new file mode 100644 index 000000000..5561299e3 --- /dev/null +++ b/namespacesimdjson.html @@ -0,0 +1,1224 @@ + + + + + + + +simdjson: simdjson Namespace Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson Namespace Reference
    +
    +
    + +

    We want to support argument-dependent lookup (ADL). +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  simdjson_result< dom::array >
     The result of a JSON conversion that may fail. More...
     
    struct  simdjson_result< dom::document_stream >
     
    struct  simdjson_result< dom::element >
     The result of a JSON navigation that may fail. More...
     
    struct  simdjson_result< dom::object >
     The result of a JSON conversion that may fail. More...
     
    struct  simdjson_error
     Exception thrown when an exception-supporting simdjson method is called. More...
     
    struct  simdjson_result
     The result of a simdjson operation that could fail. More...
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
     
    struct  simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
     
    class  implementation
     An implementation of simdjson for a particular CPU architecture. More...
     
    struct  padded_string
     String with extra allocation for ease of use with parser::parse() More...
     
    class  padded_string_view
     User-provided string that promises it has extra padded bytes at the end for use with parser::parse(). More...
     
    + + + + + +

    +Typedefs

    using ParsedJson = dom::parser
     
    using ErrorValues = error_code
     
    + + + + + + + + + +

    +Enumerations

    enum  error_code {
    +  SUCCESS = 0 +, CAPACITY +, MEMALLOC +, TAPE_ERROR +,
    +  DEPTH_ERROR +, STRING_ERROR +, T_ATOM_ERROR +, F_ATOM_ERROR +,
    +  N_ATOM_ERROR +, NUMBER_ERROR +, UTF8_ERROR +, UNINITIALIZED +,
    +  EMPTY +, UNESCAPED_CHARS +, UNCLOSED_STRING +, UNSUPPORTED_ARCHITECTURE +,
    +  INCORRECT_TYPE +, NUMBER_OUT_OF_RANGE +, INDEX_OUT_OF_BOUNDS +, NO_SUCH_FIELD +,
    +  IO_ERROR +, INVALID_JSON_POINTER +, INVALID_URI_FRAGMENT +, UNEXPECTED_ERROR +,
    +  PARSER_IN_USE +, OUT_OF_ORDER_ITERATION +, INSUFFICIENT_PADDING +, INCOMPLETE_ARRAY_OR_OBJECT +,
    +  SCALAR_DOCUMENT_AS_VALUE +, OUT_OF_BOUNDS +, TRAILING_CONTENT +, NUM_ERROR_CODES +
    + }
     All possible errors returned by simdjson. More...
     
    enum class  stage1_mode { regular +, streaming_partial +, streaming_final + }
     This enum is used with the dom_parser_implementation::stage1 function. More...
     
    enum  { SIMDJSON_VERSION_MAJOR = 3 +, SIMDJSON_VERSION_MINOR = 1 +, SIMDJSON_VERSION_REVISION = 0 + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    const implementationbuiltin_implementation ()
     Represents the best statically linked simdjson implementation that can be used by the compiling program. More...
     
    +int json_parse (const uint8_t *buf, size_t len, dom::parser &parser, bool realloc_if_needed=true) noexcept
     
    +int json_parse (const char *buf, size_t len, dom::parser &parser, bool realloc_if_needed=true) noexcept
     
    +int json_parse (const std::string &s, dom::parser &parser, bool realloc_if_needed=true) noexcept
     
    +int json_parse (const padded_string &s, dom::parser &parser) noexcept
     
    +simdjson_warn_unused dom::parser build_parsed_json (const uint8_t *buf, size_t len, bool realloc_if_needed=true) noexcept
     
    +simdjson_warn_unused dom::parser build_parsed_json (const char *buf, size_t len, bool realloc_if_needed=true) noexcept
     
    +simdjson_warn_unused dom::parser build_parsed_json (const std::string &s, bool realloc_if_needed=true) noexcept
     
    +simdjson_warn_unused dom::parser build_parsed_json (const padded_string &s) noexcept
     
    template<class T >
    std::string to_string (T x)
     Converts JSON to a string. More...
     
    +template<class T >
    std::string to_string (simdjson_result< T > x)
     
    template<class T >
    std::string minify (T x)
     Minifies a JSON element or document, printing the smallest possible valid JSON. More...
     
    +template<class T >
    std::string minify (simdjson_result< T > x)
     
    const char * error_message (error_code error) noexcept
     Get the error message for the given error code. More...
     
    const std::string error_message (int error) noexcept
     
    +std::ostream & operator<< (std::ostream &out, error_code error) noexcept
     Write the error message to the output stream.
     
    +template<typename T >
    std::ostream & operator<< (std::ostream &out, simdjson_result< T > value)
     
    +std::string_view trim (const std::string_view str) noexcept
     
    simdjson_result< std::string_view > to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::document &x) noexcept
     Create a string-view instance out of a document instance. More...
     
    +simdjson_result< std::string_view > to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::document_reference &x) noexcept
     
    simdjson_result< std::string_view > to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::value &x) noexcept
     Create a string-view instance out of a value instance. More...
     
    simdjson_result< std::string_view > to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::object &x) noexcept
     Create a string-view instance out of an object instance. More...
     
    simdjson_result< std::string_view > to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::array &x) noexcept
     Create a string-view instance out of an array instance. More...
     
    +simdjson_result< std::string_view > to_json_string (simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document > x)
     
    +simdjson_result< std::string_view > to_json_string (simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > x)
     
    +simdjson_result< std::string_view > to_json_string (simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > x)
     
    +simdjson_result< std::string_view > to_json_string (simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object > x)
     
    +simdjson_result< std::string_view > to_json_string (simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array > x)
     
    simdjson_warn_unused bool validate_utf8 (const char *buf, size_t len) noexcept
     Validate the UTF-8 string. More...
     
    simdjson_inline simdjson_warn_unused bool validate_utf8 (const std::string_view sv) noexcept
     Validate the UTF-8 string. More...
     
    simdjson_inline simdjson_warn_unused bool validate_utf8 (const std::string &s) noexcept
     Validate the UTF-8 string. More...
     
    +SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list & get_available_implementations ()
     The list of available implementations compiled into simdjson.
     
    SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr< const implementation > & get_active_implementation ()
     The active implementation. More...
     
    +bool is_streaming (stage1_mode mode)
     Returns true if mode == streaming_partial or mode == streaming_final.
     
    +padded_string get_corpus (const char *path)
     
    simdjson_warn_unused error_code minify (const char *buf, size_t len, char *dst, size_t &dst_len) noexcept
     Minify the input string assuming that it represents a JSON string, does not parse or validate. More...
     
    std::ostream & operator<< (std::ostream &out, const padded_string &s)
     Send padded_string instance to an output stream. More...
     
    std::ostream & operator<< (std::ostream &out, simdjson_result< padded_string > &s) noexcept(false)
     Send padded_string instance to an output stream. More...
     
    std::ostream & operator<< (std::ostream &out, simdjson_result< padded_string_view > &s) noexcept(false)
     Send padded_string instance to an output stream. More...
     
    + + + + + + + + + + +

    +Variables

    +constexpr size_t SIMDJSON_MAXSIZE_BYTES = 0xFFFFFFFF
     The maximum document size supported by simdjson.
     
    constexpr size_t SIMDJSON_PADDING = 64
     The amount of padding needed in a buffer to parse JSON. More...
     
    constexpr size_t DEFAULT_MAX_DEPTH = 1024
     By default, simdjson supports this many nested objects and arrays. More...
     
    +

    Detailed Description

    +

    We want to support argument-dependent lookup (ADL).

    +

    Hence we should define operator<< in the namespace where the argument (here value, object, etc.) resides. Credit: @madhur4127 See https://github.com/simdjson/simdjson/issues/1768

    +

    Typedef Documentation

    + +

    ◆ ErrorValues

    + +
    +
    + + + + +
    using simdjson::ErrorValues = typedef error_code
    +
    +
    Deprecated:
    This is an alias and will be removed, use error_code instead
    + +

    Definition at line 298 of file error.h.

    + +
    +
    + +

    ◆ ParsedJson

    + +
    +
    + + + + +
    using simdjson::ParsedJson = typedef dom::parser
    +
    +
    Deprecated:
    Use dom::parser instead.
    + +

    Definition at line 13 of file parsedjson.h.

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ anonymous enum

    + +
    +
    + + + + +
    anonymous enum
    +
    + + + + +
    Enumerator
    SIMDJSON_VERSION_MAJOR 

    The major version (MAJOR.minor.revision) of simdjson being used.

    +
    SIMDJSON_VERSION_MINOR 

    The minor version (major.MINOR.revision) of simdjson being used.

    +
    SIMDJSON_VERSION_REVISION 

    The revision (major.minor.REVISION) of simdjson being used.

    +
    + +

    Definition at line 10 of file simdjson_version.h.

    + +
    +
    + +

    ◆ error_code

    + +
    +
    + + + + +
    enum simdjson::error_code
    +
    + +

    All possible errors returned by simdjson.

    +

    These error codes are subject to change and not all simdjson kernel returns the same error code given the same input: it is not well defined which error a given input should produce.

    +

    Only SUCCESS evaluates to false as a Boolean. All other error codes will evaluate to true as a Boolean.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    SUCCESS 

    No error.

    +
    CAPACITY 

    This parser can't support a document that big.

    +
    MEMALLOC 

    Error allocating memory, most likely out of memory.

    +
    TAPE_ERROR 

    Something went wrong, this is a generic error.

    +
    DEPTH_ERROR 

    Your document exceeds the user-specified depth limitation.

    +
    STRING_ERROR 

    Problem while parsing a string.

    +
    T_ATOM_ERROR 

    Problem while parsing an atom starting with the letter 't'.

    +
    F_ATOM_ERROR 

    Problem while parsing an atom starting with the letter 'f'.

    +
    N_ATOM_ERROR 

    Problem while parsing an atom starting with the letter 'n'.

    +
    NUMBER_ERROR 

    Problem while parsing a number.

    +
    UTF8_ERROR 

    the input is not valid UTF-8

    +
    UNINITIALIZED 

    unknown error, or uninitialized document

    +
    EMPTY 

    no structural element found

    +
    UNESCAPED_CHARS 

    found unescaped characters in a string.

    +
    UNCLOSED_STRING 

    missing quote at the end

    +
    UNSUPPORTED_ARCHITECTURE 

    unsupported architecture

    +
    INCORRECT_TYPE 

    JSON element has a different type than user expected.

    +
    NUMBER_OUT_OF_RANGE 

    JSON number does not fit in 64 bits.

    +
    INDEX_OUT_OF_BOUNDS 

    JSON array index too large.

    +
    NO_SUCH_FIELD 

    JSON field not found in object.

    +
    IO_ERROR 

    Error reading a file.

    +
    INVALID_JSON_POINTER 

    Invalid JSON pointer reference.

    +
    INVALID_URI_FRAGMENT 

    Invalid URI fragment.

    +
    UNEXPECTED_ERROR 

    indicative of a bug in simdjson

    +
    PARSER_IN_USE 

    parser is already in use.

    +
    OUT_OF_ORDER_ITERATION 

    tried to iterate an array or object out of order

    +
    INSUFFICIENT_PADDING 

    The JSON doesn't have enough padding for simdjson to safely parse it.

    +
    INCOMPLETE_ARRAY_OR_OBJECT 

    The document ends early.

    +
    SCALAR_DOCUMENT_AS_VALUE 

    A scalar document is treated as a value.

    +
    OUT_OF_BOUNDS 

    Attempted to access location outside of document.

    +
    TRAILING_CONTENT 

    Unexpected trailing content in the JSON input.

    +
    + +

    Definition at line 17 of file error.h.

    + +
    +
    + +

    ◆ stage1_mode

    + +
    +
    + + + + + +
    + + + + +
    enum simdjson::stage1_mode
    +
    +strong
    +
    + +

    This enum is used with the dom_parser_implementation::stage1 function.

    +

    1) The regular mode expects a fully formed JSON document. 2) The streaming_partial mode expects a possibly truncated input within a stream on JSON documents. 3) The stream_final mode allows us to truncate final unterminated strings. It is useful in conjunction with streaming_partial.

    + +

    Definition at line 22 of file dom_parser_implementation.h.

    + +
    +
    +

    Function Documentation

    + +

    ◆ builtin_implementation()

    + +
    +
    + + + + + + + +
    const implementation* simdjson::builtin_implementation ()
    +
    + +

    Represents the best statically linked simdjson implementation that can be used by the compiling program.

    +

    Detects what options the program is compiled against, and picks the minimum implementation that will work on any computer that can run the program. For example, if you compile with g++ -march=westmere, it will pick the westmere implementation. The haswell implementation will still be available, and can be selected at runtime, but the builtin implementation (and any code that uses it) will use westmere.

    +

    Function which returns a pointer to an implementation matching the "builtin" implementation. The builtin implementation is the best statically linked simdjson implementation that can be used by the compiling program. If you compile with g++ -march=haswell, this will return the haswell implementation. It is handy to be able to check what builtin was used: builtin_implementation()->name().

    + +
    +
    + +

    ◆ error_message() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    const char * simdjson::error_message (error_code error)
    +
    +inlinenoexcept
    +
    + +

    Get the error message for the given error code.

    +

    dom::parser parser; dom::element doc; auto error = parser.parse("foo",3).get(doc); if (error) { printf("Error: %s\n", error_message(error)); }

    +
    Returns
    The error message.
    + +

    Definition at line 21 of file error-inl.h.

    + +
    +
    + +

    ◆ error_message() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    const std::string simdjson::error_message (int error)
    +
    +inlinenoexcept
    +
    +
    Deprecated:
    Error codes should be stored and returned as error_code, use error_message() instead.
    + +

    Definition at line 28 of file error-inl.h.

    + +
    +
    + +

    ◆ get_active_implementation()

    + +
    +
    + + + + + + + +
    SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr<const implementation>& simdjson::get_active_implementation ()
    +
    + +

    The active implementation.

    +

    Automatically initialized on first use to the most advanced implementation supported by this hardware.

    + +
    +
    + +

    ◆ minify() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    simdjson_warn_unused error_code simdjson::minify (const char * buf,
    size_t len,
    char * dst,
    size_t & dst_len 
    )
    +
    +noexcept
    +
    + +

    Minify the input string assuming that it represents a JSON string, does not parse or validate.

    +

    This function is much faster than parsing a JSON string and then writing a minified version of it. However, it does not validate the input. It will merely return an error in simple cases (e.g., if there is a string that was never terminated).

    +
    Parameters
    + + + + + +
    bufthe json document to minify.
    lenthe length of the json document.
    dstthe buffer to write the minified document to. MUST be allocated up to len bytes.
    dst_lenthe number of bytes written. Output only.
    +
    +
    +
    Returns
    the error code, or SUCCESS if there was no error.
    + +
    +
    + +

    ◆ minify() [2/2]

    + +
    +
    +
    +template<class T >
    + + + + + + + + +
    std::string simdjson::minify (x)
    +
    + +

    Minifies a JSON element or document, printing the smallest possible valid JSON.

    +

    dom::parser parser; element doc = parser.parse(" [ 1 , 2 , 3 ] "_padded); cout << minify(doc) << endl; // prints [1,2,3]

    + +

    Definition at line 203 of file serialization.h.

    + +
    +
    + +

    ◆ operator<<() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& simdjson::operator<< (std::ostream & out,
    const padded_strings 
    )
    +
    +inline
    +
    + +

    Send padded_string instance to an output stream.

    +
    Parameters
    + + + +
    outThe output stream.
    sThe padded_string instance.
    +
    +
    +
    Exceptions
    + + +
    ifthere is an error with the underlying output stream. simdjson itself will not throw.
    +
    +
    + +

    Definition at line 132 of file padded_string.h.

    + +
    +
    + +

    ◆ operator<<() [2/3]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& simdjson::operator<< (std::ostream & out,
    simdjson_result< padded_string > & s 
    )
    +
    +inlinenoexcept
    +
    + +

    Send padded_string instance to an output stream.

    +
    Parameters
    + + + +
    outThe output stream.
    sThe padded_string instance.
    +
    +
    +
    Exceptions
    + + +
    simdjson_errorif the result being printed has an error. If there is an error with the underlying output stream, that error will be propagated (simdjson_error will not be thrown).
    +
    +
    + +

    Definition at line 144 of file padded_string.h.

    + +
    +
    + +

    ◆ operator<<() [3/3]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& simdjson::operator<< (std::ostream & out,
    simdjson_result< padded_string_view > & s 
    )
    +
    +inlinenoexcept
    +
    + +

    Send padded_string instance to an output stream.

    +
    Parameters
    + + + +
    outThe output stream.
    sThe padded_string_view.
    +
    +
    +
    Exceptions
    + + +
    simdjson_errorif the result being printed has an error. If there is an error with the underlying output stream, that error will be propagated (simdjson_error will not be thrown).
    +
    +
    + +

    Definition at line 72 of file padded_string_view.h.

    + +
    +
    + +

    ◆ to_json_string() [1/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_result< std::string_view > simdjson::to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::arrayx)
    +
    +inlinenoexcept
    +
    + +

    Create a string-view instance out of an array instance.

    +

    The string-view instance contains JSON text that is suitable to be parsed as JSON again. It does not validate the content.

    + +

    Definition at line 69 of file serialization-inl.h.

    + +
    +
    + +

    ◆ to_json_string() [2/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_result< std::string_view > simdjson::to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::documentx)
    +
    +inlinenoexcept
    +
    + +

    Create a string-view instance out of a document instance.

    +

    The string-view instance contains JSON text that is suitable to be parsed as JSON again. It does not validate the content.

    + +

    Definition at line 16 of file serialization-inl.h.

    + +
    +
    + +

    ◆ to_json_string() [3/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_result< std::string_view > simdjson::to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::objectx)
    +
    +inlinenoexcept
    +
    + +

    Create a string-view instance out of an object instance.

    +

    The string-view instance contains JSON text that is suitable to be parsed as JSON again. It does not validate the content.

    + +

    Definition at line 62 of file serialization-inl.h.

    + +
    +
    + +

    ◆ to_json_string() [4/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_result< std::string_view > simdjson::to_json_string (SIMDJSON_IMPLEMENTATION::ondemand::valuex)
    +
    +inlinenoexcept
    +
    + +

    Create a string-view instance out of a value instance.

    +

    The string-view instance contains JSON text that is suitable to be parsed as JSON again. The value must not have been accessed previously. It does not validate the content.

    +

    If we somehow receive a value that has already been consumed, then the following code could be in trouble. E.g., we create an array as needed, but if an array was already created, then it could be bad.

    + +

    Definition at line 30 of file serialization-inl.h.

    + +
    +
    + +

    ◆ to_string()

    + +
    +
    +
    +template<class T >
    + + + + + + + + +
    std::string simdjson::to_string (x)
    +
    + +

    Converts JSON to a string.

    +

    dom::parser parser; element doc = parser.parse(" [ 1 , 2 , 3 ] "_padded); cout << to_string(doc) << endl; // prints [1,2,3]

    + +

    Definition at line 177 of file serialization.h.

    + +
    +
    + +

    ◆ validate_utf8() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    simdjson_warn_unused bool simdjson::validate_utf8 (const char * buf,
    size_t len 
    )
    +
    +noexcept
    +
    + +

    Validate the UTF-8 string.

    +
    Parameters
    + + + +
    bufthe string to validate.
    lenthe length of the string in bytes.
    +
    +
    +
    Returns
    true if the string is valid UTF-8.
    + +
    +
    + +

    ◆ validate_utf8() [2/3]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_inline simdjson_warn_unused bool simdjson::validate_utf8 (const std::string & s)
    +
    +noexcept
    +
    + +

    Validate the UTF-8 string.

    +
    Parameters
    + + +
    pthe string to validate.
    +
    +
    +
    Returns
    true if the string is valid UTF-8.
    + +

    Definition at line 37 of file implementation.h.

    + +
    +
    + +

    ◆ validate_utf8() [3/3]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_inline simdjson_warn_unused bool simdjson::validate_utf8 (const std::string_view sv)
    +
    +noexcept
    +
    + +

    Validate the UTF-8 string.

    +
    Parameters
    + + +
    svthe string_view to validate.
    +
    +
    +
    Returns
    true if the string is valid UTF-8.
    + +

    Definition at line 27 of file implementation.h.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ DEFAULT_MAX_DEPTH

    + +
    +
    + + + + + +
    + + + + +
    constexpr size_t simdjson::DEFAULT_MAX_DEPTH = 1024
    +
    +constexpr
    +
    + +

    By default, simdjson supports this many nested objects and arrays.

    +

    This is the default for parser::max_depth().

    + +

    Definition at line 52 of file common_defs.h.

    + +
    +
    + +

    ◆ SIMDJSON_PADDING

    + +
    +
    + + + + + +
    + + + + +
    constexpr size_t simdjson::SIMDJSON_PADDING = 64
    +
    +constexpr
    +
    + +

    The amount of padding needed in a buffer to parse JSON.

    +

    The input buf should be readable up to buf + SIMDJSON_PADDING this is a stopgap; there should be a better description of the main loop and its behavior that abstracts over this See https://github.com/simdjson/simdjson/issues/174

    + +

    Definition at line 45 of file common_defs.h.

    + +
    +
    +
    +
    + + + + diff --git a/namespacesimdjson.js b/namespacesimdjson.js new file mode 100644 index 000000000..9689b5815 --- /dev/null +++ b/namespacesimdjson.js @@ -0,0 +1,145 @@ +var namespacesimdjson = +[ + [ "dom", null, [ + [ "array", "classsimdjson_1_1dom_1_1array.html", "classsimdjson_1_1dom_1_1array" ], + [ "document", "classsimdjson_1_1dom_1_1document.html", "classsimdjson_1_1dom_1_1document" ], + [ "document_stream", "classsimdjson_1_1dom_1_1document__stream.html", "classsimdjson_1_1dom_1_1document__stream" ], + [ "element", "classsimdjson_1_1dom_1_1element.html", "classsimdjson_1_1dom_1_1element" ], + [ "object", "classsimdjson_1_1dom_1_1object.html", "classsimdjson_1_1dom_1_1object" ], + [ "key_value_pair", "classsimdjson_1_1dom_1_1key__value__pair.html", "classsimdjson_1_1dom_1_1key__value__pair" ], + [ "parser", "classsimdjson_1_1dom_1_1parser.html", "classsimdjson_1_1dom_1_1parser" ], + [ "element_type", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3a", [ + [ "ARRAY", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aacb4fb1757fb37c43cded35d3eb857c43", null ], + [ "OBJECT", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aa8eee8e217391199668cbac89472ace53", null ], + [ "INT64", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aa4e866b275c85fbb439f6484251cfb31c", null ], + [ "UINT64", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aa6de7acf711860176ba606e9aa2b85d5f", null ], + [ "DOUBLE", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aafd3e4ece78a7d422280d5ed379482229", null ], + [ "STRING", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aa63b588d5559f64f89a416e656880b949", null ], + [ "BOOL", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aaa97b2c144243b2b9d2c593ec268b62f5", null ], + [ "NULL_VALUE", "element_8h.html#a6e1dee3a823ecfee91086d3478bbab3aaa9f0aff2067f91437e50e4872b229e6a", null ] + ] ], + [ "element::get< std::string_view >", "element-inl_8h.html#ab61244b704aac73f80987733dae1ff26", null ], + [ "operator<<", "element-inl_8h.html#a2201b306b0efa80269faf05e1ba2879b", null ], + [ "operator<<", "dom_2serialization_8h.html#a43347827393e037c8027ddccd6ec994b", null ], + [ "operator<<", "dom_2serialization_8h.html#aa5dbd189409df6b2672310006c92463f", null ], + [ "operator<<", "dom_2serialization_8h.html#a9b9af1992350587324412b3ee5b3347a", null ], + [ "operator<<", "dom_2serialization_8h.html#a66cf0dca50cbaa17e59c1349ae6d7c1d", null ], + [ "operator<<", "dom_2serialization_8h.html#a50a1f5a28bb3b74e3c97b728c1ea8245", null ], + [ "operator<<", "dom_2serialization_8h.html#a3f7b959b3ebe04634ab0e22a48426786", null ] + ] ], + [ "SIMDJSON_IMPLEMENTATION", null, [ + [ "ondemand", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand" ], + [ "open_container", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container" ], + [ "dom_parser_implementation", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation" ], + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base" ] + ] ], + [ "simdjson_result< dom::array >", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4" ], + [ "simdjson_result< dom::document_stream >", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4" ], + [ "simdjson_result< dom::element >", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4" ], + [ "simdjson_result< dom::object >", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4" ], + [ "simdjson_error", "structsimdjson_1_1simdjson__error.html", "structsimdjson_1_1simdjson__error" ], + [ "simdjson_result", "structsimdjson_1_1simdjson__result.html", "structsimdjson_1_1simdjson__result" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4" ], + [ "simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4" ], + [ "implementation", "classsimdjson_1_1implementation.html", "classsimdjson_1_1implementation" ], + [ "padded_string", "structsimdjson_1_1padded__string.html", "structsimdjson_1_1padded__string" ], + [ "padded_string_view", "classsimdjson_1_1padded__string__view.html", "classsimdjson_1_1padded__string__view" ], + [ "ErrorValues", "namespacesimdjson.html#a63b494af834917af13120dcd57719bdb", null ], + [ "ParsedJson", "namespacesimdjson.html#a9245ff68919610377256bb9b21070e2a", null ], + [ "error_code", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9", [ + [ "SUCCESS", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa4ffc800804829a88c5b52ac3c4c6681", null ], + [ "CAPACITY", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a2d50048bbe409023df4e88f6ffe3bc71", null ], + [ "MEMALLOC", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa0e71422c8ae80ebaa11d8d74d64737f", null ], + [ "TAPE_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4005fbda56edc47e077e5cfd4e68cda9", null ], + [ "DEPTH_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0c6b4af181d3d5f40a09182522c88681", null ], + [ "STRING_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8ef9cfdd78dd92d2b304249917638d12", null ], + [ "T_ATOM_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab6e8bfc242f7bea38657eaf61400077f", null ], + [ "F_ATOM_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae726a74b8a99e4bf802f3078436a2394", null ], + [ "N_ATOM_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4e161f7bd0b3ca10f41a220a75de8cde", null ], + [ "NUMBER_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9adfcabbbd1ddb0843a0f320e062866ae8", null ], + [ "UTF8_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a398a5389d6e20c39e8880b0101b66f56", null ], + [ "UNINITIALIZED", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ac2aef8f0fc33187cc118c95fade925d2", null ], + [ "EMPTY", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7aed571b420dcdfe59742e0df97b415a", null ], + [ "UNESCAPED_CHARS", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aca57917fc85c421aab3f2dd451519fa5", null ], + [ "UNCLOSED_STRING", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0f9ce97e85e7607e0f4d3811b818a013", null ], + [ "UNSUPPORTED_ARCHITECTURE", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4d768ac107473bceb91f8a0d1a824bc2", null ], + [ "INCORRECT_TYPE", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a1de02af1d67e8350f612eee0dcf634b4", null ], + [ "NUMBER_OUT_OF_RANGE", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8c779dcc8fb73a4eb8891af3ef65eebb", null ], + [ "INDEX_OUT_OF_BOUNDS", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a80bcf6820da38abe1a2e9abeaa0f0c49", null ], + [ "NO_SUCH_FIELD", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4a2c71f8eca438b3f0553a2811bdab9a", null ], + [ "IO_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9acaec8ffce84b1acf9e6833b0f930878e", null ], + [ "INVALID_JSON_POINTER", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aeeaf930969566f76840224d64ee3a9a1", null ], + [ "INVALID_URI_FRAGMENT", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7b0467451dc0cecb41d3ea46c4a0005b", null ], + [ "UNEXPECTED_ERROR", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9abdd3905c91a152a01637a2946066db6b", null ], + [ "PARSER_IN_USE", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae9067bb5cb6283141b1c66466005ac0d", null ], + [ "OUT_OF_ORDER_ITERATION", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a351bcafefbbc80a6dadc1ea6c27a35e6", null ], + [ "INSUFFICIENT_PADDING", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aee3335b961f2d0f732e95b359c16a69a", null ], + [ "INCOMPLETE_ARRAY_OR_OBJECT", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab8a4df583110f900741d0b3f229f349a", null ], + [ "SCALAR_DOCUMENT_AS_VALUE", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a00d7c038f551d9527ba8897f3cee907d", null ], + [ "OUT_OF_BOUNDS", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a3f94172e04ae52a978ea62157140b0de", null ], + [ "TRAILING_CONTENT", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab70f5a6f0ac798d482e95a0fcc528676", null ], + [ "NUM_ERROR_CODES", "namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a69f1b9e7b9970fbb60416ebce2f894c3", null ] + ] ], + [ "stage1_mode", "namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811", [ + [ "regular", "namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811aaf37d08ae228a87dc6b265fd1019c97d", null ], + [ "streaming_partial", "namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811a929eb14f376ff68fc0ddd3d682e00d4c", null ], + [ "streaming_final", "namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811ac059cc555f4992b3eb481f03b70df100", null ] + ] ], + [ "build_parsed_json", "namespacesimdjson.html#a971a402db39c41031e4d905fe3614585", null ], + [ "build_parsed_json", "namespacesimdjson.html#ace2a91673313643def02966826e3920b", null ], + [ "build_parsed_json", "namespacesimdjson.html#aa17af188e477e08db53a67ab6ceeacf4", null ], + [ "build_parsed_json", "namespacesimdjson.html#a8acc50c61e4e3ea1aaa7aa8afd42c2b3", null ], + [ "build_parsed_json", "namespacesimdjson.html#a055b1230968101c76d7379da72cf3be1", null ], + [ "builtin_implementation", "namespacesimdjson.html#af63210cc51d5c99ad84958daf9812e63", null ], + [ "error_message", "namespacesimdjson.html#a65b00a7a7a9c8fafe9eb3b9b413a36fa", null ], + [ "error_message", "namespacesimdjson.html#a56e8e2fa6798b9e0da80bc51ae4a5f29", null ], + [ "get_active_implementation", "namespacesimdjson.html#abd8b8fd009878125822fca9a2624f6a6", null ], + [ "get_available_implementations", "namespacesimdjson.html#a7e4483a8ae684fdb5b2f1e7d4a8acc69", null ], + [ "get_corpus", "namespacesimdjson.html#ad394176adf22f9151f92d9cd541d0aee", null ], + [ "is_streaming", "namespacesimdjson.html#a6f306690d6d088d80b0cc2717040b2d0", null ], + [ "json_parse", "namespacesimdjson.html#a3dfa142328d096b51f85e13fe96fd25e", null ], + [ "json_parse", "namespacesimdjson.html#a630111c8201eafec9b4c44fe0456a475", null ], + [ "json_parse", "namespacesimdjson.html#a2ec7825eb81d38a4a101dd89031ad86c", null ], + [ "json_parse", "namespacesimdjson.html#a688157fcec0f7a073ebcbaa277df1647", null ], + [ "json_parse", "namespacesimdjson.html#a913aabdb29fe97e1b8246f1e210f1c40", null ], + [ "minify", "namespacesimdjson.html#a94bb4244756d764cf0ed7de180ae6520", null ], + [ "minify", "namespacesimdjson.html#a083a32b06fd32b6cd5e747abe3db6172", null ], + [ "minify", "namespacesimdjson.html#aeb4ef5cab43d52da3fdd99cb689aff2c", null ], + [ "operator<<", "namespacesimdjson.html#a537445bb236ae76d2b5559b1851b7108", null ], + [ "operator<<", "namespacesimdjson.html#a43514fe76c3095e45f30a050a9551d27", null ], + [ "operator<<", "namespacesimdjson.html#a39bbbf605c0068e4a65c2d8885727fc9", null ], + [ "operator<<", "namespacesimdjson.html#a61a74357c3e9313ad84c5f1243fdf581", null ], + [ "operator<<", "namespacesimdjson.html#a4447c2af37e8fa57daa0cedd948a810d", null ], + [ "to_json_string", "namespacesimdjson.html#a598dd79ec46726de8a6d409ba1bae034", null ], + [ "to_json_string", "namespacesimdjson.html#a2cda17221b852e5c398bad5bf350d270", null ], + [ "to_json_string", "namespacesimdjson.html#a44db29a59fd9f65464171bb1caeb0914", null ], + [ "to_json_string", "namespacesimdjson.html#afc529e3bcacb5b3c747b525fb443771f", null ], + [ "to_json_string", "namespacesimdjson.html#a4c998fcc6bf2bca2196b45a5c3e1967a", null ], + [ "to_json_string", "namespacesimdjson.html#a6a670913a79379b38ac49a0599b437e8", null ], + [ "to_json_string", "namespacesimdjson.html#a84c2adfbebe2cf2c11fb30f93aadbd40", null ], + [ "to_json_string", "namespacesimdjson.html#aae4b3d2ed9b9af63d22b2fc404fdd3b5", null ], + [ "to_json_string", "namespacesimdjson.html#a202587a9e2cdd1c3d88b8640f9bc3a18", null ], + [ "to_json_string", "namespacesimdjson.html#a92b75b21ee064a73722c18abc40d039b", null ], + [ "to_string", "namespacesimdjson.html#a32b88c95630f78ed1115379735bbbf34", null ], + [ "to_string", "namespacesimdjson.html#ade4516933f53705eacfaed65ed14962d", null ], + [ "trim", "namespacesimdjson.html#a4ee1eccef6fb8cdcdaf794e3e3d9ee66", null ], + [ "validate_utf8", "namespacesimdjson.html#a53546f3af0ed6840ffbeefcbefd305a1", null ], + [ "validate_utf8", "namespacesimdjson.html#a04edabca6d128b8b31592e1e2e331ae0", null ], + [ "validate_utf8", "namespacesimdjson.html#a28a847c4b31fc804bec2987b171dbd07", null ], + [ "DEFAULT_MAX_DEPTH", "namespacesimdjson.html#a6df2598eb1d4e1ea669c41831cc7325d", null ], + [ "SIMDJSON_MAXSIZE_BYTES", "namespacesimdjson.html#ac66973a7111dc4aa96ba7b3434344347", null ], + [ "SIMDJSON_PADDING", "namespacesimdjson.html#aecdd750132f0eb123a6d61113b4197bf", null ] +]; \ No newline at end of file diff --git a/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html b/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html new file mode 100644 index 000000000..689e082a5 --- /dev/null +++ b/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html @@ -0,0 +1,670 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand Namespace Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand Namespace Reference
    +
    +
    + +

    A fast, simple, DOM-like interface that parses JSON as you use it. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  array
     A forward-only JSON array. More...
     
    class  array_iterator
     A forward-only JSON array. More...
     
    class  document
     A JSON document. More...
     
    class  document_reference
     A document_reference is a thin wrapper around a document reference instance. More...
     
    class  document_stream
     A forward-only stream of documents. More...
     
    class  field
     A JSON field (key/value pair) in an object. More...
     
    struct  number
     A type representing a JSON number. More...
     
    class  object
     A forward-only JSON object field iterator. More...
     
    class  object_iterator
     
    class  parser
     A JSON fragment iterator. More...
     
    class  raw_json_string
     A string escaped per JSON rules, terminated with quote ("). More...
     
    class  value
     An ephemeral JSON value returned during iteration. More...
     
    + + + + +

    +Typedefs

    +using depth_t = int32_t
     Represents the depth of a JSON value (number of nested arrays/objects).
     
    + + + + + + + +

    +Enumerations

    enum class  number_type { floating_point_number =1 +, signed_integer +, unsigned_integer + }
     The type of a JSON number. More...
     
    enum class  json_type {
    +  array =1 +, object +, number +, string +,
    +  boolean +, null +
    + }
     The type of a JSON value. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    std::ostream & operator<< (std::ostream &out, json_type type) noexcept
     Write the JSON type to the output stream. More...
     
    +std::ostream & operator<< (std::ostream &out, number_type type) noexcept
     
    std::ostream & operator<< (std::ostream &out, simdjson_result< json_type > &type) noexcept(false)
     Send JSON type to an output stream. More...
     
    simdjson_unused simdjson_inline bool operator== (const raw_json_string &a, std::string_view c) noexcept
     Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user is responsible for providing a string with no unescaped quote. More...
     
    +simdjson_unused simdjson_inline bool operator== (std::string_view c, const raw_json_string &a) noexcept
     
    +simdjson_unused simdjson_inline bool operator!= (const raw_json_string &a, std::string_view c) noexcept
     
    +simdjson_unused simdjson_inline bool operator!= (std::string_view c, const raw_json_string &a) noexcept
     
    +simdjson_unused simdjson_inline std::ostream & operator<< (std::ostream &out, const raw_json_string &str) noexcept
     
    std::ostream & operator<< (std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x)
     Print JSON to an output stream. More...
     
    +std::ostream & operator<< (std::ostream &out, simdjson::simdjson_result< simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value > x)
     
    std::ostream & operator<< (std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value)
     Print JSON to an output stream. More...
     
    +std::ostream & operator<< (std::ostream &out, simdjson::simdjson_result< simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array > x)
     
    std::ostream & operator<< (std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document &value)
     Print JSON to an output stream. More...
     
    +std::ostream & operator<< (std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference &value)
     
    +std::ostream & operator<< (std::ostream &out, simdjson::simdjson_result< simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document > &&x)
     
    +std::ostream & operator<< (std::ostream &out, simdjson::simdjson_result< simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference > &&x)
     
    std::ostream & operator<< (std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value)
     Print JSON to an output stream. More...
     
    +std::ostream & operator<< (std::ostream &out, simdjson::simdjson_result< simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object > x)
     
    +

    Detailed Description

    +

    A fast, simple, DOM-like interface that parses JSON as you use it.

    +

    Designed for maximum speed and a lower memory profile.

    +

    Enumeration Type Documentation

    + +

    ◆ json_type

    + +
    +
    + + + + + +
    + + + + +
    enum simdjson::SIMDJSON_IMPLEMENTATION::ondemand::json_type
    +
    +strong
    +
    + +

    The type of a JSON value.

    + + + + + + + +
    Enumerator
    array 

    A JSON array ( [ 1, 2, 3 ... ] )

    +
    object 

    A JSON object ( { "a": 1, "b" 2, ... } )

    +
    number 

    A JSON number ( 1 or -2.3 or 4.5e6 ...)

    +
    string 

    A JSON string ( "a" or "hello world\n" ...)

    +
    boolean 

    A JSON boolean (true or false)

    +
    null 

    A JSON null (null)

    +
    + +

    Definition at line 7 of file json_type.h.

    + +
    +
    + +

    ◆ number_type

    + +
    +
    + + + + + +
    + + + + +
    enum simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number_type
    +
    +strong
    +
    + +

    The type of a JSON number.

    + + + +
    Enumerator
    signed_integer 

    a binary64 number

    +
    unsigned_integer 

    a signed integer that fits in a 64-bit word using two's complement

    +

    a positive integer larger or equal to 1<<63

    +
    + +

    Definition at line 11 of file numberparsing.h.

    + +
    +
    +

    Function Documentation

    + +

    ◆ operator<<() [1/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    json_type type 
    )
    +
    +inlinenoexcept
    +
    + +

    Write the JSON type to the output stream.

    +
    Parameters
    + + + +
    outThe output stream.
    typeThe json_type.
    +
    +
    + +

    Definition at line 5 of file json_type-inl.h.

    + +
    +
    + +

    ◆ operator<<() [2/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value 
    )
    +
    +inline
    +
    + +

    Print JSON to an output stream.

    +

    It does not validate the content.

    +
    Parameters
    + + + +
    outThe output stream.
    valueThe array.
    +
    +
    +
    Exceptions
    + + +
    ifthere is an error with the underlying output stream. simdjson itself will not throw.
    +
    +
    + +

    Definition at line 131 of file serialization-inl.h.

    + +
    +
    + +

    ◆ operator<<() [3/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::documentvalue 
    )
    +
    +inline
    +
    + +

    Print JSON to an output stream.

    +

    It does not validate the content.

    +
    Parameters
    + + + +
    outThe output stream.
    valueThe array.
    +
    +
    +
    Exceptions
    + + +
    ifthere is an error with the underlying output stream. simdjson itself will not throw.
    +
    +
    + +

    Definition at line 157 of file serialization-inl.h.

    + +
    +
    + +

    ◆ operator<<() [4/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value 
    )
    +
    +inline
    +
    + +

    Print JSON to an output stream.

    +

    It does not validate the content.

    +
    Parameters
    + + + +
    outThe output stream.
    valueThe object.
    +
    +
    +
    Exceptions
    + + +
    ifthere is an error with the underlying output stream. simdjson itself will not throw.
    +
    +
    + +

    Definition at line 196 of file serialization-inl.h.

    + +
    +
    + +

    ◆ operator<<() [5/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x 
    )
    +
    +inline
    +
    + +

    Print JSON to an output stream.

    +

    It does not validate the content.

    +
    Parameters
    + + + +
    outThe output stream.
    valueThe element.
    +
    +
    +
    Exceptions
    + + +
    ifthere is an error with the underlying output stream. simdjson itself will not throw.
    +
    +
    + +

    Definition at line 105 of file serialization-inl.h.

    + +
    +
    + +

    ◆ operator<<() [6/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<< (std::ostream & out,
    simdjson_result< json_type > & type 
    )
    +
    +inlinenoexcept
    +
    + +

    Send JSON type to an output stream.

    +
    Parameters
    + + + +
    outThe output stream.
    typeThe json_type.
    +
    +
    +
    Exceptions
    + + +
    simdjson_errorif the result being printed has an error. If there is an error with the underlying output stream, that error will be propagated (simdjson_error will not be thrown).
    +
    +
    + +

    Definition at line 28 of file json_type-inl.h.

    + +
    +
    + +

    ◆ operator==()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    simdjson_unused simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator== (const raw_json_stringa,
    std::string_view c 
    )
    +
    +noexcept
    +
    + +

    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user is responsible for providing a string with no unescaped quote.

    +

    Note that unescaped quotes cannot be present in valid JSON strings.

    + +

    Definition at line 129 of file raw_json_string-inl.h.

    + +
    +
    +
    +
    + + + + diff --git a/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.js b/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.js new file mode 100644 index 000000000..e33c3a1a0 --- /dev/null +++ b/namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.js @@ -0,0 +1,66 @@ +var namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand = +[ + [ "logger", null, [ + [ "log_end_value", "logger-inl_8h.html#ab8082fd58a3d7e115016a3fc52ee8936", null ], + [ "log_end_value", "logger-inl_8h.html#a6ca1434e6fe03e97dbc88360cc6ea5db", null ], + [ "log_error", "logger-inl_8h.html#a273e5f25cfdef1064a5225a47d85eb4f", null ], + [ "log_error", "logger-inl_8h.html#aa220611a86e2a544368f650b7f7315fb", null ], + [ "log_error", "logger-inl_8h.html#a66e3122a7ae01bfe5f81ecb1bf1814cc", null ], + [ "log_event", "logger-inl_8h.html#aee467b07dcf64f1282096914a1214053", null ], + [ "log_event", "logger-inl_8h.html#a4427c475cf7d49b372c768201b4d92cb", null ], + [ "log_headers", "logger-inl_8h.html#ab8b9add577d4aba4fc244fa5a5bcb219", null ], + [ "log_line", "logger-inl_8h.html#a7577e5a0dcaf23edf36d162959680a7c", null ], + [ "log_line", "logger-inl_8h.html#ad5975f8a32d2daea904160b7ac6fd9cc", null ], + [ "log_start_value", "logger-inl_8h.html#a92b499d3d191a02e913f90de4f641e2e", null ], + [ "log_start_value", "logger-inl_8h.html#aaa4c1a2ef6eb08bb02a8ea6e49d2a786", null ], + [ "log_start_value", "logger-inl_8h.html#a720bb462b108c1f9bcaa02cdcdfe6546", null ], + [ "log_value", "logger-inl_8h.html#abaf0200be757924fd5a89834e3b758f0", null ], + [ "log_value", "logger-inl_8h.html#a1b9952154ae0172530a16854ff005d92", null ], + [ "log_value", "logger-inl_8h.html#a12f4fdff59099b28730ba4288877437f", null ] + ] ], + [ "array", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array" ], + [ "array_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator" ], + [ "document", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document" ], + [ "document_reference", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference" ], + [ "document_stream", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream" ], + [ "field", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field" ], + [ "number", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number" ], + [ "object", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object" ], + [ "object_iterator", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator" ], + [ "parser", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser" ], + [ "raw_json_string", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string" ], + [ "value", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html", "classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value" ], + [ "depth_t", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#af941be7ff0cfaeb30d15d2fb52e76dd1", null ], + [ "token_position", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a14f218243d548a5e5410e6fadc3a53dd", null ], + [ "json_type", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330", [ + [ "array", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330af1f713c9e000f5d3f280adbd124df4f5", null ], + [ "object", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330aa8cfde6331bd59eb2ac96f8911c4b666", null ], + [ "number", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab1bc248a7ff2b2e95569f56de68615df", null ], + [ "string", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab45cffe084dd3d20d928bee85e7b0f21", null ], + [ "boolean", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a84e2c64f38f78ba3ea5c905ab5a2da27", null ], + [ "null", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a37a6259cc0c1dae299a7866489dff0bd", null ] + ] ], + [ "number_type", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3f", [ + [ "floating_point_number", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3fac5695c1a5026a1e5bec81b77096c1e9f", null ], + [ "signed_integer", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3faa14b6141855cd58c670ca6559c75c941", null ], + [ "unsigned_integer", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3fa7383104b83254a99f5991d0ac77a6666", null ] + ] ], + [ "operator!=", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a8dcb00bbb408a0f4ed45601b6de755a6", null ], + [ "operator!=", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a11766eb5c6314cae0fec704440e288dd", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a35ef40082a33ee8bb04e9e1b351a468c", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ab10943c6107de5337f376a6939f817af", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a3731c3543c213392c1deb282605174ea", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a24f9bbfe8b5a3017b4dd4b72dbccec4d", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a6f753d5e1bc479321c51b54392a96a65", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#aa3354f8230db6df962b47633591fa232", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ae52a82c2f754a47eb9dac12223b3311d", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac3a4f6af474f2b5f6d749f7452bb5477", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a521fa418355665952d548dc3ef682503", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#adab1063af10b90a1f45f87b307225995", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a997747305f387c28e46394c0955d2937", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a515a1f0d410cea5515d9aa9041be53e3", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a7cd33d336f2ede5302be79ada9e7bffe", null ], + [ "operator<<", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a386f80798c223c5fdbfc4dd9066a6b99", null ], + [ "operator==", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#aab771b17058b0c93bdd0a8679c2c4d84", null ], + [ "operator==", "namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a3c28892b66d1e93564113684711b30c7", null ] +]; \ No newline at end of file diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +simdjson: include/simdjson/internal/numberparsing_tables.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    numberparsing_tables.h
    +
    +
    +
    1 #ifndef SIMDJSON_INTERNAL_NUMBERPARSING_TABLES_H
    +
    2 #define SIMDJSON_INTERNAL_NUMBERPARSING_TABLES_H
    +
    3 
    +
    4 #include "simdjson/base.h"
    +
    5 
    +
    6 namespace simdjson {
    +
    7 namespace internal {
    +
    21 constexpr int smallest_power = -342;
    +
    22 constexpr int largest_power = 308;
    +
    23 
    +
    29 struct value128 {
    +
    30  uint64_t low;
    +
    31  uint64_t high;
    +
    32 };
    +
    33 
    +
    34 
    +
    35 // Precomputed powers of ten from 10^0 to 10^22. These
    +
    36 // can be represented exactly using the double type.
    +
    37 extern SIMDJSON_DLLIMPORTEXPORT const double power_of_ten[];
    +
    38 
    +
    39 
    +
    52 // The truncated powers of five from 5^-342 all the way to 5^308
    +
    53 // The mantissa is truncated to 128 bits, and
    +
    54 // never rounded up. Uses about 10KB.
    +
    55 extern SIMDJSON_DLLIMPORTEXPORT const uint64_t power_of_five_128[];
    +
    56 } // namespace internal
    +
    57 } // namespace simdjson
    +
    58 
    +
    59 #endif // SIMDJSON_INTERNAL_NUMBERPARSING_TABLES_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/object__iterator-inl_8h_source.html b/object__iterator-inl_8h_source.html new file mode 100644 index 000000000..5ea69e82b --- /dev/null +++ b/object__iterator-inl_8h_source.html @@ -0,0 +1,234 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/object_iterator-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    object_iterator-inl.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    5 //
    +
    6 // object_iterator
    +
    7 //
    +
    8 
    +
    9 simdjson_inline object_iterator::object_iterator(const value_iterator &_iter) noexcept
    +
    10  : iter{_iter}
    +
    11 {}
    +
    12 
    +
    13 simdjson_inline simdjson_result<field> object_iterator::operator*() noexcept {
    +
    14  error_code error = iter.error();
    +
    15  if (error) { iter.abandon(); return error; }
    +
    16  auto result = field::start(iter);
    +
    17  // TODO this is a safety rail ... users should exit loops as soon as they receive an error.
    +
    18  // Nonetheless, let's see if performance is OK with this if statement--the compiler may give it to us for free.
    +
    19  if (result.error()) { iter.abandon(); }
    +
    20  return result;
    +
    21 }
    +
    22 simdjson_inline bool object_iterator::operator==(const object_iterator &other) const noexcept {
    +
    23  return !(*this != other);
    +
    24 }
    +
    25 simdjson_inline bool object_iterator::operator!=(const object_iterator &) const noexcept {
    +
    26  return iter.is_open();
    +
    27 }
    +
    28 
    +
    29 SIMDJSON_PUSH_DISABLE_WARNINGS
    +
    30 SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
    +
    31 simdjson_inline object_iterator &object_iterator::operator++() noexcept {
    +
    32  // TODO this is a safety rail ... users should exit loops as soon as they receive an error.
    +
    33  // Nonetheless, let's see if performance is OK with this if statement--the compiler may give it to us for free.
    +
    34  if (!iter.is_open()) { return *this; } // Iterator will be released if there is an error
    +
    35 
    +
    36  simdjson_unused error_code error;
    +
    37  if ((error = iter.skip_child() )) { return *this; }
    +
    38 
    +
    39  simdjson_unused bool has_value;
    +
    40  if ((error = iter.has_next_field().get(has_value) )) { return *this; };
    +
    41  return *this;
    +
    42 }
    +
    43 SIMDJSON_POP_DISABLE_WARNINGS
    +
    44 
    +
    45 //
    +
    46 // ### Live States
    +
    47 //
    +
    48 // While iterating or looking up values, depth >= iter.depth. at_start may vary. Error is
    +
    49 // always SUCCESS:
    +
    50 //
    +
    51 // - Start: This is the state when the object is first found and the iterator is just past the {.
    +
    52 // In this state, at_start == true.
    +
    53 // - Next: After we hand a scalar value to the user, or an array/object which they then fully
    +
    54 // iterate over, the iterator is at the , or } before the next value. In this state,
    +
    55 // depth == iter.depth, at_start == false, and error == SUCCESS.
    +
    56 // - Unfinished Business: When we hand an array/object to the user which they do not fully
    +
    57 // iterate over, we need to finish that iteration by skipping child values until we reach the
    +
    58 // Next state. In this state, depth > iter.depth, at_start == false, and error == SUCCESS.
    +
    59 //
    +
    60 // ## Error States
    +
    61 //
    +
    62 // In error states, we will yield exactly one more value before stopping. iter.depth == depth
    +
    63 // and at_start is always false. We decrement after yielding the error, moving to the Finished
    +
    64 // state.
    +
    65 //
    +
    66 // - Chained Error: When the object iterator is part of an error chain--for example, in
    +
    67 // `for (auto tweet : doc["tweets"])`, where the tweet field may be missing or not be an
    +
    68 // object--we yield that error in the loop, exactly once. In this state, error != SUCCESS and
    +
    69 // iter.depth == depth, and at_start == false. We decrement depth when we yield the error.
    +
    70 // - Missing Comma Error: When the iterator ++ method discovers there is no comma between fields,
    +
    71 // we flag that as an error and treat it exactly the same as a Chained Error. In this state,
    +
    72 // error == TAPE_ERROR, iter.depth == depth, and at_start == false.
    +
    73 //
    +
    74 // Errors that occur while reading a field to give to the user (such as when the key is not a
    +
    75 // string or the field is missing a colon) are yielded immediately. Depth is then decremented,
    +
    76 // moving to the Finished state without transitioning through an Error state at all.
    +
    77 //
    +
    78 // ## Terminal State
    +
    79 //
    +
    80 // The terminal state has iter.depth < depth. at_start is always false.
    +
    81 //
    +
    82 // - Finished: When we have reached a }, we are finished. We signal this by decrementing depth.
    +
    83 // In this state, iter.depth < depth, at_start == false, and error == SUCCESS.
    +
    84 //
    +
    85 
    +
    86 } // namespace ondemand
    +
    87 } // namespace SIMDJSON_IMPLEMENTATION
    +
    88 } // namespace simdjson
    +
    89 
    +
    90 namespace simdjson {
    +
    91 
    +
    92 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::simdjson_result(
    +
    93  SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value
    +
    94 ) noexcept
    +
    95  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>(value))
    +
    96 {
    +
    97  first.iter.assert_is_valid();
    +
    98 }
    +
    99 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::simdjson_result(error_code error) noexcept
    +
    100  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>({}, error)
    +
    101 {
    +
    102 }
    +
    103 
    +
    104 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::operator*() noexcept {
    +
    105  if (error()) { return error(); }
    +
    106  return *first;
    +
    107 }
    +
    108 // If we're iterating and there is an error, return the error once.
    +
    109 simdjson_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::operator==(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &other) const noexcept {
    +
    110  if (!first.iter.is_valid()) { return !error(); }
    +
    111  return first == other.first;
    +
    112 }
    +
    113 // If we're iterating and there is an error, return the error once.
    +
    114 simdjson_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::operator!=(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &other) const noexcept {
    +
    115  if (!first.iter.is_valid()) { return error(); }
    +
    116  return first != other.first;
    +
    117 }
    +
    118 // Checks for ']' and ','
    +
    119 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator>::operator++() noexcept {
    +
    120  // Clear the error if there is one, so we don't yield it twice
    +
    121  if (error()) { second = SUCCESS; return *this; }
    +
    122  ++first;
    +
    123  return *this;
    +
    124 }
    +
    125 
    +
    126 } // namespace simdjson
    +
    simdjson_inline object_iterator() noexcept=default
    Create a new invalid object_iterator.
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    @ SUCCESS
    No error.
    Definition: error.h:18
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    +
    + + + + diff --git a/object__iterator_8h_source.html b/object__iterator_8h_source.html new file mode 100644 index 000000000..b2f5e2514 --- /dev/null +++ b/object__iterator_8h_source.html @@ -0,0 +1,177 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/object_iterator.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    object_iterator.h
    +
    +
    +
    1 #include "simdjson/error.h"
    +
    2 
    +
    3 namespace simdjson {
    +
    4 namespace SIMDJSON_IMPLEMENTATION {
    +
    5 namespace ondemand {
    +
    6 
    +
    7 class field;
    +
    8 
    + +
    10 public:
    +
    16  simdjson_inline object_iterator() noexcept = default;
    +
    17 
    +
    18  //
    +
    19  // Iterator interface
    +
    20  //
    +
    21 
    +
    22  // Reads key and value, yielding them to the user.
    +
    23  // MUST ONLY BE CALLED ONCE PER ITERATION.
    +
    24  simdjson_inline simdjson_result<field> operator*() noexcept;
    +
    25  // Assumes it's being compared with the end. true if depth < iter->depth.
    +
    26  simdjson_inline bool operator==(const object_iterator &) const noexcept;
    +
    27  // Assumes it's being compared with the end. true if depth >= iter->depth.
    +
    28  simdjson_inline bool operator!=(const object_iterator &) const noexcept;
    +
    29  // Checks for ']' and ','
    +
    30  simdjson_inline object_iterator &operator++() noexcept;
    +
    31 
    +
    32 private:
    +
    39  value_iterator iter{};
    +
    40 
    +
    41  simdjson_inline object_iterator(const value_iterator &iter) noexcept;
    +
    42  friend struct simdjson_result<object_iterator>;
    +
    43  friend class object;
    +
    44 };
    +
    45 
    +
    46 } // namespace ondemand
    +
    47 } // namespace SIMDJSON_IMPLEMENTATION
    +
    48 } // namespace simdjson
    +
    49 
    +
    50 namespace simdjson {
    +
    51 
    +
    52 template<>
    +
    53 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> {
    +
    54 public:
    + +
    56  simdjson_inline simdjson_result(error_code error) noexcept;
    +
    57  simdjson_inline simdjson_result() noexcept = default;
    +
    58 
    +
    59  //
    +
    60  // Iterator interface
    +
    61  //
    +
    62 
    +
    63  // Reads key and value, yielding them to the user.
    +
    64  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field> operator*() noexcept; // MUST ONLY BE CALLED ONCE PER ITERATION.
    +
    65  // Assumes it's being compared with the end. true if depth < iter->depth.
    +
    66  simdjson_inline bool operator==(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &) const noexcept;
    +
    67  // Assumes it's being compared with the end. true if depth >= iter->depth.
    +
    68  simdjson_inline bool operator!=(const simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &) const noexcept;
    +
    69  // Checks for ']' and ','
    +
    70  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> &operator++() noexcept;
    +
    71 };
    +
    72 
    +
    73 } // namespace simdjson
    +
    A JSON field (key/value pair) in an object.
    Definition: field.h:14
    + +
    simdjson_inline object_iterator() noexcept=default
    Create a new invalid object_iterator.
    +
    A forward-only JSON object field iterator.
    Definition: object.h:10
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    + + + +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    simdjson_inline T & value() &noexcept(false)
    Get the result value.
    +
    +
    + + + + diff --git a/ondemand-inl_8h_source.html b/ondemand-inl_8h_source.html new file mode 100644 index 000000000..0f9e46d42 --- /dev/null +++ b/ondemand-inl_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ondemand-inl.h
    +
    +
    +
    1 #include "simdjson/generic/ondemand/json_type-inl.h"
    +
    2 #include "simdjson/generic/ondemand/logger-inl.h"
    +
    3 #include "simdjson/generic/ondemand/raw_json_string-inl.h"
    +
    4 #include "simdjson/generic/ondemand/token_iterator-inl.h"
    +
    5 #include "simdjson/generic/ondemand/json_iterator-inl.h"
    +
    6 #include "simdjson/generic/ondemand/value_iterator-inl.h"
    +
    7 #include "simdjson/generic/ondemand/array_iterator-inl.h"
    +
    8 #include "simdjson/generic/ondemand/object_iterator-inl.h"
    +
    9 #include "simdjson/generic/ondemand/array-inl.h"
    +
    10 #include "simdjson/generic/ondemand/document-inl.h"
    +
    11 #include "simdjson/generic/ondemand/value-inl.h"
    +
    12 #include "simdjson/generic/ondemand/field-inl.h"
    +
    13 #include "simdjson/generic/ondemand/object-inl.h"
    +
    14 #include "simdjson/generic/ondemand/parser-inl.h"
    +
    15 #include "simdjson/generic/ondemand/document_stream-inl.h"
    +
    16 #include "simdjson/generic/ondemand/serialization-inl.h"
    +
    +
    + + + + diff --git a/ondemand_8h_source.html b/ondemand_8h_source.html new file mode 100644 index 000000000..65a984ab5 --- /dev/null +++ b/ondemand_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ondemand.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    8 namespace ondemand {
    +
    9 
    +
    11 using depth_t = int32_t;
    +
    12 
    +
    13 } // namespace ondemand
    +
    14 } // namespace SIMDJSON_IMPLEMENTATION
    +
    15 } // namespace simdjson
    +
    16 
    +
    17 #include "simdjson/generic/ondemand/json_type.h"
    +
    18 #include "simdjson/generic/ondemand/token_position.h"
    +
    19 #include "simdjson/generic/ondemand/logger.h"
    +
    20 #include "simdjson/generic/ondemand/raw_json_string.h"
    +
    21 #include "simdjson/generic/ondemand/token_iterator.h"
    +
    22 #include "simdjson/generic/ondemand/json_iterator.h"
    +
    23 #include "simdjson/generic/ondemand/value_iterator.h"
    +
    24 #include "simdjson/generic/ondemand/array_iterator.h"
    +
    25 #include "simdjson/generic/ondemand/object_iterator.h"
    +
    26 #include "simdjson/generic/ondemand/array.h"
    +
    27 #include "simdjson/generic/ondemand/document.h"
    +
    28 #include "simdjson/generic/ondemand/value.h"
    +
    29 #include "simdjson/generic/ondemand/field.h"
    +
    30 #include "simdjson/generic/ondemand/object.h"
    +
    31 #include "simdjson/generic/ondemand/parser.h"
    +
    32 #include "simdjson/generic/ondemand/document_stream.h"
    +
    33 #include "simdjson/generic/ondemand/serialization.h"
    +
    int32_t depth_t
    Represents the depth of a JSON value (number of nested arrays/objects).
    Definition: ondemand.h:11
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/open.png b/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +simdjson: include/simdjson/padded_string-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    padded_string-inl.h
    +
    +
    +
    1 #ifndef SIMDJSON_INLINE_PADDED_STRING_H
    +
    2 #define SIMDJSON_INLINE_PADDED_STRING_H
    +
    3 
    +
    4 #include "simdjson/portability.h"
    +
    5 #include "simdjson/common_defs.h" // for SIMDJSON_PADDING
    +
    6 
    +
    7 #include <climits>
    +
    8 #include <cstring>
    +
    9 #include <memory>
    +
    10 #include <string>
    +
    11 
    +
    12 namespace simdjson {
    +
    13 namespace internal {
    +
    14 
    +
    15 // The allocate_padded_buffer function is a low-level function to allocate memory
    +
    16 // with padding so we can read past the "length" bytes safely. It is used by
    +
    17 // the padded_string class automatically. It returns nullptr in case
    +
    18 // of error: the caller should check for a null pointer.
    +
    19 // The length parameter is the maximum size in bytes of the string.
    +
    20 // The caller is responsible to free the memory (e.g., delete[] (...)).
    +
    21 inline char *allocate_padded_buffer(size_t length) noexcept {
    +
    22  const size_t totalpaddedlength = length + SIMDJSON_PADDING;
    +
    23  if(totalpaddedlength<length) {
    +
    24  // overflow
    +
    25  return nullptr;
    +
    26  }
    +
    27 #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
    +
    28  // avoid getting out of memory
    +
    29  if (totalpaddedlength>(1UL<<20)) {
    +
    30  return nullptr;
    +
    31  }
    +
    32 #endif
    +
    33 
    +
    34  char *padded_buffer = new (std::nothrow) char[totalpaddedlength];
    +
    35  if (padded_buffer == nullptr) {
    +
    36  return nullptr;
    +
    37  }
    +
    38  // We write zeroes in the padded region to avoid having uninitized
    +
    39  // garbage. If nothing else, garbage getting read might trigger a
    +
    40  // warning in a memory checking.
    +
    41  std::memset(padded_buffer + length, 0, totalpaddedlength - length);
    +
    42  return padded_buffer;
    +
    43 } // allocate_padded_buffer()
    +
    44 
    +
    45 } // namespace internal
    +
    46 
    +
    47 
    +
    48 inline padded_string::padded_string() noexcept = default;
    +
    49 inline padded_string::padded_string(size_t length) noexcept
    +
    50  : viable_size(length), data_ptr(internal::allocate_padded_buffer(length)) {
    +
    51 }
    +
    52 inline padded_string::padded_string(const char *data, size_t length) noexcept
    +
    53  : viable_size(length), data_ptr(internal::allocate_padded_buffer(length)) {
    +
    54  if ((data != nullptr) && (data_ptr != nullptr)) {
    +
    55  std::memcpy(data_ptr, data, length);
    +
    56  }
    +
    57 }
    +
    58 // note: do not pass std::string arguments by value
    +
    59 inline padded_string::padded_string(const std::string & str_ ) noexcept
    +
    60  : viable_size(str_.size()), data_ptr(internal::allocate_padded_buffer(str_.size())) {
    +
    61  if (data_ptr != nullptr) {
    +
    62  std::memcpy(data_ptr, str_.data(), str_.size());
    +
    63  }
    +
    64 }
    +
    65 // note: do pass std::string_view arguments by value
    +
    66 inline padded_string::padded_string(std::string_view sv_) noexcept
    +
    67  : viable_size(sv_.size()), data_ptr(internal::allocate_padded_buffer(sv_.size())) {
    +
    68  if(simdjson_unlikely(!data_ptr)) {
    +
    69  //allocation failed or zero size
    +
    70  viable_size=0;
    +
    71  return;
    +
    72  }
    +
    73  if (sv_.size()) {
    +
    74  std::memcpy(data_ptr, sv_.data(), sv_.size());
    +
    75  }
    +
    76 }
    + +
    78  : viable_size(o.viable_size), data_ptr(o.data_ptr) {
    +
    79  o.data_ptr = nullptr; // we take ownership
    +
    80 }
    +
    81 
    + +
    83  delete[] data_ptr;
    +
    84  data_ptr = o.data_ptr;
    +
    85  viable_size = o.viable_size;
    +
    86  o.data_ptr = nullptr; // we take ownership
    +
    87  o.viable_size = 0;
    +
    88  return *this;
    +
    89 }
    +
    90 
    +
    91 inline void padded_string::swap(padded_string &o) noexcept {
    +
    92  size_t tmp_viable_size = viable_size;
    +
    93  char *tmp_data_ptr = data_ptr;
    +
    94  viable_size = o.viable_size;
    +
    95  data_ptr = o.data_ptr;
    +
    96  o.data_ptr = tmp_data_ptr;
    +
    97  o.viable_size = tmp_viable_size;
    +
    98 }
    +
    99 
    +
    100 inline padded_string::~padded_string() noexcept {
    +
    101  delete[] data_ptr;
    +
    102 }
    +
    103 
    +
    104 inline size_t padded_string::size() const noexcept { return viable_size; }
    +
    105 
    +
    106 inline size_t padded_string::length() const noexcept { return viable_size; }
    +
    107 
    +
    108 inline const char *padded_string::data() const noexcept { return data_ptr; }
    +
    109 
    +
    110 inline char *padded_string::data() noexcept { return data_ptr; }
    +
    111 
    +
    112 inline padded_string::operator std::string_view() const { return std::string_view(data(), length()); }
    +
    113 
    +
    114 inline padded_string::operator padded_string_view() const noexcept {
    +
    115  return padded_string_view(data(), length(), length() + SIMDJSON_PADDING);
    +
    116 }
    +
    117 
    +
    118 inline simdjson_result<padded_string> padded_string::load(std::string_view filename) noexcept {
    +
    119  // Open the file
    +
    120  SIMDJSON_PUSH_DISABLE_WARNINGS
    +
    121  SIMDJSON_DISABLE_DEPRECATED_WARNING // Disable CRT_SECURE warning on MSVC: manually verified this is safe
    +
    122  std::FILE *fp = std::fopen(filename.data(), "rb");
    +
    123  SIMDJSON_POP_DISABLE_WARNINGS
    +
    124 
    +
    125  if (fp == nullptr) {
    +
    126  return IO_ERROR;
    +
    127  }
    +
    128 
    +
    129  // Get the file size
    +
    130  int ret;
    +
    131 #if SIMDJSON_VISUAL_STUDIO && !SIMDJSON_IS_32BITS
    +
    132  ret = _fseeki64(fp, 0, SEEK_END);
    +
    133 #else
    +
    134  ret = std::fseek(fp, 0, SEEK_END);
    +
    135 #endif // _WIN64
    +
    136  if(ret < 0) {
    +
    137  std::fclose(fp);
    +
    138  return IO_ERROR;
    +
    139  }
    +
    140 #if SIMDJSON_VISUAL_STUDIO && !SIMDJSON_IS_32BITS
    +
    141  __int64 llen = _ftelli64(fp);
    +
    142  if(llen == -1L) {
    +
    143  std::fclose(fp);
    +
    144  return IO_ERROR;
    +
    145  }
    +
    146 #else
    +
    147  long llen = std::ftell(fp);
    +
    148  if((llen < 0) || (llen == LONG_MAX)) {
    +
    149  std::fclose(fp);
    +
    150  return IO_ERROR;
    +
    151  }
    +
    152 #endif
    +
    153 
    +
    154  // Allocate the padded_string
    +
    155  size_t len = static_cast<size_t>(llen);
    +
    156  padded_string s(len);
    +
    157  if (s.data() == nullptr) {
    +
    158  std::fclose(fp);
    +
    159  return MEMALLOC;
    +
    160  }
    +
    161 
    +
    162  // Read the padded_string
    +
    163  std::rewind(fp);
    +
    164  size_t bytes_read = std::fread(s.data(), 1, len, fp);
    +
    165  if (std::fclose(fp) != 0 || bytes_read != len) {
    +
    166  return IO_ERROR;
    +
    167  }
    +
    168 
    +
    169  return s;
    +
    170 }
    +
    171 
    +
    172 } // namespace simdjson
    +
    173 
    +
    174 #endif // SIMDJSON_INLINE_PADDED_STRING_H
    +
    User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
    +
    We want to support argument-dependent lookup (ADL).
    +
    @ MEMALLOC
    Error allocating memory, most likely out of memory.
    Definition: error.h:20
    +
    @ IO_ERROR
    Error reading a file.
    Definition: error.h:38
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    String with extra allocation for ease of use with parser::parse()
    Definition: padded_string.h:21
    +
    size_t size() const noexcept
    The length of the string.
    +
    size_t length() const noexcept
    The length of the string.
    +
    padded_string() noexcept
    Create a new, empty padded string.
    +
    padded_string & operator=(padded_string &&o) noexcept
    Move one padded string into another.
    +
    const char * data() const noexcept
    The string data.
    +
    static simdjson_result< padded_string > load(std::string_view path) noexcept
    Load this padded string from a file.
    +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    +
    + + + + diff --git a/padded__string_8h_source.html b/padded__string_8h_source.html new file mode 100644 index 000000000..8f416ea78 --- /dev/null +++ b/padded__string_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +simdjson: include/simdjson/padded_string.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    padded_string.h
    +
    +
    +
    1 #ifndef SIMDJSON_PADDED_STRING_H
    +
    2 #define SIMDJSON_PADDED_STRING_H
    +
    3 
    +
    4 #include "simdjson/portability.h"
    +
    5 #include "simdjson/common_defs.h" // for SIMDJSON_PADDING
    +
    6 #include "simdjson/error.h"
    +
    7 #include <cstring>
    +
    8 #include <memory>
    +
    9 #include <string>
    +
    10 #include <ostream>
    +
    11 
    +
    12 namespace simdjson {
    +
    13 
    +
    14 class padded_string_view;
    +
    15 
    +
    21 struct padded_string final {
    +
    22 
    +
    26  explicit inline padded_string() noexcept;
    +
    32  explicit inline padded_string(size_t length) noexcept;
    +
    39  explicit inline padded_string(const char *data, size_t length) noexcept;
    +
    45  inline padded_string(const std::string & str_ ) noexcept;
    +
    51  inline padded_string(std::string_view sv_) noexcept;
    +
    59  inline padded_string(padded_string &&o) noexcept;
    +
    67  inline padded_string &operator=(padded_string &&o) noexcept;
    +
    68  inline void swap(padded_string &o) noexcept;
    +
    69  ~padded_string() noexcept;
    +
    70 
    +
    76  size_t size() const noexcept;
    +
    77 
    +
    83  size_t length() const noexcept;
    +
    84 
    +
    88  const char *data() const noexcept;
    +
    89  const uint8_t *u8data() const noexcept { return static_cast<const uint8_t*>(static_cast<const void*>(data_ptr));}
    +
    90 
    +
    94  char *data() noexcept;
    +
    95 
    +
    99  operator std::string_view() const;
    +
    100 
    +
    104  operator padded_string_view() const noexcept;
    +
    105 
    +
    114  inline static simdjson_result<padded_string> load(std::string_view path) noexcept;
    +
    115 
    +
    116 private:
    +
    117  padded_string &operator=(const padded_string &o) = delete;
    +
    118  padded_string(const padded_string &o) = delete;
    +
    119 
    +
    120  size_t viable_size{0};
    +
    121  char *data_ptr{nullptr};
    +
    122 
    +
    123 }; // padded_string
    +
    124 
    +
    132 inline std::ostream& operator<<(std::ostream& out, const padded_string& s) { return out << s.data(); }
    +
    133 
    +
    134 #if SIMDJSON_EXCEPTIONS
    +
    144 inline std::ostream& operator<<(std::ostream& out, simdjson_result<padded_string> &s) noexcept(false) { return out << s.value(); }
    +
    145 #endif
    +
    146 
    +
    147 } // namespace simdjson
    +
    148 
    +
    149 // This is deliberately outside of simdjson so that people get it without having to use the namespace
    +
    150 inline simdjson::padded_string operator "" _padded(const char *str, size_t len) {
    +
    151  return simdjson::padded_string(str, len);
    +
    152 }
    +
    153 
    +
    154 namespace simdjson {
    +
    155 namespace internal {
    +
    156 
    +
    157 // The allocate_padded_buffer function is a low-level function to allocate memory
    +
    158 // with padding so we can read past the "length" bytes safely. It is used by
    +
    159 // the padded_string class automatically. It returns nullptr in case
    +
    160 // of error: the caller should check for a null pointer.
    +
    161 // The length parameter is the maximum size in bytes of the string.
    +
    162 // The caller is responsible to free the memory (e.g., delete[] (...)).
    +
    163 inline char *allocate_padded_buffer(size_t length) noexcept;
    +
    164 
    +
    165 } // namespace internal
    +
    166 } // namespace simdjson
    +
    167 
    +
    168 #endif // SIMDJSON_PADDED_STRING_H
    +
    User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
    +
    We want to support argument-dependent lookup (ADL).
    +
    std::ostream & operator<<(std::ostream &out, error_code error) noexcept
    Write the error message to the output stream.
    Definition: error-inl.h:36
    +
    String with extra allocation for ease of use with parser::parse()
    Definition: padded_string.h:21
    +
    size_t size() const noexcept
    The length of the string.
    +
    size_t length() const noexcept
    The length of the string.
    +
    padded_string() noexcept
    Create a new, empty padded string.
    +
    const char * data() const noexcept
    The string data.
    +
    static simdjson_result< padded_string > load(std::string_view path) noexcept
    Load this padded string from a file.
    +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    +
    + + + + diff --git a/padded__string__view-inl_8h_source.html b/padded__string__view-inl_8h_source.html new file mode 100644 index 000000000..9042f2fd4 --- /dev/null +++ b/padded__string__view-inl_8h_source.html @@ -0,0 +1,148 @@ + + + + + + + +simdjson: include/simdjson/padded_string_view-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    padded_string_view-inl.h
    +
    +
    +
    1 #ifndef SIMDJSON_PADDED_STRING_VIEW_INL_H
    +
    2 #define SIMDJSON_PADDED_STRING_VIEW_INL_H
    +
    3 
    +
    4 #include "simdjson/portability.h"
    +
    5 #include "simdjson/common_defs.h" // for SIMDJSON_PADDING
    +
    6 
    +
    7 #include <climits>
    +
    8 #include <cstring>
    +
    9 #include <memory>
    +
    10 #include <string>
    +
    11 
    +
    12 namespace simdjson {
    +
    13 
    +
    14 inline padded_string_view::padded_string_view(const char* s, size_t len, size_t capacity) noexcept
    +
    15  : std::string_view(s, len), _capacity(capacity)
    +
    16 {
    +
    17 }
    +
    18 
    +
    19 inline padded_string_view::padded_string_view(const uint8_t* s, size_t len, size_t capacity) noexcept
    +
    20  : padded_string_view(reinterpret_cast<const char*>(s), len, capacity)
    +
    21 {
    +
    22 }
    +
    23 
    +
    24 inline padded_string_view::padded_string_view(const std::string &s) noexcept
    +
    25  : std::string_view(s), _capacity(s.capacity())
    +
    26 {
    +
    27 }
    +
    28 
    +
    29 inline padded_string_view::padded_string_view(std::string_view s, size_t capacity) noexcept
    +
    30  : std::string_view(s), _capacity(capacity)
    +
    31 {
    +
    32 }
    +
    33 
    +
    34 inline size_t padded_string_view::capacity() const noexcept { return _capacity; }
    +
    35 
    +
    36 inline size_t padded_string_view::padding() const noexcept { return capacity() - length(); }
    +
    37 
    +
    38 } // namespace simdjson
    +
    39 
    +
    40 #endif // SIMDJSON_PADDED_STRING_VIEW_INL_H
    +
    User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
    +
    size_t padding() const noexcept
    The amount of padding on the string (capacity() - length())
    +
    size_t capacity() const noexcept
    The number of allocated bytes.
    +
    padded_string_view() noexcept=default
    Create an empty padded_string_view.
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/padded__string__view_8h_source.html b/padded__string__view_8h_source.html new file mode 100644 index 000000000..ca14bcfe5 --- /dev/null +++ b/padded__string__view_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: include/simdjson/padded_string_view.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    padded_string_view.h
    +
    +
    +
    1 #ifndef SIMDJSON_PADDED_STRING_VIEW_H
    +
    2 #define SIMDJSON_PADDED_STRING_VIEW_H
    +
    3 
    +
    4 #include "simdjson/portability.h"
    +
    5 #include "simdjson/common_defs.h" // for SIMDJSON_PADDING
    +
    6 #include "simdjson/error.h"
    +
    7 
    +
    8 #include <cstring>
    +
    9 #include <memory>
    +
    10 #include <string>
    +
    11 #include <ostream>
    +
    12 
    +
    13 namespace simdjson {
    +
    14 
    +
    18 class padded_string_view : public std::string_view {
    +
    19 private:
    +
    20  size_t _capacity;
    +
    21 
    +
    22 public:
    +
    24  inline padded_string_view() noexcept = default;
    +
    25 
    +
    33  explicit inline padded_string_view(const char* s, size_t len, size_t capacity) noexcept;
    +
    35  explicit inline padded_string_view(const uint8_t* s, size_t len, size_t capacity) noexcept;
    +
    36 
    +
    44  explicit inline padded_string_view(const std::string &s) noexcept;
    +
    45 
    +
    52  explicit inline padded_string_view(std::string_view s, size_t capacity) noexcept;
    +
    53 
    +
    55  inline size_t capacity() const noexcept;
    +
    56 
    +
    58  inline size_t padding() const noexcept;
    +
    59 
    +
    60 }; // padded_string_view
    +
    61 
    +
    62 #if SIMDJSON_EXCEPTIONS
    +
    72 inline std::ostream& operator<<(std::ostream& out, simdjson_result<padded_string_view> &s) noexcept(false) { return out << s.value(); }
    +
    73 #endif
    +
    74 
    +
    75 } // namespace simdjson
    +
    76 
    +
    77 #endif // SIMDJSON_PADDED_STRING_VIEW_H
    +
    User-provided string that promises it has extra padded bytes at the end for use with parser::parse().
    +
    size_t padding() const noexcept
    The amount of padding on the string (capacity() - length())
    +
    size_t capacity() const noexcept
    The number of allocated bytes.
    +
    padded_string_view() noexcept=default
    Create an empty padded_string_view.
    +
    We want to support argument-dependent lookup (ADL).
    +
    std::ostream & operator<<(std::ostream &out, error_code error) noexcept
    Write the error message to the output stream.
    Definition: error-inl.h:36
    +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    +
    + + + + diff --git a/pages.html b/pages.html new file mode 100644 index 000000000..2ebc69a4d --- /dev/null +++ b/pages.html @@ -0,0 +1,115 @@ + + + + + + + +simdjson: Related Pages + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    + +
    + + + + diff --git a/parsedjson_8h_source.html b/parsedjson_8h_source.html new file mode 100644 index 000000000..2e7ff7e0a --- /dev/null +++ b/parsedjson_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +simdjson: include/simdjson/dom/parsedjson.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    parsedjson.h
    +
    +
    +
    1 // TODO Remove this -- deprecated API and files
    +
    2 
    +
    3 #ifndef SIMDJSON_DOM_PARSEDJSON_H
    +
    4 #define SIMDJSON_DOM_PARSEDJSON_H
    +
    5 
    +
    6 #include "simdjson/dom/document.h"
    +
    7 
    +
    8 namespace simdjson {
    +
    9 
    +
    13 using ParsedJson [[deprecated("Use dom::parser instead")]] = dom::parser;
    +
    14 
    +
    15 } // namespace simdjson
    +
    16 
    +
    17 #endif // SIMDJSON_DOM_PARSEDJSON_H
    +
    A persistent document parser.
    Definition: parser.h:58
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/parsedjson__iterator-inl_8h_source.html b/parsedjson__iterator-inl_8h_source.html new file mode 100644 index 000000000..68d222a6c --- /dev/null +++ b/parsedjson__iterator-inl_8h_source.html @@ -0,0 +1,593 @@ + + + + + + + +simdjson: include/simdjson/dom/parsedjson_iterator-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    parsedjson_iterator-inl.h
    +
    +
    +
    1 #ifndef SIMDJSON_INLINE_PARSEDJSON_ITERATOR_H
    +
    2 #define SIMDJSON_INLINE_PARSEDJSON_ITERATOR_H
    +
    3 
    +
    4 #include "simdjson/dom/parsedjson_iterator.h"
    +
    5 #include "simdjson/portability.h"
    +
    6 #include <cstring>
    +
    7 
    +
    8 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
    +
    9 
    +
    10 namespace simdjson {
    +
    11 
    +
    12 // VS2017 reports deprecated warnings when you define a deprecated class's methods.
    +
    13 SIMDJSON_PUSH_DISABLE_WARNINGS
    +
    14 SIMDJSON_DISABLE_DEPRECATED_WARNING
    +
    15 
    +
    16 // Because of template weirdness, the actual class definition is inline in the document class
    +
    17 simdjson_warn_unused bool dom::parser::Iterator::is_ok() const {
    +
    18  return location < tape_length;
    +
    19 }
    +
    20 
    +
    21 // useful for debugging purposes
    +
    22 size_t dom::parser::Iterator::get_tape_location() const {
    +
    23  return location;
    +
    24 }
    +
    25 
    +
    26 // useful for debugging purposes
    +
    27 size_t dom::parser::Iterator::get_tape_length() const {
    +
    28  return tape_length;
    +
    29 }
    +
    30 
    +
    31 // returns the current depth (start at 1 with 0 reserved for the fictitious root
    +
    32 // node)
    +
    33 size_t dom::parser::Iterator::get_depth() const {
    +
    34  return depth;
    +
    35 }
    +
    36 
    +
    37 // A scope is a series of nodes at the same depth, typically it is either an
    +
    38 // object ({) or an array ([). The root node has type 'r'.
    +
    39 uint8_t dom::parser::Iterator::get_scope_type() const {
    +
    40  return depth_index[depth].scope_type;
    +
    41 }
    +
    42 
    +
    43 bool dom::parser::Iterator::move_forward() {
    +
    44  if (location + 1 >= tape_length) {
    +
    45  return false; // we are at the end!
    +
    46  }
    +
    47 
    +
    48  if ((current_type == '[') || (current_type == '{')) {
    +
    49  // We are entering a new scope
    +
    50  depth++;
    +
    51  assert(depth < max_depth);
    +
    52  depth_index[depth].start_of_scope = location;
    +
    53  depth_index[depth].scope_type = current_type;
    +
    54  } else if ((current_type == ']') || (current_type == '}')) {
    +
    55  // Leaving a scope.
    +
    56  depth--;
    +
    57  } else if (is_number()) {
    +
    58  // these types use 2 locations on the tape, not just one.
    +
    59  location += 1;
    +
    60  }
    +
    61 
    +
    62  location += 1;
    +
    63  current_val = doc.tape[location];
    +
    64  current_type = uint8_t(current_val >> 56);
    +
    65  return true;
    +
    66 }
    +
    67 
    +
    68 void dom::parser::Iterator::move_to_value() {
    +
    69  // assume that we are on a key, so move by 1.
    +
    70  location += 1;
    +
    71  current_val = doc.tape[location];
    +
    72  current_type = uint8_t(current_val >> 56);
    +
    73 }
    +
    74 
    +
    75 bool dom::parser::Iterator::move_to_key(const char *key) {
    +
    76  if (down()) {
    +
    77  do {
    +
    78  const bool right_key = (strcmp(get_string(), key) == 0);
    +
    79  move_to_value();
    +
    80  if (right_key) {
    +
    81  return true;
    +
    82  }
    +
    83  } while (next());
    +
    84  up();
    +
    85  }
    +
    86  return false;
    +
    87 }
    +
    88 
    +
    89 bool dom::parser::Iterator::move_to_key_insensitive(
    +
    90  const char *key) {
    +
    91  if (down()) {
    +
    92  do {
    +
    93  const bool right_key = (simdjson_strcasecmp(get_string(), key) == 0);
    +
    94  move_to_value();
    +
    95  if (right_key) {
    +
    96  return true;
    +
    97  }
    +
    98  } while (next());
    +
    99  up();
    +
    100  }
    +
    101  return false;
    +
    102 }
    +
    103 
    +
    104 bool dom::parser::Iterator::move_to_key(const char *key,
    +
    105  uint32_t length) {
    +
    106  if (down()) {
    +
    107  do {
    +
    108  bool right_key = ((get_string_length() == length) &&
    +
    109  (memcmp(get_string(), key, length) == 0));
    +
    110  move_to_value();
    +
    111  if (right_key) {
    +
    112  return true;
    +
    113  }
    +
    114  } while (next());
    +
    115  up();
    +
    116  }
    +
    117  return false;
    +
    118 }
    +
    119 
    +
    120 bool dom::parser::Iterator::move_to_index(uint32_t index) {
    +
    121  if (down()) {
    +
    122  uint32_t i = 0;
    +
    123  for (; i < index; i++) {
    +
    124  if (!next()) {
    +
    125  break;
    +
    126  }
    +
    127  }
    +
    128  if (i == index) {
    +
    129  return true;
    +
    130  }
    +
    131  up();
    +
    132  }
    +
    133  return false;
    +
    134 }
    +
    135 
    +
    136 bool dom::parser::Iterator::prev() {
    +
    137  size_t target_location = location;
    +
    138  to_start_scope();
    +
    139  size_t npos = location;
    +
    140  if (target_location == npos) {
    +
    141  return false; // we were already at the start
    +
    142  }
    +
    143  size_t oldnpos;
    +
    144  // we have that npos < target_location here
    +
    145  do {
    +
    146  oldnpos = npos;
    +
    147  if ((current_type == '[') || (current_type == '{')) {
    +
    148  // we need to jump
    +
    149  npos = uint32_t(current_val);
    +
    150  } else {
    +
    151  npos = npos + ((current_type == 'd' || current_type == 'l') ? 2 : 1);
    +
    152  }
    +
    153  } while (npos < target_location);
    +
    154  location = oldnpos;
    +
    155  current_val = doc.tape[location];
    +
    156  current_type = uint8_t(current_val >> 56);
    +
    157  return true;
    +
    158 }
    +
    159 
    +
    160 bool dom::parser::Iterator::up() {
    +
    161  if (depth == 1) {
    +
    162  return false; // don't allow moving back to root
    +
    163  }
    +
    164  to_start_scope();
    +
    165  // next we just move to the previous value
    +
    166  depth--;
    +
    167  location -= 1;
    +
    168  current_val = doc.tape[location];
    +
    169  current_type = uint8_t(current_val >> 56);
    +
    170  return true;
    +
    171 }
    +
    172 
    +
    173 bool dom::parser::Iterator::down() {
    +
    174  if (location + 1 >= tape_length) {
    +
    175  return false;
    +
    176  }
    +
    177  if ((current_type == '[') || (current_type == '{')) {
    +
    178  size_t npos = uint32_t(current_val);
    +
    179  if (npos == location + 2) {
    +
    180  return false; // we have an empty scope
    +
    181  }
    +
    182  depth++;
    +
    183  assert(depth < max_depth);
    +
    184  location = location + 1;
    +
    185  depth_index[depth].start_of_scope = location;
    +
    186  depth_index[depth].scope_type = current_type;
    +
    187  current_val = doc.tape[location];
    +
    188  current_type = uint8_t(current_val >> 56);
    +
    189  return true;
    +
    190  }
    +
    191  return false;
    +
    192 }
    +
    193 
    +
    194 void dom::parser::Iterator::to_start_scope() {
    +
    195  location = depth_index[depth].start_of_scope;
    +
    196  current_val = doc.tape[location];
    +
    197  current_type = uint8_t(current_val >> 56);
    +
    198 }
    +
    199 
    +
    200 bool dom::parser::Iterator::next() {
    +
    201  size_t npos;
    +
    202  if ((current_type == '[') || (current_type == '{')) {
    +
    203  // we need to jump
    +
    204  npos = uint32_t(current_val);
    +
    205  } else {
    +
    206  npos = location + (is_number() ? 2 : 1);
    +
    207  }
    +
    208  uint64_t next_val = doc.tape[npos];
    +
    209  uint8_t next_type = uint8_t(next_val >> 56);
    +
    210  if ((next_type == ']') || (next_type == '}')) {
    +
    211  return false; // we reached the end of the scope
    +
    212  }
    +
    213  location = npos;
    +
    214  current_val = next_val;
    +
    215  current_type = next_type;
    +
    216  return true;
    +
    217 }
    +
    218 dom::parser::Iterator::Iterator(const dom::parser &pj) noexcept(false)
    +
    219  : doc(pj.doc)
    +
    220 {
    +
    221 #if SIMDJSON_EXCEPTIONS
    +
    222  if (!pj.valid) { throw simdjson_error(pj.error); }
    +
    223 #else
    +
    224  if (!pj.valid) { return; } // abort() usage is forbidden in the library
    +
    225 #endif
    +
    226 
    +
    227  max_depth = pj.max_depth();
    +
    228  depth_index = new scopeindex_t[max_depth + 1];
    +
    229  depth_index[0].start_of_scope = location;
    +
    230  current_val = doc.tape[location++];
    +
    231  current_type = uint8_t(current_val >> 56);
    +
    232  depth_index[0].scope_type = current_type;
    +
    233  tape_length = size_t(current_val & internal::JSON_VALUE_MASK);
    +
    234  if (location < tape_length) {
    +
    235  // If we make it here, then depth_capacity must >=2, but the compiler
    +
    236  // may not know this.
    +
    237  current_val = doc.tape[location];
    +
    238  current_type = uint8_t(current_val >> 56);
    +
    239  depth++;
    +
    240  assert(depth < max_depth);
    +
    241  depth_index[depth].start_of_scope = location;
    +
    242  depth_index[depth].scope_type = current_type;
    +
    243  }
    +
    244 }
    +
    245 dom::parser::Iterator::Iterator(
    +
    246  const dom::parser::Iterator &o) noexcept
    +
    247  : doc(o.doc),
    +
    248  max_depth(o.depth),
    +
    249  depth(o.depth),
    +
    250  location(o.location),
    +
    251  tape_length(o.tape_length),
    +
    252  current_type(o.current_type),
    +
    253  current_val(o.current_val)
    +
    254 {
    +
    255  depth_index = new scopeindex_t[max_depth+1];
    +
    256  std::memcpy(depth_index, o.depth_index, (depth + 1) * sizeof(depth_index[0]));
    +
    257 }
    +
    258 
    +
    259 dom::parser::Iterator::~Iterator() noexcept {
    +
    260  if (depth_index) { delete[] depth_index; }
    +
    261 }
    +
    262 
    +
    263 bool dom::parser::Iterator::print(std::ostream &os, bool escape_strings) const {
    +
    264  if (!is_ok()) {
    +
    265  return false;
    +
    266  }
    +
    267  switch (current_type) {
    +
    268  case '"': // we have a string
    +
    269  os << '"';
    +
    270  if (escape_strings) {
    +
    271  os << internal::escape_json_string(std::string_view(get_string(), get_string_length()));
    +
    272  } else {
    +
    273  // was: os << get_string();, but given that we can include null chars, we
    +
    274  // have to do something crazier:
    +
    275  std::copy(get_string(), get_string() + get_string_length(), std::ostream_iterator<char>(os));
    +
    276  }
    +
    277  os << '"';
    +
    278  break;
    +
    279  case 'l': // we have a long int
    +
    280  os << get_integer();
    +
    281  break;
    +
    282  case 'u':
    +
    283  os << get_unsigned_integer();
    +
    284  break;
    +
    285  case 'd':
    +
    286  os << get_double();
    +
    287  break;
    +
    288  case 'n': // we have a null
    +
    289  os << "null";
    +
    290  break;
    +
    291  case 't': // we have a true
    +
    292  os << "true";
    +
    293  break;
    +
    294  case 'f': // we have a false
    +
    295  os << "false";
    +
    296  break;
    +
    297  case '{': // we have an object
    +
    298  case '}': // we end an object
    +
    299  case '[': // we start an array
    +
    300  case ']': // we end an array
    +
    301  os << char(current_type);
    +
    302  break;
    +
    303  default:
    +
    304  return false;
    +
    305  }
    +
    306  return true;
    +
    307 }
    +
    308 
    +
    309 bool dom::parser::Iterator::move_to(const char *pointer,
    +
    310  uint32_t length) {
    +
    311  char *new_pointer = nullptr;
    +
    312  if (pointer[0] == '#') {
    +
    313  // Converting fragment representation to string representation
    +
    314  new_pointer = new char[length];
    +
    315  uint32_t new_length = 0;
    +
    316  for (uint32_t i = 1; i < length; i++) {
    +
    317  if (pointer[i] == '%' && pointer[i + 1] == 'x') {
    +
    318 #if __cpp_exceptions
    +
    319  try {
    +
    320 #endif
    +
    321  int fragment =
    +
    322  std::stoi(std::string(&pointer[i + 2], 2), nullptr, 16);
    +
    323  if (fragment == '\\' || fragment == '"' || (fragment <= 0x1F)) {
    +
    324  // escaping the character
    +
    325  new_pointer[new_length] = '\\';
    +
    326  new_length++;
    +
    327  }
    +
    328  new_pointer[new_length] = char(fragment);
    +
    329  i += 3;
    +
    330 #if __cpp_exceptions
    +
    331  } catch (std::invalid_argument &) {
    +
    332  delete[] new_pointer;
    +
    333  return false; // the fragment is invalid
    +
    334  }
    +
    335 #endif
    +
    336  } else {
    +
    337  new_pointer[new_length] = pointer[i];
    +
    338  }
    +
    339  new_length++;
    +
    340  }
    +
    341  length = new_length;
    +
    342  pointer = new_pointer;
    +
    343  }
    +
    344 
    +
    345  // saving the current state
    +
    346  size_t depth_s = depth;
    +
    347  size_t location_s = location;
    +
    348  uint8_t current_type_s = current_type;
    +
    349  uint64_t current_val_s = current_val;
    +
    350 
    +
    351  rewind(); // The json pointer is used from the root of the document.
    +
    352 
    +
    353  bool found = relative_move_to(pointer, length);
    +
    354  delete[] new_pointer;
    +
    355 
    +
    356  if (!found) {
    +
    357  // since the pointer has found nothing, we get back to the original
    +
    358  // position.
    +
    359  depth = depth_s;
    +
    360  location = location_s;
    +
    361  current_type = current_type_s;
    +
    362  current_val = current_val_s;
    +
    363  }
    +
    364 
    +
    365  return found;
    +
    366 }
    +
    367 
    +
    368 bool dom::parser::Iterator::relative_move_to(const char *pointer,
    +
    369  uint32_t length) {
    +
    370  if (length == 0) {
    +
    371  // returns the whole document
    +
    372  return true;
    +
    373  }
    +
    374 
    +
    375  if (pointer[0] != '/') {
    +
    376  // '/' must be the first character
    +
    377  return false;
    +
    378  }
    +
    379 
    +
    380  // finding the key in an object or the index in an array
    +
    381  std::string key_or_index;
    +
    382  uint32_t offset = 1;
    +
    383 
    +
    384  // checking for the "-" case
    +
    385  if (is_array() && pointer[1] == '-') {
    +
    386  if (length != 2) {
    +
    387  // the pointer must be exactly "/-"
    +
    388  // there can't be anything more after '-' as an index
    +
    389  return false;
    +
    390  }
    +
    391  key_or_index = '-';
    +
    392  offset = length; // will skip the loop coming right after
    +
    393  }
    +
    394 
    +
    395  // We either transform the first reference token to a valid json key
    +
    396  // or we make sure it is a valid index in an array.
    +
    397  for (; offset < length; offset++) {
    +
    398  if (pointer[offset] == '/') {
    +
    399  // beginning of the next key or index
    +
    400  break;
    +
    401  }
    +
    402  if (is_array() && (pointer[offset] < '0' || pointer[offset] > '9')) {
    +
    403  // the index of an array must be an integer
    +
    404  // we also make sure std::stoi won't discard whitespaces later
    +
    405  return false;
    +
    406  }
    +
    407  if (pointer[offset] == '~') {
    +
    408  // "~1" represents "/"
    +
    409  if (pointer[offset + 1] == '1') {
    +
    410  key_or_index += '/';
    +
    411  offset++;
    +
    412  continue;
    +
    413  }
    +
    414  // "~0" represents "~"
    +
    415  if (pointer[offset + 1] == '0') {
    +
    416  key_or_index += '~';
    +
    417  offset++;
    +
    418  continue;
    +
    419  }
    +
    420  }
    +
    421  if (pointer[offset] == '\\') {
    +
    422  if (pointer[offset + 1] == '\\' || pointer[offset + 1] == '"' ||
    +
    423  (pointer[offset + 1] <= 0x1F)) {
    +
    424  key_or_index += pointer[offset + 1];
    +
    425  offset++;
    +
    426  continue;
    +
    427  }
    +
    428  return false; // invalid escaped character
    +
    429  }
    +
    430  if (pointer[offset] == '\"') {
    +
    431  // unescaped quote character. this is an invalid case.
    +
    432  // lets do nothing and assume most pointers will be valid.
    +
    433  // it won't find any corresponding json key anyway.
    +
    434  // return false;
    +
    435  }
    +
    436  key_or_index += pointer[offset];
    +
    437  }
    +
    438 
    +
    439  bool found = false;
    +
    440  if (is_object()) {
    +
    441  if (move_to_key(key_or_index.c_str(), uint32_t(key_or_index.length()))) {
    +
    442  found = relative_move_to(pointer + offset, length - offset);
    +
    443  }
    +
    444  } else if (is_array()) {
    +
    445  if (key_or_index == "-") { // handling "-" case first
    +
    446  if (down()) {
    +
    447  while (next())
    +
    448  ; // moving to the end of the array
    +
    449  // moving to the nonexistent value right after...
    +
    450  size_t npos;
    +
    451  if ((current_type == '[') || (current_type == '{')) {
    +
    452  // we need to jump
    +
    453  npos = uint32_t(current_val);
    +
    454  } else {
    +
    455  npos =
    +
    456  location + ((current_type == 'd' || current_type == 'l') ? 2 : 1);
    +
    457  }
    +
    458  location = npos;
    +
    459  current_val = doc.tape[npos];
    +
    460  current_type = uint8_t(current_val >> 56);
    +
    461  return true; // how could it fail ?
    +
    462  }
    +
    463  } else { // regular numeric index
    +
    464  // The index can't have a leading '0'
    +
    465  if (key_or_index[0] == '0' && key_or_index.length() > 1) {
    +
    466  return false;
    +
    467  }
    +
    468  // it cannot be empty
    +
    469  if (key_or_index.length() == 0) {
    +
    470  return false;
    +
    471  }
    +
    472  // we already checked the index contains only valid digits
    +
    473  uint32_t index = std::stoi(key_or_index);
    +
    474  if (move_to_index(index)) {
    +
    475  found = relative_move_to(pointer + offset, length - offset);
    +
    476  }
    +
    477  }
    +
    478  }
    +
    479 
    +
    480  return found;
    +
    481 }
    +
    482 
    +
    483 SIMDJSON_POP_DISABLE_WARNINGS
    +
    484 } // namespace simdjson
    +
    485 
    +
    486 #endif // SIMDJSON_DISABLE_DEPRECATED_API
    +
    487 
    +
    488 
    +
    489 #endif // SIMDJSON_INLINE_PARSEDJSON_ITERATOR_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/parsedjson__iterator_8h_source.html b/parsedjson__iterator_8h_source.html new file mode 100644 index 000000000..2e4b8293b --- /dev/null +++ b/parsedjson__iterator_8h_source.html @@ -0,0 +1,375 @@ + + + + + + + +simdjson: include/simdjson/dom/parsedjson_iterator.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    parsedjson_iterator.h
    +
    +
    +
    1 // TODO Remove this -- deprecated API and files
    +
    2 
    +
    3 #ifndef SIMDJSON_DOM_PARSEDJSON_ITERATOR_H
    +
    4 #define SIMDJSON_DOM_PARSEDJSON_ITERATOR_H
    +
    5 
    +
    6 #include <cstring>
    +
    7 #include <string>
    +
    8 #include <ostream>
    +
    9 #include <iterator>
    +
    10 #include <limits>
    +
    11 #include <stdexcept>
    +
    12 
    +
    13 #include "simdjson/dom/document.h"
    +
    14 #include "simdjson/dom/parsedjson.h"
    +
    15 #include "simdjson/internal/jsonformatutils.h"
    +
    16 
    +
    17 #ifndef SIMDJSON_DISABLE_DEPRECATED_API
    +
    18 
    +
    19 namespace simdjson {
    +
    21 class [[deprecated("Use the new DOM navigation API instead (see doc/basics.md)")]] dom::parser::Iterator {
    +
    22 public:
    +
    23  inline Iterator(const dom::parser &parser) noexcept(false);
    +
    24  inline Iterator(const Iterator &o) noexcept;
    +
    25  inline ~Iterator() noexcept;
    +
    26 
    +
    27  inline Iterator& operator=(const Iterator&) = delete;
    +
    28 
    +
    29  inline bool is_ok() const;
    +
    30 
    +
    31  // useful for debugging purposes
    +
    32  inline size_t get_tape_location() const;
    +
    33 
    +
    34  // useful for debugging purposes
    +
    35  inline size_t get_tape_length() const;
    +
    36 
    +
    37  // returns the current depth (start at 1 with 0 reserved for the fictitious
    +
    38  // root node)
    +
    39  inline size_t get_depth() const;
    +
    40 
    +
    41  // A scope is a series of nodes at the same depth, typically it is either an
    +
    42  // object ({) or an array ([). The root node has type 'r'.
    +
    43  inline uint8_t get_scope_type() const;
    +
    44 
    +
    45  // move forward in document order
    +
    46  inline bool move_forward();
    +
    47 
    +
    48  // retrieve the character code of what we're looking at:
    +
    49  // [{"slutfn are the possibilities
    +
    50  inline uint8_t get_type() const {
    +
    51  return current_type; // short functions should be inlined!
    +
    52  }
    +
    53 
    +
    54  // get the int64_t value at this node; valid only if get_type is "l"
    +
    55  inline int64_t get_integer() const {
    +
    56  if (location + 1 >= tape_length) {
    +
    57  return 0; // default value in case of error
    +
    58  }
    +
    59  return static_cast<int64_t>(doc.tape[location + 1]);
    +
    60  }
    +
    61 
    +
    62  // get the value as uint64; valid only if if get_type is "u"
    +
    63  inline uint64_t get_unsigned_integer() const {
    +
    64  if (location + 1 >= tape_length) {
    +
    65  return 0; // default value in case of error
    +
    66  }
    +
    67  return doc.tape[location + 1];
    +
    68  }
    +
    69 
    +
    70  // get the string value at this node (NULL ended); valid only if get_type is "
    +
    71  // note that tabs, and line endings are escaped in the returned value (see
    +
    72  // print_with_escapes) return value is valid UTF-8, it may contain NULL chars
    +
    73  // within the string: get_string_length determines the true string length.
    +
    74  inline const char *get_string() const {
    +
    75  return reinterpret_cast<const char *>(
    +
    76  doc.string_buf.get() + (current_val & internal::JSON_VALUE_MASK) + sizeof(uint32_t));
    +
    77  }
    +
    78 
    +
    79  // return the length of the string in bytes
    +
    80  inline uint32_t get_string_length() const {
    +
    81  uint32_t answer;
    +
    82  std::memcpy(&answer,
    +
    83  reinterpret_cast<const char *>(doc.string_buf.get() +
    +
    84  (current_val & internal::JSON_VALUE_MASK)),
    +
    85  sizeof(uint32_t));
    +
    86  return answer;
    +
    87  }
    +
    88 
    +
    89  // get the double value at this node; valid only if
    +
    90  // get_type() is "d"
    +
    91  inline double get_double() const {
    +
    92  if (location + 1 >= tape_length) {
    +
    93  return std::numeric_limits<double>::quiet_NaN(); // default value in
    +
    94  // case of error
    +
    95  }
    +
    96  double answer;
    +
    97  std::memcpy(&answer, &doc.tape[location + 1], sizeof(answer));
    +
    98  return answer;
    +
    99  }
    +
    100 
    +
    101  inline bool is_object_or_array() const { return is_object() || is_array(); }
    +
    102 
    +
    103  inline bool is_object() const { return get_type() == '{'; }
    +
    104 
    +
    105  inline bool is_array() const { return get_type() == '['; }
    +
    106 
    +
    107  inline bool is_string() const { return get_type() == '"'; }
    +
    108 
    +
    109  // Returns true if the current type of the node is an signed integer.
    +
    110  // You can get its value with `get_integer()`.
    +
    111  inline bool is_integer() const { return get_type() == 'l'; }
    +
    112 
    +
    113  // Returns true if the current type of the node is an unsigned integer.
    +
    114  // You can get its value with `get_unsigned_integer()`.
    +
    115  //
    +
    116  // NOTE:
    +
    117  // Only a large value, which is out of range of a 64-bit signed integer, is
    +
    118  // represented internally as an unsigned node. On the other hand, a typical
    +
    119  // positive integer, such as 1, 42, or 1000000, is as a signed node.
    +
    120  // Be aware this function returns false for a signed node.
    +
    121  inline bool is_unsigned_integer() const { return get_type() == 'u'; }
    +
    122  // Returns true if the current type of the node is a double floating-point number.
    +
    123  inline bool is_double() const { return get_type() == 'd'; }
    +
    124  // Returns true if the current type of the node is a number (integer or floating-point).
    +
    125  inline bool is_number() const {
    +
    126  return is_integer() || is_unsigned_integer() || is_double();
    +
    127  }
    +
    128  // Returns true if the current type of the node is a bool with true value.
    +
    129  inline bool is_true() const { return get_type() == 't'; }
    +
    130  // Returns true if the current type of the node is a bool with false value.
    +
    131  inline bool is_false() const { return get_type() == 'f'; }
    +
    132  // Returns true if the current type of the node is null.
    +
    133  inline bool is_null() const { return get_type() == 'n'; }
    +
    134  // Returns true if the type byte represents an object of an array
    +
    135  static bool is_object_or_array(uint8_t type) {
    +
    136  return ((type == '[') || (type == '{'));
    +
    137  }
    +
    138 
    +
    139  // when at {, go one level deep, looking for a given key
    +
    140  // if successful, we are left pointing at the value,
    +
    141  // if not, we are still pointing at the object ({)
    +
    142  // (in case of repeated keys, this only finds the first one).
    +
    143  // We seek the key using C's strcmp so if your JSON strings contain
    +
    144  // NULL chars, this would trigger a false positive: if you expect that
    +
    145  // to be the case, take extra precautions.
    +
    146  // Furthermore, we do the comparison character-by-character
    +
    147  // without taking into account Unicode equivalence.
    +
    148  inline bool move_to_key(const char *key);
    +
    149 
    +
    150  // as above, but case insensitive lookup (strcmpi instead of strcmp)
    +
    151  inline bool move_to_key_insensitive(const char *key);
    +
    152 
    +
    153  // when at {, go one level deep, looking for a given key
    +
    154  // if successful, we are left pointing at the value,
    +
    155  // if not, we are still pointing at the object ({)
    +
    156  // (in case of repeated keys, this only finds the first one).
    +
    157  // The string we search for can contain NULL values.
    +
    158  // Furthermore, we do the comparison character-by-character
    +
    159  // without taking into account Unicode equivalence.
    +
    160  inline bool move_to_key(const char *key, uint32_t length);
    +
    161 
    +
    162  // when at a key location within an object, this moves to the accompanying
    +
    163  // value (located next to it). This is equivalent but much faster than
    +
    164  // calling "next()".
    +
    165  inline void move_to_value();
    +
    166 
    +
    167  // when at [, go one level deep, and advance to the given index.
    +
    168  // if successful, we are left pointing at the value,
    +
    169  // if not, we are still pointing at the array ([)
    +
    170  inline bool move_to_index(uint32_t index);
    +
    171 
    +
    172  // Moves the iterator to the value corresponding to the json pointer.
    +
    173  // Always search from the root of the document.
    +
    174  // if successful, we are left pointing at the value,
    +
    175  // if not, we are still pointing the same value we were pointing before the
    +
    176  // call. The json pointer follows the rfc6901 standard's syntax:
    +
    177  // https://tools.ietf.org/html/rfc6901 However, the standard says "If a
    +
    178  // referenced member name is not unique in an object, the member that is
    +
    179  // referenced is undefined, and evaluation fails". Here we just return the
    +
    180  // first corresponding value. The length parameter is the length of the
    +
    181  // jsonpointer string ('pointer').
    +
    182  inline bool move_to(const char *pointer, uint32_t length);
    +
    183 
    +
    184  // Moves the iterator to the value corresponding to the json pointer.
    +
    185  // Always search from the root of the document.
    +
    186  // if successful, we are left pointing at the value,
    +
    187  // if not, we are still pointing the same value we were pointing before the
    +
    188  // call. The json pointer implementation follows the rfc6901 standard's
    +
    189  // syntax: https://tools.ietf.org/html/rfc6901 However, the standard says
    +
    190  // "If a referenced member name is not unique in an object, the member that
    +
    191  // is referenced is undefined, and evaluation fails". Here we just return
    +
    192  // the first corresponding value.
    +
    193  inline bool move_to(const std::string &pointer) {
    +
    194  return move_to(pointer.c_str(), uint32_t(pointer.length()));
    +
    195  }
    +
    196 
    +
    197  private:
    +
    198  // Almost the same as move_to(), except it searches from the current
    +
    199  // position. The pointer's syntax is identical, though that case is not
    +
    200  // handled by the rfc6901 standard. The '/' is still required at the
    +
    201  // beginning. However, contrary to move_to(), the URI Fragment Identifier
    +
    202  // Representation is not supported here. Also, in case of failure, we are
    +
    203  // left pointing at the closest value it could reach. For these reasons it
    +
    204  // is private. It exists because it is used by move_to().
    +
    205  inline bool relative_move_to(const char *pointer, uint32_t length);
    +
    206 
    +
    207  public:
    +
    208  // throughout return true if we can do the navigation, false
    +
    209  // otherwise
    +
    210 
    +
    211  // Within a given scope (series of nodes at the same depth within either an
    +
    212  // array or an object), we move forward.
    +
    213  // Thus, given [true, null, {"a":1}, [1,2]], we would visit true, null, {
    +
    214  // and [. At the object ({) or at the array ([), you can issue a "down" to
    +
    215  // visit their content. valid if we're not at the end of a scope (returns
    +
    216  // true).
    +
    217  inline bool next();
    +
    218 
    +
    219  // Within a given scope (series of nodes at the same depth within either an
    +
    220  // array or an object), we move backward.
    +
    221  // Thus, given [true, null, {"a":1}, [1,2]], we would visit ], }, null, true
    +
    222  // when starting at the end of the scope. At the object ({) or at the array
    +
    223  // ([), you can issue a "down" to visit their content.
    +
    224  // Performance warning: This function is implemented by starting again
    +
    225  // from the beginning of the scope and scanning forward. You should expect
    +
    226  // it to be relatively slow.
    +
    227  inline bool prev();
    +
    228 
    +
    229  // Moves back to either the containing array or object (type { or [) from
    +
    230  // within a contained scope.
    +
    231  // Valid unless we are at the first level of the document
    +
    232  inline bool up();
    +
    233 
    +
    234  // Valid if we're at a [ or { and it starts a non-empty scope; moves us to
    +
    235  // start of that deeper scope if it not empty. Thus, given [true, null,
    +
    236  // {"a":1}, [1,2]], if we are at the { node, we would move to the "a" node.
    +
    237  inline bool down();
    +
    238 
    +
    239  // move us to the start of our current scope,
    +
    240  // a scope is a series of nodes at the same level
    +
    241  inline void to_start_scope();
    +
    242 
    +
    243  inline void rewind() {
    +
    244  while (up())
    +
    245  ;
    +
    246  }
    +
    247 
    +
    248 
    +
    249 
    +
    250  // print the node we are currently pointing at
    +
    251  inline bool print(std::ostream &os, bool escape_strings = true) const;
    +
    252 
    +
    253  private:
    +
    254  const document &doc;
    +
    255  size_t max_depth{};
    +
    256  size_t depth{};
    +
    257  size_t location{}; // our current location on a tape
    +
    258  size_t tape_length{};
    +
    259  uint8_t current_type{};
    +
    260  uint64_t current_val{};
    +
    261  typedef struct {
    +
    262  size_t start_of_scope;
    +
    263  uint8_t scope_type;
    +
    264  } scopeindex_t;
    +
    265 
    +
    266  scopeindex_t *depth_index{};
    +
    267 };
    +
    268 
    +
    269 } // namespace simdjson
    +
    270 #endif // SIMDJSON_DISABLE_DEPRECATED_API
    +
    271 
    +
    272 #endif // SIMDJSON_DOM_PARSEDJSON_ITERATOR_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/portability_8h_source.html b/portability_8h_source.html new file mode 100644 index 000000000..d5533412c --- /dev/null +++ b/portability_8h_source.html @@ -0,0 +1,275 @@ + + + + + + + +simdjson: include/simdjson/portability.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    portability.h
    +
    +
    +
    1 #ifndef SIMDJSON_PORTABILITY_H
    +
    2 #define SIMDJSON_PORTABILITY_H
    +
    3 
    +
    4 #include <cstddef>
    +
    5 #include <cstdint>
    +
    6 #include <cstdlib>
    +
    7 #include <cfloat>
    +
    8 #include <cassert>
    +
    9 #ifndef _WIN32
    +
    10 // strcasecmp, strncasecmp
    +
    11 #include <strings.h>
    +
    12 #endif
    +
    13 
    +
    14 #ifdef _MSC_VER
    +
    15 #define SIMDJSON_VISUAL_STUDIO 1
    +
    26 #ifdef __clang__
    +
    27 // clang under visual studio
    +
    28 #define SIMDJSON_CLANG_VISUAL_STUDIO 1
    +
    29 #else
    +
    30 // just regular visual studio (best guess)
    +
    31 #define SIMDJSON_REGULAR_VISUAL_STUDIO 1
    +
    32 #endif // __clang__
    +
    33 #endif // _MSC_VER
    +
    34 
    +
    35 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    36 // https://en.wikipedia.org/wiki/C_alternative_tokens
    +
    37 // This header should have no effect, except maybe
    +
    38 // under Visual Studio.
    +
    39 #include <iso646.h>
    +
    40 #endif
    +
    41 
    +
    42 #if defined(__x86_64__) || defined(_M_AMD64)
    +
    43 #define SIMDJSON_IS_X86_64 1
    +
    44 #elif defined(__aarch64__) || defined(_M_ARM64)
    +
    45 #define SIMDJSON_IS_ARM64 1
    +
    46 #elif defined(__PPC64__) || defined(_M_PPC64)
    +
    47 #define SIMDJSON_IS_PPC64 1
    +
    48 #else
    +
    49 #define SIMDJSON_IS_32BITS 1
    +
    50 
    +
    51 // We do not support 32-bit platforms, but it can be
    +
    52 // handy to identify them.
    +
    53 #if defined(_M_IX86) || defined(__i386__)
    +
    54 #define SIMDJSON_IS_X86_32BITS 1
    +
    55 #elif defined(__arm__) || defined(_M_ARM)
    +
    56 #define SIMDJSON_IS_ARM_32BITS 1
    +
    57 #elif defined(__PPC__) || defined(_M_PPC)
    +
    58 #define SIMDJSON_IS_PPC_32BITS 1
    +
    59 #endif
    +
    60 
    +
    61 #endif // defined(__x86_64__) || defined(_M_AMD64)
    +
    62 #ifndef SIMDJSON_IS_32BITS
    +
    63 #define SIMDJSON_IS_32BITS 0
    +
    64 #endif
    +
    65 
    +
    66 #if SIMDJSON_IS_32BITS
    +
    67 #ifndef SIMDJSON_NO_PORTABILITY_WARNING
    +
    68 #pragma message("The simdjson library is designed \
    +
    69 for 64-bit processors and it seems that you are not \
    +
    70 compiling for a known 64-bit platform. All fast kernels \
    +
    71 will be disabled and performance may be poor. Please \
    +
    72 use a 64-bit target such as x64, 64-bit ARM or 64-bit PPC.")
    +
    73 #endif // SIMDJSON_NO_PORTABILITY_WARNING
    +
    74 #endif // SIMDJSON_IS_32BITS
    +
    75 
    +
    76 // this is almost standard?
    +
    77 #undef SIMDJSON_STRINGIFY_IMPLEMENTATION_
    +
    78 #undef SIMDJSON_STRINGIFY
    +
    79 #define SIMDJSON_STRINGIFY_IMPLEMENTATION_(a) #a
    +
    80 #define SIMDJSON_STRINGIFY(a) SIMDJSON_STRINGIFY_IMPLEMENTATION_(a)
    +
    81 
    +
    82 // Our fast kernels require 64-bit systems.
    +
    83 //
    +
    84 // On 32-bit x86, we lack 64-bit popcnt, lzcnt, blsr instructions.
    +
    85 // Furthermore, the number of SIMD registers is reduced.
    +
    86 //
    +
    87 // On 32-bit ARM, we would have smaller registers.
    +
    88 //
    +
    89 // The simdjson users should still have the fallback kernel. It is
    +
    90 // slower, but it should run everywhere.
    +
    91 
    +
    92 //
    +
    93 // Enable valid runtime implementations, and select SIMDJSON_BUILTIN_IMPLEMENTATION
    +
    94 //
    +
    95 
    +
    96 // We are going to use runtime dispatch.
    +
    97 #if SIMDJSON_IS_X86_64
    +
    98 #ifdef __clang__
    +
    99 // clang does not have GCC push pop
    +
    100 // warning: clang attribute push can't be used within a namespace in clang up
    +
    101 // til 8.0 so SIMDJSON_TARGET_REGION and SIMDJSON_UNTARGET_REGION must be *outside* of a
    +
    102 // namespace.
    +
    103 #define SIMDJSON_TARGET_REGION(T) \
    +
    104  _Pragma(SIMDJSON_STRINGIFY( \
    +
    105  clang attribute push(__attribute__((target(T))), apply_to = function)))
    +
    106 #define SIMDJSON_UNTARGET_REGION _Pragma("clang attribute pop")
    +
    107 #elif defined(__GNUC__)
    +
    108 // GCC is easier
    +
    109 #define SIMDJSON_TARGET_REGION(T) \
    +
    110  _Pragma("GCC push_options") _Pragma(SIMDJSON_STRINGIFY(GCC target(T)))
    +
    111 #define SIMDJSON_UNTARGET_REGION _Pragma("GCC pop_options")
    +
    112 #endif // clang then gcc
    +
    113 
    +
    114 #endif // x86
    +
    115 
    +
    116 // Default target region macros don't do anything.
    +
    117 #ifndef SIMDJSON_TARGET_REGION
    +
    118 #define SIMDJSON_TARGET_REGION(T)
    +
    119 #define SIMDJSON_UNTARGET_REGION
    +
    120 #endif
    +
    121 
    +
    122 // Is threading enabled?
    +
    123 #if defined(_REENTRANT) || defined(_MT)
    +
    124 #ifndef SIMDJSON_THREADS_ENABLED
    +
    125 #define SIMDJSON_THREADS_ENABLED
    +
    126 #endif
    +
    127 #endif
    +
    128 
    +
    129 // workaround for large stack sizes under -O0.
    +
    130 // https://github.com/simdjson/simdjson/issues/691
    +
    131 #ifdef __APPLE__
    +
    132 #ifndef __OPTIMIZE__
    +
    133 // Apple systems have small stack sizes in secondary threads.
    +
    134 // Lack of compiler optimization may generate high stack usage.
    +
    135 // Users may want to disable threads for safety, but only when
    +
    136 // in debug mode which we detect by the fact that the __OPTIMIZE__
    +
    137 // macro is not defined.
    +
    138 #undef SIMDJSON_THREADS_ENABLED
    +
    139 #endif
    +
    140 #endif
    +
    141 
    +
    142 
    +
    143 #if defined(__clang__)
    +
    144 #define SIMDJSON_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined")))
    +
    145 #elif defined(__GNUC__)
    +
    146 #define SIMDJSON_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize_undefined))
    +
    147 #else
    +
    148 #define SIMDJSON_NO_SANITIZE_UNDEFINED
    +
    149 #endif
    +
    150 
    +
    151 #if SIMDJSON_VISUAL_STUDIO
    +
    152 // This is one case where we do not distinguish between
    +
    153 // regular visual studio and clang under visual studio.
    +
    154 // clang under Windows has _stricmp (like visual studio) but not strcasecmp (as clang normally has)
    +
    155 #define simdjson_strcasecmp _stricmp
    +
    156 #define simdjson_strncasecmp _strnicmp
    +
    157 #else
    +
    158 // The strcasecmp, strncasecmp, and strcasestr functions do not work with multibyte strings (e.g. UTF-8).
    +
    159 // So they are only useful for ASCII in our context.
    +
    160 // https://www.gnu.org/software/libunistring/manual/libunistring.html#char-_002a-strings
    +
    161 #define simdjson_strcasecmp strcasecmp
    +
    162 #define simdjson_strncasecmp strncasecmp
    +
    163 #endif
    +
    164 
    +
    165 #ifdef NDEBUG
    +
    166 
    +
    167 #if SIMDJSON_VISUAL_STUDIO
    +
    168 #define SIMDJSON_UNREACHABLE() __assume(0)
    +
    169 #define SIMDJSON_ASSUME(COND) __assume(COND)
    +
    170 #else
    +
    171 #define SIMDJSON_UNREACHABLE() __builtin_unreachable();
    +
    172 #define SIMDJSON_ASSUME(COND) do { if (!(COND)) __builtin_unreachable(); } while (0)
    +
    173 #endif
    +
    174 
    +
    175 #else // NDEBUG
    +
    176 
    +
    177 #define SIMDJSON_UNREACHABLE() assert(0);
    +
    178 #define SIMDJSON_ASSUME(COND) assert(COND)
    +
    179 
    +
    180 #endif
    +
    181 
    +
    182 #endif // SIMDJSON_PORTABILITY_H
    +
    +
    + + + + diff --git a/ppc64_2begin_8h_source.html b/ppc64_2begin_8h_source.html new file mode 100644 index 000000000..e0af54ceb --- /dev/null +++ b/ppc64_2begin_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/ppc64/begin.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    begin.h
    +
    +
    +
    1 #define SIMDJSON_IMPLEMENTATION ppc64
    +
    +
    + + + + diff --git a/ppc64_2bitmanipulation_8h_source.html b/ppc64_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..fdc6441c3 --- /dev/null +++ b/ppc64_2bitmanipulation_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + +simdjson: include/simdjson/ppc64/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bitmanipulation.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_BITMANIPULATION_H
    +
    2 #define SIMDJSON_PPC64_BITMANIPULATION_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 // We sometimes call trailing_zero on inputs that are zero,
    +
    9 // but the algorithms do not end up using the returned value.
    +
    10 // Sadly, sanitizers are not smart enough to figure it out.
    +
    11 SIMDJSON_NO_SANITIZE_UNDEFINED
    +
    12 simdjson_inline int trailing_zeroes(uint64_t input_num) {
    +
    13 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    14  unsigned long ret;
    +
    15  // Search the mask data from least significant bit (LSB)
    +
    16  // to the most significant bit (MSB) for a set bit (1).
    +
    17  _BitScanForward64(&ret, input_num);
    +
    18  return (int)ret;
    +
    19 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    20  return __builtin_ctzll(input_num);
    +
    21 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    22 }
    +
    23 
    +
    24 /* result might be undefined when input_num is zero */
    +
    25 simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
    +
    26  return input_num & (input_num - 1);
    +
    27 }
    +
    28 
    +
    29 /* result might be undefined when input_num is zero */
    +
    30 simdjson_inline int leading_zeroes(uint64_t input_num) {
    +
    31 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    32  unsigned long leading_zero = 0;
    +
    33  // Search the mask data from most significant bit (MSB)
    +
    34  // to least significant bit (LSB) for a set bit (1).
    +
    35  if (_BitScanReverse64(&leading_zero, input_num))
    +
    36  return (int)(63 - leading_zero);
    +
    37  else
    +
    38  return 64;
    +
    39 #else
    +
    40  return __builtin_clzll(input_num);
    +
    41 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    42 }
    +
    43 
    +
    44 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    45 simdjson_inline int count_ones(uint64_t input_num) {
    +
    46  // note: we do not support legacy 32-bit Windows
    +
    47  return __popcnt64(input_num); // Visual Studio wants two underscores
    +
    48 }
    +
    49 #else
    +
    50 simdjson_inline int count_ones(uint64_t input_num) {
    +
    51  return __builtin_popcountll(input_num);
    +
    52 }
    +
    53 #endif
    +
    54 
    +
    55 simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2,
    +
    56  uint64_t *result) {
    +
    57 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    58  *result = value1 + value2;
    +
    59  return *result < value1;
    +
    60 #else
    +
    61  return __builtin_uaddll_overflow(value1, value2,
    +
    62  reinterpret_cast<unsigned long long *>(result));
    +
    63 #endif
    +
    64 }
    +
    65 
    +
    66 } // unnamed namespace
    +
    67 } // namespace SIMDJSON_IMPLEMENTATION
    +
    68 } // namespace simdjson
    +
    69 
    +
    70 #endif // SIMDJSON_PPC64_BITMANIPULATION_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/ppc64_2bitmask_8h_source.html b/ppc64_2bitmask_8h_source.html new file mode 100644 index 000000000..dfd85ac97 --- /dev/null +++ b/ppc64_2bitmask_8h_source.html @@ -0,0 +1,146 @@ + + + + + + + +simdjson: include/simdjson/ppc64/bitmask.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bitmask.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_BITMASK_H
    +
    2 #define SIMDJSON_PPC64_BITMASK_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 //
    +
    9 // Perform a "cumulative bitwise xor," flipping bits each time a 1 is
    +
    10 // encountered.
    +
    11 //
    +
    12 // For example, prefix_xor(00100100) == 00011100
    +
    13 //
    +
    14 simdjson_inline uint64_t prefix_xor(uint64_t bitmask) {
    +
    15  // You can use the version below, however gcc sometimes miscompiles
    +
    16  // vec_pmsum_be, it happens somewhere around between 8 and 9th version.
    +
    17  // The performance boost was not noticeable, falling back to a usual
    +
    18  // implementation.
    +
    19  // __vector unsigned long long all_ones = {~0ull, ~0ull};
    +
    20  // __vector unsigned long long mask = {bitmask, 0};
    +
    21  // // Clang and GCC return different values for pmsum for ull so cast it to one.
    +
    22  // // Generally it is not specified by ALTIVEC ISA what is returned by
    +
    23  // // vec_pmsum_be.
    +
    24  // #if defined(__LITTLE_ENDIAN__)
    +
    25  // return (uint64_t)(((__vector unsigned long long)vec_pmsum_be(all_ones, mask))[0]);
    +
    26  // #else
    +
    27  // return (uint64_t)(((__vector unsigned long long)vec_pmsum_be(all_ones, mask))[1]);
    +
    28  // #endif
    +
    29  bitmask ^= bitmask << 1;
    +
    30  bitmask ^= bitmask << 2;
    +
    31  bitmask ^= bitmask << 4;
    +
    32  bitmask ^= bitmask << 8;
    +
    33  bitmask ^= bitmask << 16;
    +
    34  bitmask ^= bitmask << 32;
    +
    35  return bitmask;
    +
    36 }
    +
    37 
    +
    38 } // unnamed namespace
    +
    39 } // namespace SIMDJSON_IMPLEMENTATION
    +
    40 } // namespace simdjson
    +
    41 
    +
    42 #endif
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/ppc64_2end_8h_source.html b/ppc64_2end_8h_source.html new file mode 100644 index 000000000..58ab02c52 --- /dev/null +++ b/ppc64_2end_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +simdjson: include/simdjson/ppc64/end.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    end.h
    +
    +
    +
    1 #undef SIMDJSON_IMPLEMENTATION
    +
    +
    + + + + diff --git a/ppc64_2implementation_8h_source.html b/ppc64_2implementation_8h_source.html new file mode 100644 index 000000000..667d87a47 --- /dev/null +++ b/ppc64_2implementation_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +simdjson: include/simdjson/ppc64/implementation.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    implementation.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_IMPLEMENTATION_H
    +
    2 #define SIMDJSON_PPC64_IMPLEMENTATION_H
    +
    3 
    +
    4 #include "simdjson/base.h"
    +
    5 #include "simdjson/internal/isadetection.h"
    +
    6 
    +
    7 namespace simdjson {
    +
    8 namespace ppc64 {
    +
    9 
    +
    10 namespace {
    +
    11 using namespace simdjson;
    +
    12 using namespace simdjson::dom;
    +
    13 } // namespace
    +
    14 
    +
    18 class implementation final : public simdjson::implementation {
    +
    19 public:
    +
    20  simdjson_inline implementation()
    +
    21  : simdjson::implementation("ppc64", "PPC64 ALTIVEC",
    +
    22  internal::instruction_set::ALTIVEC) {}
    +
    23  simdjson_warn_unused error_code create_dom_parser_implementation(
    +
    24  size_t capacity, size_t max_length,
    +
    25  std::unique_ptr<internal::dom_parser_implementation> &dst)
    +
    26  const noexcept final;
    +
    27  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len,
    +
    28  uint8_t *dst,
    +
    29  size_t &dst_len) const noexcept final;
    +
    30  simdjson_warn_unused bool validate_utf8(const char *buf,
    +
    31  size_t len) const noexcept final;
    +
    32 };
    +
    33 
    +
    34 } // namespace ppc64
    +
    35 } // namespace simdjson
    +
    36 
    +
    37 #endif // SIMDJSON_PPC64_IMPLEMENTATION_H
    +
    An implementation of simdjson for a particular CPU architecture.
    +
    virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
    Validate the UTF-8 string.
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    std::string minify(T x)
    Minifies a JSON element or document, printing the smallest possible valid JSON.
    +
    +
    + + + + diff --git a/ppc64_2intrinsics_8h_source.html b/ppc64_2intrinsics_8h_source.html new file mode 100644 index 000000000..7cd5866c8 --- /dev/null +++ b/ppc64_2intrinsics_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + +simdjson: include/simdjson/ppc64/intrinsics.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    intrinsics.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_INTRINSICS_H
    +
    2 #define SIMDJSON_PPC64_INTRINSICS_H
    +
    3 
    +
    4 #include "simdjson/base.h"
    +
    5 
    +
    6 // This should be the correct header whether
    +
    7 // you use visual studio or other compilers.
    +
    8 #include <altivec.h>
    +
    9 
    +
    10 // These are defined by altivec.h in GCC toolchain, it is safe to undef them.
    +
    11 #ifdef bool
    +
    12 #undef bool
    +
    13 #endif
    +
    14 
    +
    15 #ifdef vector
    +
    16 #undef vector
    +
    17 #endif
    +
    18 
    +
    19 static_assert(sizeof(__vector unsigned char) <= simdjson::SIMDJSON_PADDING, "insufficient padding for ppc64");
    +
    20 
    +
    21 #endif // SIMDJSON_PPC64_INTRINSICS_H
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    +
    + + + + diff --git a/ppc64_2numberparsing_8h_source.html b/ppc64_2numberparsing_8h_source.html new file mode 100644 index 000000000..b72280eea --- /dev/null +++ b/ppc64_2numberparsing_8h_source.html @@ -0,0 +1,144 @@ + + + + + + + +simdjson: include/simdjson/ppc64/numberparsing.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    numberparsing.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_NUMBERPARSING_H
    +
    2 #define SIMDJSON_PPC64_NUMBERPARSING_H
    +
    3 
    +
    4 #if defined(__linux__)
    +
    5 #include <byteswap.h>
    +
    6 #elif defined(__FreeBSD__)
    +
    7 #include <sys/endian.h>
    +
    8 #endif
    +
    9 
    +
    10 namespace simdjson {
    +
    11 namespace SIMDJSON_IMPLEMENTATION {
    +
    12 namespace {
    +
    13 
    +
    14 // we don't have appropriate instructions, so let us use a scalar function
    +
    15 // credit: https://johnnylee-sde.github.io/Fast-numeric-string-to-int/
    +
    16 static simdjson_inline uint32_t
    +
    17 parse_eight_digits_unrolled(const uint8_t *chars) {
    +
    18  uint64_t val;
    +
    19  std::memcpy(&val, chars, sizeof(uint64_t));
    +
    20 #ifdef __BIG_ENDIAN__
    +
    21 #if defined(__linux__)
    +
    22  val = bswap_64(val);
    +
    23 #elif defined(__FreeBSD__)
    +
    24  val = bswap64(val);
    +
    25 #endif
    +
    26 #endif
    +
    27  val = (val & 0x0F0F0F0F0F0F0F0F) * 2561 >> 8;
    +
    28  val = (val & 0x00FF00FF00FF00FF) * 6553601 >> 16;
    +
    29  return uint32_t((val & 0x0000FFFF0000FFFF) * 42949672960001 >> 32);
    +
    30 }
    +
    31 
    +
    32 } // unnamed namespace
    +
    33 } // namespace SIMDJSON_IMPLEMENTATION
    +
    34 } // namespace simdjson
    +
    35 
    +
    36 #define SIMDJSON_SWAR_NUMBER_PARSING 1
    +
    37 
    +
    38 #include "simdjson/generic/numberparsing.h"
    +
    39 
    +
    40 #endif // SIMDJSON_PPC64_NUMBERPARSING_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/ppc64_2simd_8h_source.html b/ppc64_2simd_8h_source.html new file mode 100644 index 000000000..e552f6d9f --- /dev/null +++ b/ppc64_2simd_8h_source.html @@ -0,0 +1,577 @@ + + + + + + + +simdjson: include/simdjson/ppc64/simd.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simd.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_SIMD_H
    +
    2 #define SIMDJSON_PPC64_SIMD_H
    +
    3 
    +
    4 #include "simdjson/base.h"
    +
    5 #include "simdjson/internal/simdprune_tables.h"
    +
    6 #include "simdjson/ppc64/bitmanipulation.h"
    +
    7 #include <type_traits>
    +
    8 
    +
    9 namespace simdjson {
    +
    10 namespace SIMDJSON_IMPLEMENTATION {
    +
    11 namespace {
    +
    12 namespace simd {
    +
    13 
    +
    14 using __m128i = __vector unsigned char;
    +
    15 
    +
    16 template <typename Child> struct base {
    +
    17  __m128i value;
    +
    18 
    +
    19  // Zero constructor
    +
    20  simdjson_inline base() : value{__m128i()} {}
    +
    21 
    +
    22  // Conversion from SIMD register
    +
    23  simdjson_inline base(const __m128i _value) : value(_value) {}
    +
    24 
    +
    25  // Conversion to SIMD register
    +
    26  simdjson_inline operator const __m128i &() const {
    +
    27  return this->value;
    +
    28  }
    +
    29  simdjson_inline operator __m128i &() { return this->value; }
    +
    30 
    +
    31  // Bit operations
    +
    32  simdjson_inline Child operator|(const Child other) const {
    +
    33  return vec_or(this->value, (__m128i)other);
    +
    34  }
    +
    35  simdjson_inline Child operator&(const Child other) const {
    +
    36  return vec_and(this->value, (__m128i)other);
    +
    37  }
    +
    38  simdjson_inline Child operator^(const Child other) const {
    +
    39  return vec_xor(this->value, (__m128i)other);
    +
    40  }
    +
    41  simdjson_inline Child bit_andnot(const Child other) const {
    +
    42  return vec_andc(this->value, (__m128i)other);
    +
    43  }
    +
    44  simdjson_inline Child &operator|=(const Child other) {
    +
    45  auto this_cast = static_cast<Child*>(this);
    +
    46  *this_cast = *this_cast | other;
    +
    47  return *this_cast;
    +
    48  }
    +
    49  simdjson_inline Child &operator&=(const Child other) {
    +
    50  auto this_cast = static_cast<Child*>(this);
    +
    51  *this_cast = *this_cast & other;
    +
    52  return *this_cast;
    +
    53  }
    +
    54  simdjson_inline Child &operator^=(const Child other) {
    +
    55  auto this_cast = static_cast<Child*>(this);
    +
    56  *this_cast = *this_cast ^ other;
    +
    57  return *this_cast;
    +
    58  }
    +
    59 };
    +
    60 
    +
    61 // Forward-declared so they can be used by splat and friends.
    +
    62 template <typename T> struct simd8;
    +
    63 
    +
    64 template <typename T, typename Mask = simd8<bool>>
    +
    65 struct base8 : base<simd8<T>> {
    +
    66  typedef uint16_t bitmask_t;
    +
    67  typedef uint32_t bitmask2_t;
    +
    68 
    +
    69  simdjson_inline base8() : base<simd8<T>>() {}
    +
    70  simdjson_inline base8(const __m128i _value) : base<simd8<T>>(_value) {}
    +
    71 
    +
    72  friend simdjson_inline Mask operator==(const simd8<T> lhs, const simd8<T> rhs) {
    +
    73  return (__m128i)vec_cmpeq(lhs.value, (__m128i)rhs);
    +
    74  }
    +
    75 
    +
    76  static const int SIZE = sizeof(base<simd8<T>>::value);
    +
    77 
    +
    78  template <int N = 1>
    +
    79  simdjson_inline simd8<T> prev(simd8<T> prev_chunk) const {
    +
    80  __m128i chunk = this->value;
    +
    81 #ifdef __LITTLE_ENDIAN__
    +
    82  chunk = (__m128i)vec_reve(this->value);
    +
    83  prev_chunk = (__m128i)vec_reve((__m128i)prev_chunk);
    +
    84 #endif
    +
    85  chunk = (__m128i)vec_sld((__m128i)prev_chunk, (__m128i)chunk, 16 - N);
    +
    86 #ifdef __LITTLE_ENDIAN__
    +
    87  chunk = (__m128i)vec_reve((__m128i)chunk);
    +
    88 #endif
    +
    89  return chunk;
    +
    90  }
    +
    91 };
    +
    92 
    +
    93 // SIMD byte mask type (returned by things like eq and gt)
    +
    94 template <> struct simd8<bool> : base8<bool> {
    +
    95  static simdjson_inline simd8<bool> splat(bool _value) {
    +
    96  return (__m128i)vec_splats((unsigned char)(-(!!_value)));
    +
    97  }
    +
    98 
    +
    99  simdjson_inline simd8<bool>() : base8() {}
    +
    100  simdjson_inline simd8<bool>(const __m128i _value)
    +
    101  : base8<bool>(_value) {}
    +
    102  // Splat constructor
    +
    103  simdjson_inline simd8<bool>(bool _value)
    +
    104  : base8<bool>(splat(_value)) {}
    +
    105 
    +
    106  simdjson_inline int to_bitmask() const {
    +
    107  __vector unsigned long long result;
    +
    108  const __m128i perm_mask = {0x78, 0x70, 0x68, 0x60, 0x58, 0x50, 0x48, 0x40,
    +
    109  0x38, 0x30, 0x28, 0x20, 0x18, 0x10, 0x08, 0x00};
    +
    110 
    +
    111  result = ((__vector unsigned long long)vec_vbpermq((__m128i)this->value,
    +
    112  (__m128i)perm_mask));
    +
    113 #ifdef __LITTLE_ENDIAN__
    +
    114  return static_cast<int>(result[1]);
    +
    115 #else
    +
    116  return static_cast<int>(result[0]);
    +
    117 #endif
    +
    118  }
    +
    119  simdjson_inline bool any() const {
    +
    120  return !vec_all_eq(this->value, (__m128i)vec_splats(0));
    +
    121  }
    +
    122  simdjson_inline simd8<bool> operator~() const {
    +
    123  return this->value ^ (__m128i)splat(true);
    +
    124  }
    +
    125 };
    +
    126 
    +
    127 template <typename T> struct base8_numeric : base8<T> {
    +
    128  static simdjson_inline simd8<T> splat(T value) {
    +
    129  (void)value;
    +
    130  return (__m128i)vec_splats(value);
    +
    131  }
    +
    132  static simdjson_inline simd8<T> zero() { return splat(0); }
    +
    133  static simdjson_inline simd8<T> load(const T values[16]) {
    +
    134  return (__m128i)(vec_vsx_ld(0, reinterpret_cast<const uint8_t *>(values)));
    +
    135  }
    +
    136  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    137  static simdjson_inline simd8<T> repeat_16(T v0, T v1, T v2, T v3, T v4,
    +
    138  T v5, T v6, T v7, T v8, T v9,
    +
    139  T v10, T v11, T v12, T v13,
    +
    140  T v14, T v15) {
    +
    141  return simd8<T>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
    +
    142  v14, v15);
    +
    143  }
    +
    144 
    +
    145  simdjson_inline base8_numeric() : base8<T>() {}
    +
    146  simdjson_inline base8_numeric(const __m128i _value)
    +
    147  : base8<T>(_value) {}
    +
    148 
    +
    149  // Store to array
    +
    150  simdjson_inline void store(T dst[16]) const {
    +
    151  vec_vsx_st(this->value, 0, reinterpret_cast<__m128i *>(dst));
    +
    152  }
    +
    153 
    +
    154  // Override to distinguish from bool version
    +
    155  simdjson_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
    +
    156 
    +
    157  // Addition/subtraction are the same for signed and unsigned
    +
    158  simdjson_inline simd8<T> operator+(const simd8<T> other) const {
    +
    159  return (__m128i)((__m128i)this->value + (__m128i)other);
    +
    160  }
    +
    161  simdjson_inline simd8<T> operator-(const simd8<T> other) const {
    +
    162  return (__m128i)((__m128i)this->value - (__m128i)other);
    +
    163  }
    +
    164  simdjson_inline simd8<T> &operator+=(const simd8<T> other) {
    +
    165  *this = *this + other;
    +
    166  return *static_cast<simd8<T> *>(this);
    +
    167  }
    +
    168  simdjson_inline simd8<T> &operator-=(const simd8<T> other) {
    +
    169  *this = *this - other;
    +
    170  return *static_cast<simd8<T> *>(this);
    +
    171  }
    +
    172 
    +
    173  // Perform a lookup assuming the value is between 0 and 16 (undefined behavior
    +
    174  // for out of range values)
    +
    175  template <typename L>
    +
    176  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
    +
    177  return (__m128i)vec_perm((__m128i)lookup_table, (__m128i)lookup_table, this->value);
    +
    178  }
    +
    179 
    +
    180  // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted
    +
    181  // as a bitset). Passing a 0 value for mask would be equivalent to writing out
    +
    182  // every byte to output. Only the first 16 - count_ones(mask) bytes of the
    +
    183  // result are significant but 16 bytes get written. Design consideration: it
    +
    184  // seems like a function with the signature simd8<L> compress(uint32_t mask)
    +
    185  // would be sensible, but the AVX ISA makes this kind of approach difficult.
    +
    186  template <typename L>
    +
    187  simdjson_inline void compress(uint16_t mask, L *output) const {
    +
    188  using internal::BitsSetTable256mul2;
    +
    189  using internal::pshufb_combine_table;
    +
    190  using internal::thintable_epi8;
    +
    191  // this particular implementation was inspired by work done by @animetosho
    +
    192  // we do it in two steps, first 8 bytes and then second 8 bytes
    +
    193  uint8_t mask1 = uint8_t(mask); // least significant 8 bits
    +
    194  uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits
    +
    195  // next line just loads the 64-bit values thintable_epi8[mask1] and
    +
    196  // thintable_epi8[mask2] into a 128-bit register, using only
    +
    197  // two instructions on most compilers.
    +
    198 #ifdef __LITTLE_ENDIAN__
    +
    199  __m128i shufmask = (__m128i)(__vector unsigned long long){
    +
    200  thintable_epi8[mask1], thintable_epi8[mask2]};
    +
    201 #else
    +
    202  __m128i shufmask = (__m128i)(__vector unsigned long long){
    +
    203  thintable_epi8[mask2], thintable_epi8[mask1]};
    +
    204  shufmask = (__m128i)vec_reve((__m128i)shufmask);
    +
    205 #endif
    +
    206  // we increment by 0x08 the second half of the mask
    +
    207  shufmask = ((__m128i)shufmask) +
    +
    208  ((__m128i)(__vector int){0, 0, 0x08080808, 0x08080808});
    +
    209 
    +
    210  // this is the version "nearly pruned"
    +
    211  __m128i pruned = vec_perm(this->value, this->value, shufmask);
    +
    212  // we still need to put the two halves together.
    +
    213  // we compute the popcount of the first half:
    +
    214  int pop1 = BitsSetTable256mul2[mask1];
    +
    215  // then load the corresponding mask, what it does is to write
    +
    216  // only the first pop1 bytes from the first 8 bytes, and then
    +
    217  // it fills in with the bytes from the second 8 bytes + some filling
    +
    218  // at the end.
    +
    219  __m128i compactmask =
    +
    220  vec_vsx_ld(0, reinterpret_cast<const uint8_t *>(pshufb_combine_table + pop1 * 8));
    +
    221  __m128i answer = vec_perm(pruned, (__m128i)vec_splats(0), compactmask);
    +
    222  vec_vsx_st(answer, 0, reinterpret_cast<__m128i *>(output));
    +
    223  }
    +
    224 
    +
    225  template <typename L>
    +
    226  simdjson_inline simd8<L>
    +
    227  lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4,
    +
    228  L replace5, L replace6, L replace7, L replace8, L replace9,
    +
    229  L replace10, L replace11, L replace12, L replace13, L replace14,
    +
    230  L replace15) const {
    +
    231  return lookup_16(simd8<L>::repeat_16(
    +
    232  replace0, replace1, replace2, replace3, replace4, replace5, replace6,
    +
    233  replace7, replace8, replace9, replace10, replace11, replace12,
    +
    234  replace13, replace14, replace15));
    +
    235  }
    +
    236 };
    +
    237 
    +
    238 // Signed bytes
    +
    239 template <> struct simd8<int8_t> : base8_numeric<int8_t> {
    +
    240  simdjson_inline simd8() : base8_numeric<int8_t>() {}
    +
    241  simdjson_inline simd8(const __m128i _value)
    +
    242  : base8_numeric<int8_t>(_value) {}
    +
    243  // Splat constructor
    +
    244  simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
    +
    245  // Array constructor
    +
    246  simdjson_inline simd8(const int8_t *values) : simd8(load(values)) {}
    +
    247  // Member-by-member initialization
    +
    248  simdjson_inline simd8(int8_t v0, int8_t v1, int8_t v2, int8_t v3,
    +
    249  int8_t v4, int8_t v5, int8_t v6, int8_t v7,
    +
    250  int8_t v8, int8_t v9, int8_t v10, int8_t v11,
    +
    251  int8_t v12, int8_t v13, int8_t v14, int8_t v15)
    +
    252  : simd8((__m128i)(__vector signed char){v0, v1, v2, v3, v4, v5, v6, v7,
    +
    253  v8, v9, v10, v11, v12, v13, v14,
    +
    254  v15}) {}
    +
    255  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    256  simdjson_inline static simd8<int8_t>
    +
    257  repeat_16(int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5,
    +
    258  int8_t v6, int8_t v7, int8_t v8, int8_t v9, int8_t v10, int8_t v11,
    +
    259  int8_t v12, int8_t v13, int8_t v14, int8_t v15) {
    +
    260  return simd8<int8_t>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
    +
    261  v13, v14, v15);
    +
    262  }
    +
    263 
    +
    264  // Order-sensitive comparisons
    +
    265  simdjson_inline simd8<int8_t>
    +
    266  max_val(const simd8<int8_t> other) const {
    +
    267  return (__m128i)vec_max((__vector signed char)this->value,
    +
    268  (__vector signed char)(__m128i)other);
    +
    269  }
    +
    270  simdjson_inline simd8<int8_t>
    +
    271  min_val(const simd8<int8_t> other) const {
    +
    272  return (__m128i)vec_min((__vector signed char)this->value,
    +
    273  (__vector signed char)(__m128i)other);
    +
    274  }
    +
    275  simdjson_inline simd8<bool>
    +
    276  operator>(const simd8<int8_t> other) const {
    +
    277  return (__m128i)vec_cmpgt((__vector signed char)this->value,
    +
    278  (__vector signed char)(__m128i)other);
    +
    279  }
    +
    280  simdjson_inline simd8<bool>
    +
    281  operator<(const simd8<int8_t> other) const {
    +
    282  return (__m128i)vec_cmplt((__vector signed char)this->value,
    +
    283  (__vector signed char)(__m128i)other);
    +
    284  }
    +
    285 };
    +
    286 
    +
    287 // Unsigned bytes
    +
    288 template <> struct simd8<uint8_t> : base8_numeric<uint8_t> {
    +
    289  simdjson_inline simd8() : base8_numeric<uint8_t>() {}
    +
    290  simdjson_inline simd8(const __m128i _value)
    +
    291  : base8_numeric<uint8_t>(_value) {}
    +
    292  // Splat constructor
    +
    293  simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
    +
    294  // Array constructor
    +
    295  simdjson_inline simd8(const uint8_t *values) : simd8(load(values)) {}
    +
    296  // Member-by-member initialization
    +
    297  simdjson_inline
    +
    298  simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5,
    +
    299  uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10,
    +
    300  uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15)
    +
    301  : simd8((__m128i){v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
    +
    302  v13, v14, v15}) {}
    +
    303  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    304  simdjson_inline static simd8<uint8_t>
    +
    305  repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4,
    +
    306  uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9,
    +
    307  uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14,
    +
    308  uint8_t v15) {
    +
    309  return simd8<uint8_t>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
    +
    310  v13, v14, v15);
    +
    311  }
    +
    312 
    +
    313  // Saturated math
    +
    314  simdjson_inline simd8<uint8_t>
    +
    315  saturating_add(const simd8<uint8_t> other) const {
    +
    316  return (__m128i)vec_adds(this->value, (__m128i)other);
    +
    317  }
    +
    318  simdjson_inline simd8<uint8_t>
    +
    319  saturating_sub(const simd8<uint8_t> other) const {
    +
    320  return (__m128i)vec_subs(this->value, (__m128i)other);
    +
    321  }
    +
    322 
    +
    323  // Order-specific operations
    +
    324  simdjson_inline simd8<uint8_t>
    +
    325  max_val(const simd8<uint8_t> other) const {
    +
    326  return (__m128i)vec_max(this->value, (__m128i)other);
    +
    327  }
    +
    328  simdjson_inline simd8<uint8_t>
    +
    329  min_val(const simd8<uint8_t> other) const {
    +
    330  return (__m128i)vec_min(this->value, (__m128i)other);
    +
    331  }
    +
    332  // Same as >, but only guarantees true is nonzero (< guarantees true = -1)
    +
    333  simdjson_inline simd8<uint8_t>
    +
    334  gt_bits(const simd8<uint8_t> other) const {
    +
    335  return this->saturating_sub(other);
    +
    336  }
    +
    337  // Same as <, but only guarantees true is nonzero (< guarantees true = -1)
    +
    338  simdjson_inline simd8<uint8_t>
    +
    339  lt_bits(const simd8<uint8_t> other) const {
    +
    340  return other.saturating_sub(*this);
    +
    341  }
    +
    342  simdjson_inline simd8<bool>
    +
    343  operator<=(const simd8<uint8_t> other) const {
    +
    344  return other.max_val(*this) == other;
    +
    345  }
    +
    346  simdjson_inline simd8<bool>
    +
    347  operator>=(const simd8<uint8_t> other) const {
    +
    348  return other.min_val(*this) == other;
    +
    349  }
    +
    350  simdjson_inline simd8<bool>
    +
    351  operator>(const simd8<uint8_t> other) const {
    +
    352  return this->gt_bits(other).any_bits_set();
    +
    353  }
    +
    354  simdjson_inline simd8<bool>
    +
    355  operator<(const simd8<uint8_t> other) const {
    +
    356  return this->gt_bits(other).any_bits_set();
    +
    357  }
    +
    358 
    +
    359  // Bit-specific operations
    +
    360  simdjson_inline simd8<bool> bits_not_set() const {
    +
    361  return (__m128i)vec_cmpeq(this->value, (__m128i)vec_splats(uint8_t(0)));
    +
    362  }
    +
    363  simdjson_inline simd8<bool> bits_not_set(simd8<uint8_t> bits) const {
    +
    364  return (*this & bits).bits_not_set();
    +
    365  }
    +
    366  simdjson_inline simd8<bool> any_bits_set() const {
    +
    367  return ~this->bits_not_set();
    +
    368  }
    +
    369  simdjson_inline simd8<bool> any_bits_set(simd8<uint8_t> bits) const {
    +
    370  return ~this->bits_not_set(bits);
    +
    371  }
    +
    372  simdjson_inline bool bits_not_set_anywhere() const {
    +
    373  return vec_all_eq(this->value, (__m128i)vec_splats(0));
    +
    374  }
    +
    375  simdjson_inline bool any_bits_set_anywhere() const {
    +
    376  return !bits_not_set_anywhere();
    +
    377  }
    +
    378  simdjson_inline bool bits_not_set_anywhere(simd8<uint8_t> bits) const {
    +
    379  return vec_all_eq(vec_and(this->value, (__m128i)bits),
    +
    380  (__m128i)vec_splats(0));
    +
    381  }
    +
    382  simdjson_inline bool any_bits_set_anywhere(simd8<uint8_t> bits) const {
    +
    383  return !bits_not_set_anywhere(bits);
    +
    384  }
    +
    385  template <int N> simdjson_inline simd8<uint8_t> shr() const {
    +
    386  return simd8<uint8_t>(
    +
    387  (__m128i)vec_sr(this->value, (__m128i)vec_splat_u8(N)));
    +
    388  }
    +
    389  template <int N> simdjson_inline simd8<uint8_t> shl() const {
    +
    390  return simd8<uint8_t>(
    +
    391  (__m128i)vec_sl(this->value, (__m128i)vec_splat_u8(N)));
    +
    392  }
    +
    393 };
    +
    394 
    +
    395 template <typename T> struct simd8x64 {
    +
    396  static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
    +
    397  static_assert(NUM_CHUNKS == 4,
    +
    398  "PPC64 kernel should use four registers per 64-byte block.");
    +
    399  const simd8<T> chunks[NUM_CHUNKS];
    +
    400 
    +
    401  simd8x64(const simd8x64<T> &o) = delete; // no copy allowed
    +
    402  simd8x64<T> &
    +
    403  operator=(const simd8<T>& other) = delete; // no assignment allowed
    +
    404  simd8x64() = delete; // no default constructor allowed
    +
    405 
    +
    406  simdjson_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1,
    +
    407  const simd8<T> chunk2, const simd8<T> chunk3)
    +
    408  : chunks{chunk0, chunk1, chunk2, chunk3} {}
    +
    409  simdjson_inline simd8x64(const T ptr[64])
    +
    410  : chunks{simd8<T>::load(ptr), simd8<T>::load(ptr + 16),
    +
    411  simd8<T>::load(ptr + 32), simd8<T>::load(ptr + 48)} {}
    +
    412 
    +
    413  simdjson_inline void store(T ptr[64]) const {
    +
    414  this->chunks[0].store(ptr + sizeof(simd8<T>) * 0);
    +
    415  this->chunks[1].store(ptr + sizeof(simd8<T>) * 1);
    +
    416  this->chunks[2].store(ptr + sizeof(simd8<T>) * 2);
    +
    417  this->chunks[3].store(ptr + sizeof(simd8<T>) * 3);
    +
    418  }
    +
    419 
    +
    420  simdjson_inline simd8<T> reduce_or() const {
    +
    421  return (this->chunks[0] | this->chunks[1]) |
    +
    422  (this->chunks[2] | this->chunks[3]);
    +
    423  }
    +
    424 
    +
    425  simdjson_inline uint64_t compress(uint64_t mask, T *output) const {
    +
    426  this->chunks[0].compress(uint16_t(mask), output);
    +
    427  this->chunks[1].compress(uint16_t(mask >> 16),
    +
    428  output + 16 - count_ones(mask & 0xFFFF));
    +
    429  this->chunks[2].compress(uint16_t(mask >> 32),
    +
    430  output + 32 - count_ones(mask & 0xFFFFFFFF));
    +
    431  this->chunks[3].compress(uint16_t(mask >> 48),
    +
    432  output + 48 - count_ones(mask & 0xFFFFFFFFFFFF));
    +
    433  return 64 - count_ones(mask);
    +
    434  }
    +
    435 
    +
    436  simdjson_inline uint64_t to_bitmask() const {
    +
    437  uint64_t r0 = uint32_t(this->chunks[0].to_bitmask());
    +
    438  uint64_t r1 = this->chunks[1].to_bitmask();
    +
    439  uint64_t r2 = this->chunks[2].to_bitmask();
    +
    440  uint64_t r3 = this->chunks[3].to_bitmask();
    +
    441  return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48);
    +
    442  }
    +
    443 
    +
    444  simdjson_inline uint64_t eq(const T m) const {
    +
    445  const simd8<T> mask = simd8<T>::splat(m);
    +
    446  return simd8x64<bool>(this->chunks[0] == mask, this->chunks[1] == mask,
    +
    447  this->chunks[2] == mask, this->chunks[3] == mask)
    +
    448  .to_bitmask();
    +
    449  }
    +
    450 
    +
    451  simdjson_inline uint64_t eq(const simd8x64<uint8_t> &other) const {
    +
    452  return simd8x64<bool>(this->chunks[0] == other.chunks[0],
    +
    453  this->chunks[1] == other.chunks[1],
    +
    454  this->chunks[2] == other.chunks[2],
    +
    455  this->chunks[3] == other.chunks[3])
    +
    456  .to_bitmask();
    +
    457  }
    +
    458 
    +
    459  simdjson_inline uint64_t lteq(const T m) const {
    +
    460  const simd8<T> mask = simd8<T>::splat(m);
    +
    461  return simd8x64<bool>(this->chunks[0] <= mask, this->chunks[1] <= mask,
    +
    462  this->chunks[2] <= mask, this->chunks[3] <= mask)
    +
    463  .to_bitmask();
    +
    464  }
    +
    465 }; // struct simd8x64<T>
    +
    466 
    +
    467 } // namespace simd
    +
    468 } // unnamed namespace
    +
    469 } // namespace SIMDJSON_IMPLEMENTATION
    +
    470 } // namespace simdjson
    +
    471 
    +
    472 #endif // SIMDJSON_PPC64_SIMD_INPUT_H
    +
    simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/ppc64_2stringparsing_8h_source.html b/ppc64_2stringparsing_8h_source.html new file mode 100644 index 000000000..2af5d0c1f --- /dev/null +++ b/ppc64_2stringparsing_8h_source.html @@ -0,0 +1,168 @@ + + + + + + + +simdjson: include/simdjson/ppc64/stringparsing.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    stringparsing.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_STRINGPARSING_H
    +
    2 #define SIMDJSON_PPC64_STRINGPARSING_H
    +
    3 
    +
    4 #include "simdjson/base.h"
    +
    5 #include "simdjson/ppc64/bitmanipulation.h"
    +
    6 #include "simdjson/ppc64/simd.h"
    +
    7 
    +
    8 namespace simdjson {
    +
    9 namespace SIMDJSON_IMPLEMENTATION {
    +
    10 namespace {
    +
    11 
    +
    12 using namespace simd;
    +
    13 
    +
    14 // Holds backslashes and quotes locations.
    +
    15 struct backslash_and_quote {
    +
    16 public:
    +
    17  static constexpr uint32_t BYTES_PROCESSED = 32;
    +
    18  simdjson_inline static backslash_and_quote
    +
    19  copy_and_find(const uint8_t *src, uint8_t *dst);
    +
    20 
    +
    21  simdjson_inline bool has_quote_first() {
    +
    22  return ((bs_bits - 1) & quote_bits) != 0;
    +
    23  }
    +
    24  simdjson_inline bool has_backslash() { return bs_bits != 0; }
    +
    25  simdjson_inline int quote_index() {
    +
    26  return trailing_zeroes(quote_bits);
    +
    27  }
    +
    28  simdjson_inline int backslash_index() {
    +
    29  return trailing_zeroes(bs_bits);
    +
    30  }
    +
    31 
    +
    32  uint32_t bs_bits;
    +
    33  uint32_t quote_bits;
    +
    34 }; // struct backslash_and_quote
    +
    35 
    +
    36 simdjson_inline backslash_and_quote
    +
    37 backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
    +
    38  // this can read up to 31 bytes beyond the buffer size, but we require
    +
    39  // SIMDJSON_PADDING of padding
    +
    40  static_assert(SIMDJSON_PADDING >= (BYTES_PROCESSED - 1),
    +
    41  "backslash and quote finder must process fewer than "
    +
    42  "SIMDJSON_PADDING bytes");
    +
    43  simd8<uint8_t> v0(src);
    +
    44  simd8<uint8_t> v1(src + sizeof(v0));
    +
    45  v0.store(dst);
    +
    46  v1.store(dst + sizeof(v0));
    +
    47 
    +
    48  // Getting a 64-bit bitmask is much cheaper than multiple 16-bit bitmasks on
    +
    49  // PPC; therefore, we smash them together into a 64-byte mask and get the
    +
    50  // bitmask from there.
    +
    51  uint64_t bs_and_quote =
    +
    52  simd8x64<bool>(v0 == '\\', v1 == '\\', v0 == '"', v1 == '"').to_bitmask();
    +
    53  return {
    +
    54  uint32_t(bs_and_quote), // bs_bits
    +
    55  uint32_t(bs_and_quote >> 32) // quote_bits
    +
    56  };
    +
    57 }
    +
    58 
    +
    59 } // unnamed namespace
    +
    60 } // namespace SIMDJSON_IMPLEMENTATION
    +
    61 } // namespace simdjson
    +
    62 
    +
    63 #endif // SIMDJSON_PPC64_STRINGPARSING_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    +
    + + + + diff --git a/ppc64_8h_source.html b/ppc64_8h_source.html new file mode 100644 index 000000000..f4a049753 --- /dev/null +++ b/ppc64_8h_source.html @@ -0,0 +1,136 @@ + + + + + + + +simdjson: include/simdjson/ppc64.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ppc64.h
    +
    +
    +
    1 #ifndef SIMDJSON_PPC64_H
    +
    2 #define SIMDJSON_PPC64_H
    +
    3 
    + +
    5 
    +
    6 #if SIMDJSON_IMPLEMENTATION_PPC64
    +
    7 
    +
    8 namespace simdjson {
    +
    12 namespace ppc64 {
    +
    13 } // namespace ppc64
    +
    14 } // namespace simdjson
    +
    15 
    +
    16 #include "simdjson/ppc64/implementation.h"
    +
    17 
    +
    18 #include "simdjson/ppc64/begin.h"
    +
    19 
    +
    20 // Declarations
    +
    21 #include "simdjson/generic/dom_parser_implementation.h"
    +
    22 #include "simdjson/ppc64/intrinsics.h"
    +
    23 #include "simdjson/ppc64/bitmanipulation.h"
    +
    24 #include "simdjson/ppc64/bitmask.h"
    +
    25 #include "simdjson/ppc64/simd.h"
    +
    26 #include "simdjson/generic/jsoncharutils.h"
    +
    27 #include "simdjson/generic/atomparsing.h"
    +
    28 #include "simdjson/ppc64/stringparsing.h"
    +
    29 #include "simdjson/ppc64/numberparsing.h"
    +
    30 #include "simdjson/ppc64/end.h"
    +
    31 
    +
    32 #endif // SIMDJSON_IMPLEMENTATION_PPC64
    +
    33 
    +
    34 #endif // SIMDJSON_PPC64_H
    +
    Includes common stuff needed for implementations.
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/raw__json__string-inl_8h_source.html b/raw__json__string-inl_8h_source.html new file mode 100644 index 000000000..e84863751 --- /dev/null +++ b/raw__json__string-inl_8h_source.html @@ -0,0 +1,300 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/raw_json_string-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    raw_json_string-inl.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 
    +
    3 namespace SIMDJSON_IMPLEMENTATION {
    +
    4 namespace ondemand {
    +
    5 
    +
    6 simdjson_inline raw_json_string::raw_json_string(const uint8_t * _buf) noexcept : buf{_buf} {}
    +
    7 
    +
    8 simdjson_inline const char * raw_json_string::raw() const noexcept { return reinterpret_cast<const char *>(buf); }
    +
    9 
    +
    10 
    +
    11 simdjson_inline bool raw_json_string::is_free_from_unescaped_quote(std::string_view target) noexcept {
    +
    12  size_t pos{0};
    +
    13  // if the content has no escape character, just scan through it quickly!
    +
    14  for(;pos < target.size() && target[pos] != '\\';pos++) {}
    +
    15  // slow path may begin.
    +
    16  bool escaping{false};
    +
    17  for(;pos < target.size();pos++) {
    +
    18  if((target[pos] == '"') && !escaping) {
    +
    19  return false;
    +
    20  } else if(target[pos] == '\\') {
    +
    21  escaping = !escaping;
    +
    22  } else {
    +
    23  escaping = false;
    +
    24  }
    +
    25  }
    +
    26  return true;
    +
    27 }
    +
    28 
    +
    29 simdjson_inline bool raw_json_string::is_free_from_unescaped_quote(const char* target) noexcept {
    +
    30  size_t pos{0};
    +
    31  // if the content has no escape character, just scan through it quickly!
    +
    32  for(;target[pos] && target[pos] != '\\';pos++) {}
    +
    33  // slow path may begin.
    +
    34  bool escaping{false};
    +
    35  for(;target[pos];pos++) {
    +
    36  if((target[pos] == '"') && !escaping) {
    +
    37  return false;
    +
    38  } else if(target[pos] == '\\') {
    +
    39  escaping = !escaping;
    +
    40  } else {
    +
    41  escaping = false;
    +
    42  }
    +
    43  }
    +
    44  return true;
    +
    45 }
    +
    46 
    +
    47 
    +
    48 simdjson_inline bool raw_json_string::unsafe_is_equal(size_t length, std::string_view target) const noexcept {
    +
    49  // If we are going to call memcmp, then we must know something about the length of the raw_json_string.
    +
    50  return (length >= target.size()) && (raw()[target.size()] == '"') && !memcmp(raw(), target.data(), target.size());
    +
    51 }
    +
    52 
    +
    53 simdjson_inline bool raw_json_string::unsafe_is_equal(std::string_view target) const noexcept {
    +
    54  // Assumptions: does not contain unescaped quote characters, and
    +
    55  // the raw content is quote terminated within a valid JSON string.
    +
    56  if(target.size() <= SIMDJSON_PADDING) {
    +
    57  return (raw()[target.size()] == '"') && !memcmp(raw(), target.data(), target.size());
    +
    58  }
    +
    59  const char * r{raw()};
    +
    60  size_t pos{0};
    +
    61  for(;pos < target.size();pos++) {
    +
    62  if(r[pos] != target[pos]) { return false; }
    +
    63  }
    +
    64  if(r[pos] != '"') { return false; }
    +
    65  return true;
    +
    66 }
    +
    67 
    +
    68 simdjson_inline bool raw_json_string::is_equal(std::string_view target) const noexcept {
    +
    69  const char * r{raw()};
    +
    70  size_t pos{0};
    +
    71  bool escaping{false};
    +
    72  for(;pos < target.size();pos++) {
    +
    73  if(r[pos] != target[pos]) { return false; }
    +
    74  // if target is a compile-time constant and it is free from
    +
    75  // quotes, then the next part could get optimized away through
    +
    76  // inlining.
    +
    77  if((target[pos] == '"') && !escaping) {
    +
    78  // We have reached the end of the raw_json_string but
    +
    79  // the target is not done.
    +
    80  return false;
    +
    81  } else if(target[pos] == '\\') {
    +
    82  escaping = !escaping;
    +
    83  } else {
    +
    84  escaping = false;
    +
    85  }
    +
    86  }
    +
    87  if(r[pos] != '"') { return false; }
    +
    88  return true;
    +
    89 }
    +
    90 
    +
    91 
    +
    92 simdjson_inline bool raw_json_string::unsafe_is_equal(const char * target) const noexcept {
    +
    93  // Assumptions: 'target' does not contain unescaped quote characters, is null terminated and
    +
    94  // the raw content is quote terminated within a valid JSON string.
    +
    95  const char * r{raw()};
    +
    96  size_t pos{0};
    +
    97  for(;target[pos];pos++) {
    +
    98  if(r[pos] != target[pos]) { return false; }
    +
    99  }
    +
    100  if(r[pos] != '"') { return false; }
    +
    101  return true;
    +
    102 }
    +
    103 
    +
    104 simdjson_inline bool raw_json_string::is_equal(const char* target) const noexcept {
    +
    105  // Assumptions: does not contain unescaped quote characters, and
    +
    106  // the raw content is quote terminated within a valid JSON string.
    +
    107  const char * r{raw()};
    +
    108  size_t pos{0};
    +
    109  bool escaping{false};
    +
    110  for(;target[pos];pos++) {
    +
    111  if(r[pos] != target[pos]) { return false; }
    +
    112  // if target is a compile-time constant and it is free from
    +
    113  // quotes, then the next part could get optimized away through
    +
    114  // inlining.
    +
    115  if((target[pos] == '"') && !escaping) {
    +
    116  // We have reached the end of the raw_json_string but
    +
    117  // the target is not done.
    +
    118  return false;
    +
    119  } else if(target[pos] == '\\') {
    +
    120  escaping = !escaping;
    +
    121  } else {
    +
    122  escaping = false;
    +
    123  }
    +
    124  }
    +
    125  if(r[pos] != '"') { return false; }
    +
    126  return true;
    +
    127 }
    +
    128 
    +
    129 simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept {
    +
    130  return a.unsafe_is_equal(c);
    +
    131 }
    +
    132 
    +
    133 simdjson_unused simdjson_inline bool operator==(std::string_view c, const raw_json_string &a) noexcept {
    +
    134  return a == c;
    +
    135 }
    +
    136 
    +
    137 simdjson_unused simdjson_inline bool operator!=(const raw_json_string &a, std::string_view c) noexcept {
    +
    138  return !(a == c);
    +
    139 }
    +
    140 
    +
    141 simdjson_unused simdjson_inline bool operator!=(std::string_view c, const raw_json_string &a) noexcept {
    +
    142  return !(a == c);
    +
    143 }
    +
    144 
    +
    145 
    +
    146 simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> raw_json_string::unescape(json_iterator &iter) const noexcept {
    +
    147  return iter.unescape(*this);
    +
    148 }
    +
    149 
    +
    150 
    +
    151 simdjson_unused simdjson_inline std::ostream &operator<<(std::ostream &out, const raw_json_string &str) noexcept {
    +
    152  bool in_escape = false;
    +
    153  const char *s = str.raw();
    +
    154  while (true) {
    +
    155  switch (*s) {
    +
    156  case '\\': in_escape = !in_escape; break;
    +
    157  case '"': if (in_escape) { in_escape = false; } else { return out; } break;
    +
    158  default: if (in_escape) { in_escape = false; }
    +
    159  }
    +
    160  out << *s;
    +
    161  s++;
    +
    162  }
    +
    163 }
    +
    164 
    +
    165 } // namespace ondemand
    +
    166 } // namespace SIMDJSON_IMPLEMENTATION
    +
    167 } // namespace simdjson
    +
    168 
    +
    169 namespace simdjson {
    +
    170 
    +
    171 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value) noexcept
    +
    172  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>(value)) {}
    +
    173 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>::simdjson_result(error_code error) noexcept
    +
    174  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>(error) {}
    +
    175 
    +
    176 simdjson_inline simdjson_result<const char *> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>::raw() const noexcept {
    +
    177  if (error()) { return error(); }
    +
    178  return first.raw();
    +
    179 }
    +
    180 simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string>::unescape(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &iter) const noexcept {
    +
    181  if (error()) { return error(); }
    +
    182  return first.unescape(iter);
    +
    183 }
    +
    184 
    +
    185 } // namespace simdjson
    +
    A string escaped per JSON rules, terminated with quote (").
    +
    simdjson_inline bool is_equal(std::string_view target) const noexcept
    This compares the current instance to the std::string_view target: returns true if they are byte-by-b...
    +
    static simdjson_inline bool is_free_from_unescaped_quote(std::string_view target) noexcept
    Returns true if target is free from unescaped quote.
    +
    simdjson_inline raw_json_string() noexcept=default
    Create a new invalid raw_json_string.
    +
    simdjson_inline const char * raw() const noexcept
    Get the raw pointer to the beginning of the string in the JSON (just after the ").
    +
    simdjson_inline bool unsafe_is_equal(size_t length, std::string_view target) const noexcept
    This compares the current instance to the std::string_view target: returns true if they are byte-by-b...
    +
    simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
    +
    std::ostream & operator<<(std::ostream &out, json_type type) noexcept
    Write the JSON type to the output stream.
    Definition: json_type-inl.h:5
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    +
    + + + + diff --git a/raw__json__string_8h_source.html b/raw__json__string_8h_source.html new file mode 100644 index 000000000..243d7c269 --- /dev/null +++ b/raw__json__string_8h_source.html @@ -0,0 +1,191 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/raw_json_string.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    raw_json_string.h
    +
    +
    +
    1 #include "simdjson/error.h"
    +
    2 
    +
    3 namespace simdjson {
    +
    4 namespace SIMDJSON_IMPLEMENTATION {
    +
    5 namespace ondemand {
    +
    6 
    +
    7 class object;
    +
    8 class parser;
    +
    9 class json_iterator;
    +
    10 
    + +
    35 public:
    +
    41  simdjson_inline raw_json_string() noexcept = default;
    +
    42 
    +
    50  simdjson_inline raw_json_string(const uint8_t * _buf) noexcept;
    +
    57  simdjson_inline const char * raw() const noexcept;
    +
    58 
    +
    73  simdjson_inline bool unsafe_is_equal(size_t length, std::string_view target) const noexcept;
    +
    74 
    +
    90  simdjson_inline bool unsafe_is_equal(std::string_view target) const noexcept;
    +
    91 
    +
    104  simdjson_inline bool unsafe_is_equal(const char* target) const noexcept;
    +
    105 
    +
    110  simdjson_inline bool is_equal(std::string_view target) const noexcept;
    +
    111 
    +
    116  simdjson_inline bool is_equal(const char* target) const noexcept;
    +
    117 
    +
    123  static simdjson_inline bool is_free_from_unescaped_quote(std::string_view target) noexcept;
    +
    124  static simdjson_inline bool is_free_from_unescaped_quote(const char* target) noexcept;
    +
    125 
    +
    126 private:
    +
    127 
    +
    128 
    +
    133  simdjson_inline void consume() noexcept { buf = nullptr; }
    +
    134 
    +
    138  simdjson_inline simdjson_warn_unused bool alive() const noexcept { return buf != nullptr; }
    +
    139 
    +
    149  simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> unescape(json_iterator &iter) const noexcept;
    +
    150 
    +
    151  const uint8_t * buf{};
    +
    152  friend class object;
    +
    153  friend class field;
    +
    154  friend class parser;
    +
    155  friend struct simdjson_result<raw_json_string>;
    +
    156 };
    +
    157 
    +
    158 simdjson_unused simdjson_inline std::ostream &operator<<(std::ostream &, const raw_json_string &) noexcept;
    +
    159 
    +
    164 simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept;
    +
    165 simdjson_unused simdjson_inline bool operator==(std::string_view c, const raw_json_string &a) noexcept;
    +
    166 simdjson_unused simdjson_inline bool operator!=(const raw_json_string &a, std::string_view c) noexcept;
    +
    167 simdjson_unused simdjson_inline bool operator!=(std::string_view c, const raw_json_string &a) noexcept;
    +
    168 
    +
    169 
    +
    170 } // namespace ondemand
    +
    171 } // namespace SIMDJSON_IMPLEMENTATION
    +
    172 } // namespace simdjson
    +
    173 
    +
    174 namespace simdjson {
    +
    175 
    +
    176 template<>
    +
    177 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> {
    +
    178 public:
    + +
    180  simdjson_inline simdjson_result(error_code error) noexcept;
    +
    181  simdjson_inline simdjson_result() noexcept = default;
    +
    182  simdjson_inline ~simdjson_result() noexcept = default;
    +
    183 
    +
    184  simdjson_inline simdjson_result<const char *> raw() const noexcept;
    +
    185  simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> unescape(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &iter) const noexcept;
    +
    186 };
    +
    187 
    +
    188 } // namespace simdjson
    +
    A string escaped per JSON rules, terminated with quote (").
    +
    simdjson_inline bool is_equal(std::string_view target) const noexcept
    This compares the current instance to the std::string_view target: returns true if they are byte-by-b...
    +
    static simdjson_inline bool is_free_from_unescaped_quote(std::string_view target) noexcept
    Returns true if target is free from unescaped quote.
    +
    simdjson_inline raw_json_string() noexcept=default
    Create a new invalid raw_json_string.
    +
    simdjson_inline const char * raw() const noexcept
    Get the raw pointer to the beginning of the string in the JSON (just after the ").
    +
    simdjson_inline bool unsafe_is_equal(size_t length, std::string_view target) const noexcept
    This compares the current instance to the std::string_view target: returns true if they are byte-by-b...
    +
    simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
    +
    std::ostream & operator<<(std::ostream &out, json_type type) noexcept
    Write the JSON type to the output stream.
    Definition: json_type-inl.h:5
    +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    + +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    simdjson_inline T & value() &noexcept(false)
    Get the result value.
    +
    +
    + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 000000000..e1ad0fe3b --- /dev/null +++ b/resize.js @@ -0,0 +1,140 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 000000000..1ec5b2d59 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 000000000..f0b0247d5 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['a_20better_20way_20to_20parse_20documents_3f_0',['A Better Way to Parse Documents?',['../md_doc_ondemand_design.html',1,'']]], + ['allocate_1',['allocate',['../classsimdjson_1_1dom_1_1parser.html#af8f49755a335bc269cb02d24badfcdf9',1,'simdjson::dom::parser::allocate()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ab6201f2eab41026e722a237d280b8fe1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::allocate()']]], + ['append_5fdouble_2',['append_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ae5b327f855878cba9b026059a1fc8a1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['append_5fs64_3',['append_s64',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#adb931b17ba9d4d41dd8111ad9288256c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['append_5fu64_4',['append_u64',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa3481ec0d0726a732688b7fc64372049',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['array_5',['array',['../classsimdjson_1_1dom_1_1array.html#a8b3d6eaec52a2b44965e53d874e367e9',1,'simdjson::dom::array::array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cc89dada9999c2ecc319954cc3fc90a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a240a8118a5b6f76962425134cc284764',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array(const value_iterator &iter) noexcept'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330af1f713c9e000f5d3f280adbd124df4f5',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array()'],['../classsimdjson_1_1dom_1_1array.html',1,'simdjson::dom::array'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['array_20iteration_6',['Array iteration',['../group__array.html',1,'']]], + ['array_5fiterator_7',['array_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#aa330b23feb572f33d77516431572b643',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::array_iterator()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator']]], + ['as_5fdouble_8',['as_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a41dc1bfd660e0b9c86cb5a5171fd7c02',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['at_9',['at',['../classsimdjson_1_1dom_1_1array.html#a6a6373cc1542a7137b79978680a93d18',1,'simdjson::dom::array::at()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acc369e813e7cf4a97564bb0d85f76db3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a01c6bde0574654dc22ea219c3b3dbf51',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a1c97143f7637414d737d58daeec2eb84',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at()'],['../classsimdjson_1_1dom_1_1element.html#aeb155c47ef7bebcad79e1b7449734030',1,'simdjson::dom::element::at(size_t index) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#aa8b5798004a859bf922778226b8c1cce',1,'simdjson::dom::element::at(const std::string_view json_pointer) const noexcept']]], + ['at_5fkey_10',['at_key',['../classsimdjson_1_1dom_1_1element.html#a686a21f39c755dcbf95116757d2193bd',1,'simdjson::dom::element::at_key()'],['../classsimdjson_1_1dom_1_1object.html#a4fb3e04e0ea591132da90341bf9ed819',1,'simdjson::dom::object::at_key()']]], + ['at_5fkey_5fcase_5finsensitive_11',['at_key_case_insensitive',['../classsimdjson_1_1dom_1_1element.html#a5185447e6bf8949e7c5e9c22711e8764',1,'simdjson::dom::element::at_key_case_insensitive()'],['../classsimdjson_1_1dom_1_1object.html#ab075da9eb7678f6321cecf4cbd196039',1,'simdjson::dom::object::at_key_case_insensitive()']]], + ['at_5fpointer_12',['at_pointer',['../classsimdjson_1_1dom_1_1array.html#a8141c7d98672bc3ab69fea7b63afcfb2',1,'simdjson::dom::array::at_pointer()'],['../classsimdjson_1_1dom_1_1element.html#a3777fed88f37555f2d090aeb604a117c',1,'simdjson::dom::element::at_pointer()'],['../classsimdjson_1_1dom_1_1object.html#ace84581be0fee46d5128c49710522aba',1,'simdjson::dom::object::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a73c2fc4db0c0b4083fafe706412d3b26',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a74484485f4a3d8dce5943b0cb60ac815',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae3d80f8e7f31c319fe6ee09c0860df83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aadd2f646a3231d407948bf5f3da46528',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at_pointer()']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 000000000..9f80e9043 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 000000000..1792ebbda --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['begin_13',['begin',['../classsimdjson_1_1dom_1_1array.html#aebd2b7ca5e1d87476ea2cd4fc9239a74',1,'simdjson::dom::array::begin()'],['../classsimdjson_1_1dom_1_1document__stream.html#a9a51df3d81c9b7849bbbc8ae42096b76',1,'simdjson::dom::document_stream::begin()'],['../classsimdjson_1_1dom_1_1element.html#aa59ecf8e9ac7b1a9e977d2cd3f03aa7f',1,'simdjson::dom::element::begin()'],['../classsimdjson_1_1dom_1_1object.html#afe127a7e9ec8dab9ec76160525a68a83',1,'simdjson::dom::object::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cb4bf0ca1890a4a3c86f69be40f17f2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1a450826deb3ba982c9f0ec6208cb246',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ae88253d9f6cef0dfc0bd05c45cdfc06f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a88d1cdc3124965d707754af4fcfae7f9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::begin()']]], + ['boolean_14',['boolean',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a84e2c64f38f78ba3ea5c905ab5a2da27',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['buf_15',['buf',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a961b4870710d5ee1da938c4923d6f68d',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['builtin_5fimplementation_16',['builtin_implementation',['../namespacesimdjson.html#af63210cc51d5c99ad84958daf9812e63',1,'simdjson']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 000000000..3bf11961f --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 000000000..e1d392d6c --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['raw_183',['raw',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a8736f5e397a3e0a55090aadee0596214',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string']]], + ['raw_5fjson_184',['raw_json',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ad8a7f0b418fae60160e403f71a5a8088',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::raw_json()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa3a27654a19c386ad0c775cff258cf0c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a71600033791f9c6bbc9f40fb2f82fdc8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::raw_json()']]], + ['raw_5fjson_5fstring_185',['raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a78b420ddb8a0570ee973cdfbccd31c9a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#acf64001cc9961cd01712211b778e760b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string(const uint8_t *_buf) noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string']]], + ['raw_5fjson_5ftoken_186',['raw_json_token',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a0bcbee63db869ac122bed75000b54d46',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >::raw_json_token()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a442b2e5803e69d4845b5b7f7bd51a0ed',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::raw_json_token()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a37427e768435aafef5af097b8cc3cfec',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::raw_json_token()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ac1bcd8afb10742d6f18b8f2f07ba0392',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >::raw_json_token()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a58802e77b6fb25a3d2ec8a4d2482f9bf',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json_token()']]], + ['reset_187',['reset',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae7248918b09cb4cb1d866605c641679d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::reset()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae0bc6b9803e0c989e9defaf3edcaaae4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::reset()']]], + ['resume_188',['resume',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a970f5c3f3e668a399765d52c7426764d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['rewind_189',['rewind',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9cc053001e8246e6e65bbcbf3db035c4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['root_190',['root',['../classsimdjson_1_1dom_1_1document.html#ae19dced0eee5f63b9d1591ef51dcda4e',1,'simdjson::dom::document']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 000000000..c9f79d289 --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 000000000..6b7262aea --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,58 @@ +var searchData= +[ + ['ondemand_191',['ondemand',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['scalar_20values_192',['Scalar values',['../group__scalar.html',1,'']]], + ['scalar_5fdocument_5fas_5fvalue_193',['SCALAR_DOCUMENT_AS_VALUE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a00d7c038f551d9527ba8897f3cee907d',1,'simdjson']]], + ['second_194',['second',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a25289df3eaabd14f029e9872a6db3dfb',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base']]], + ['set_5fmax_5fcapacity_195',['set_max_capacity',['../classsimdjson_1_1dom_1_1parser.html#a6977b4586bc601070cf100e2973a4cbc',1,'simdjson::dom::parser']]], + ['signed_5finteger_196',['signed_integer',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3faa14b6141855cd58c670ca6559c75c941',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['simdjson_197',['simdjson',['../namespacesimdjson.html',1,'']]], + ['simdjson_2eh_198',['simdjson.h',['../simdjson_8h.html',1,'']]], + ['simdjson_5ferror_199',['simdjson_error',['../structsimdjson_1_1simdjson__error.html',1,'simdjson::simdjson_error'],['../structsimdjson_1_1simdjson__error.html#af5355b65f85b897251b3665086075f39',1,'simdjson::simdjson_error::simdjson_error()']]], + ['simdjson_5fmaxsize_5fbytes_200',['SIMDJSON_MAXSIZE_BYTES',['../namespacesimdjson.html#ac66973a7111dc4aa96ba7b3434344347',1,'simdjson']]], + ['simdjson_5fpadding_201',['SIMDJSON_PADDING',['../namespacesimdjson.html#aecdd750132f0eb123a6d61113b4197bf',1,'simdjson']]], + ['simdjson_5fresult_202',['simdjson_result',['../structsimdjson_1_1simdjson__result.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aarray_20_3e_203',['simdjson_result< dom::array >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3adocument_5fstream_20_3e_204',['simdjson_result< dom::document_stream >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aelement_20_3e_205',['simdjson_result< dom::element >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aobject_20_3e_206',['simdjson_result< dom::object >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_20_3e_207',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_5fiterator_20_3e_208',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_20_3e_209',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5freference_20_3e_210',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5fstream_20_3e_211',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3afield_20_3e_212',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5fiterator_20_3e_213',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5ftype_20_3e_214',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_20_3e_215',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_5fiterator_20_3e_216',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aparser_20_3e_217',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3araw_5fjson_5fstring_20_3e_218',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3atoken_5fiterator_20_3e_219',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_20_3e_220',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_5fiterator_20_3e_221',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fversion_5fmajor_222',['SIMDJSON_VERSION_MAJOR',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97ae36fce138c6f2f7a25e9ee06e7ed37ae',1,'simdjson']]], + ['simdjson_5fversion_5fminor_223',['SIMDJSON_VERSION_MINOR',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97ab442d4c66052c2f30b72a0d6f8dc8814',1,'simdjson']]], + ['simdjson_5fversion_5frevision_224',['SIMDJSON_VERSION_REVISION',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97a5537fa0bdb6b7345ea789c51f74b10ee',1,'simdjson']]], + ['size_225',['size',['../classsimdjson_1_1dom_1_1array.html#a698f2f984d1a78a68962c06b2f047686',1,'simdjson::dom::array::size()'],['../classsimdjson_1_1dom_1_1object.html#a93ec5c36aae913f266f533b2e02bc873',1,'simdjson::dom::object::size()'],['../structsimdjson_1_1padded__string.html#a07d50795f042119ab848c37cb8911db4',1,'simdjson::padded_string::size()']]], + ['size_5fin_5fbytes_226',['size_in_bytes',['../classsimdjson_1_1dom_1_1document__stream.html#a2a08525ae815167b73b6393a8999e46b',1,'simdjson::dom::document_stream::size_in_bytes()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a43723c86c43ee3533a3278b5cd2fe2d0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::size_in_bytes()']]], + ['skip_227',['skip',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ae75aa0d09a10682fd30dc4e8e25d0a73',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['skip_5fdouble_228',['skip_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ac6b75b1d1af73c9ef8958e573c367e1c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['stage1_5fmode_229',['stage1_mode',['../namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811',1,'simdjson']]], + ['start_230',['start',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a0126e4a8e02fa0a02481d3bdfd3965f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::start()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a760c4d01ad03f18e09a93387de5de60e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::start()']]], + ['start_5farray_231',['start_array',['../group__array.html#ga14e69f9c4949805695e30a576bd9c964',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5fobject_232',['start_object',['../group__object.html#ga46e677764da46ebbe4b0e4dea6672a5f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5for_5fresume_5fobject_233',['start_or_resume_object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a821e11bc3b6b3f16fa7d6b15c77c17d3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['start_5froot_234',['start_root',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#aac11a5e300a49531b3600a019cd89304',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['start_5froot_5farray_235',['start_root_array',['../group__array.html#ga334481c295286d926bb3bb912232e225',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5froot_5fobject_236',['start_root_object',['../group__object.html#gab9563a58e164e9f5f75805cffb3582ec',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_237',['started',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#aca1c364caedac11edc78c64734013ce0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['started_5farray_238',['started_array',['../group__array.html#ga136e508ce46622b86cc901490c807578',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5fobject_239',['started_object',['../group__object.html#ga192424d19b12648eea73e3d073d5fcac',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5froot_5farray_240',['started_root_array',['../group__array.html#gaa3428f6c87e63d8a2ba93a3816721066',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5froot_5fobject_241',['started_root_object',['../group__object.html#gaa0c31077aeadb6fc627d4c5750e58ecb',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['string_242',['string',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab45cffe084dd3d20d928bee85e7b0f21',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['string_5ferror_243',['STRING_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8ef9cfdd78dd92d2b304249917638d12',1,'simdjson']]], + ['success_244',['SUCCESS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa4ffc800804829a88c5b52ac3c4c6681',1,'simdjson']]], + ['supported_5fby_5fruntime_5fsystem_245',['supported_by_runtime_system',['../classsimdjson_1_1implementation.html#adf77c9bc0869eff8fd46e942c4532135',1,'simdjson::implementation']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 000000000..ab934722c --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 000000000..fbe9c2831 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['t_5fatom_5ferror_246',['T_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab6e8bfc242f7bea38657eaf61400077f',1,'simdjson']]], + ['take_5fvalue_247',['take_value',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#affadf1e1f762248d60950e333b739820',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::take_value()'],['../structsimdjson_1_1simdjson__result.html#a815368a9e09fa675d0b6672595f5ad19',1,'simdjson::simdjson_result::take_value()']]], + ['tape_20structure_20in_20simdjson_248',['Tape structure in simdjson',['../md_doc_tape.html',1,'']]], + ['tape_5ferror_249',['TAPE_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4005fbda56edc47e077e5cfd4e68cda9',1,'simdjson']]], + ['the_20basics_250',['The Basics',['../md_doc_basics.html',1,'']]], + ['the_20document_2dobject_2dmodel_20_28dom_29_20front_2dend_251',['The Document-Object-Model (DOM) front-end',['../md_doc_dom.html',1,'']]], + ['tie_252',['tie',['../classsimdjson_1_1dom_1_1element.html#a5342161b8c52c78b2f5edac10e9d05ca',1,'simdjson::dom::element::tie()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#acd950d432e76a0bc1a7f3236cc7a1894',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::tie()'],['../structsimdjson_1_1simdjson__result.html#a86dbcba063713c0e284dbde9fae17568',1,'simdjson::simdjson_result::tie()']]], + ['to_5fdebug_5fstring_253',['to_debug_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9afdfb30ac2aacabce09a5c9d7fd375a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['to_5fjson_5fstring_254',['to_json_string',['../namespacesimdjson.html#a2cda17221b852e5c398bad5bf350d270',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document &x) noexcept'],['../namespacesimdjson.html#a4c998fcc6bf2bca2196b45a5c3e1967a',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::value &x) noexcept'],['../namespacesimdjson.html#afc529e3bcacb5b3c747b525fb443771f',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::object &x) noexcept'],['../namespacesimdjson.html#a598dd79ec46726de8a6d409ba1bae034',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::array &x) noexcept']]], + ['to_5fstring_255',['to_string',['../namespacesimdjson.html#ade4516933f53705eacfaed65ed14962d',1,'simdjson']]], + ['trailing_5fcontent_256',['TRAILING_CONTENT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab70f5a6f0ac798d482e95a0fcc528676',1,'simdjson']]], + ['truncated_5fbytes_257',['truncated_bytes',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#acd3fd372dfd30fcce1d6a103c6682d0e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::truncated_bytes()'],['../classsimdjson_1_1dom_1_1document__stream.html#a6c2a07e08213dc9a51754940942f9e69',1,'simdjson::dom::document_stream::truncated_bytes()']]], + ['type_258',['type',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac39965b3006b8f19ed576ce99b7534c5',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::type()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#af3d0d03752d5e96d7ee5b83f29136b1b',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::type()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a77bdebf4d2105efdd123cbf0a4906b1e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::type()'],['../classsimdjson_1_1dom_1_1element.html#a19162bf6d94fb6c21bb2bf2e9b78ff0d',1,'simdjson::dom::element::type()']]] +]; diff --git a/search/all_13.html b/search/all_13.html new file mode 100644 index 000000000..51172c2f3 --- /dev/null +++ b/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 000000000..de7d11a52 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['unclosed_5fstring_259',['UNCLOSED_STRING',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0f9ce97e85e7607e0f4d3811b818a013',1,'simdjson']]], + ['unescape_260',['unescape',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ac69b3aef12e3490c9fbd0a580004e015',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['unescaped_5fchars_261',['UNESCAPED_CHARS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aca57917fc85c421aab3f2dd451519fa5',1,'simdjson']]], + ['unescaped_5fkey_262',['unescaped_key',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a49425afaaf0874b07c1f8e4ed1d86cf0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field']]], + ['unexpected_5ferror_263',['UNEXPECTED_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9abdd3905c91a152a01637a2946066db6b',1,'simdjson']]], + ['uninitialized_264',['UNINITIALIZED',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ac2aef8f0fc33187cc118c95fade925d2',1,'simdjson']]], + ['unsafe_5fis_5fequal_265',['unsafe_is_equal',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#affa14023a66c65f906ee3e673443d943',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(size_t length, std::string_view target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a11bccba8ede5e7dff56e2737fcb853c7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(std::string_view target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a3d8f15d3b004acd695b6fff5ba94b515',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(const char *target) const noexcept']]], + ['unsigned_5finteger_266',['unsigned_integer',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3fa7383104b83254a99f5991d0ac77a6666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['unsupported_5farchitecture_267',['UNSUPPORTED_ARCHITECTURE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4d768ac107473bceb91f8a0d1a824bc2',1,'simdjson']]], + ['utf8_5ferror_268',['UTF8_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a398a5389d6e20c39e8880b0101b66f56',1,'simdjson']]] +]; diff --git a/search/all_14.html b/search/all_14.html new file mode 100644 index 000000000..afecf5634 --- /dev/null +++ b/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 000000000..d4e34477a --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['validate_5futf8_269',['validate_utf8',['../classsimdjson_1_1implementation.html#aa3a7b818d56a54cca272191ec176f8f1',1,'simdjson::implementation::validate_utf8()'],['../namespacesimdjson.html#a04edabca6d128b8b31592e1e2e331ae0',1,'simdjson::validate_utf8(const std::string &s) noexcept'],['../namespacesimdjson.html#a28a847c4b31fc804bec2987b171dbd07',1,'simdjson::validate_utf8(const std::string_view sv) noexcept'],['../namespacesimdjson.html#a53546f3af0ed6840ffbeefcbefd305a1',1,'simdjson::validate_utf8(const char *buf, size_t len) noexcept']]], + ['value_270',['value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value'],['../structsimdjson_1_1simdjson__result.html#af7f6d5a5e979b60d5231449d53dcd9be',1,'simdjson::simdjson_result::value() &noexcept(false)'],['../structsimdjson_1_1simdjson__result.html#ae52c2cc66e62e47b05f29e342ad5078a',1,'simdjson::simdjson_result::value() &&noexcept(false)'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a78c5842bded486846c816eb01ff439fc',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value() &noexcept(false)'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a934c09eb8db55277d2d7190f1bbc1a84',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value() &&noexcept(false)'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#ad5f688629f86f80dff49cab2270b1967',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::value()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab96f6c19a1866863a110e8bcc93e0392',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a7188b9843c2b3b3050c54b52d5b6886f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value(const value_iterator &iter) noexcept'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a2049ae539dca6999cc33300d212a5014',1,'simdjson::dom::object::iterator::value()'],['../classsimdjson_1_1dom_1_1key__value__pair.html#af7e38d9eb63a40256c9f936e45edf703',1,'simdjson::dom::key_value_pair::value()']]], + ['value_5funsafe_271',['value_unsafe',['../structsimdjson_1_1simdjson__result.html#a3c25e74570144de48ef71ae490def85f',1,'simdjson::simdjson_result::value_unsafe() const &noexcept'],['../structsimdjson_1_1simdjson__result.html#a67ac8535dcf368fed604549a07e423e2',1,'simdjson::simdjson_result::value_unsafe() &&noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a92e1c9ffc7a854b4b33fa48fe2d95709',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() const &noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a5d412981bc3cee0f0bcf3bfb53ae83e1',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() &noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ad06c8e25c44d091eb3757a65ccd9f57f',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() &&noexcept']]] +]; diff --git a/search/all_15.html b/search/all_15.html new file mode 100644 index 000000000..69f382b31 --- /dev/null +++ b/search/all_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 000000000..0d2ca9ab9 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['what_272',['what',['../structsimdjson_1_1simdjson__error.html#a73b15aae33a4eef105d0735e03d83a49',1,'simdjson::simdjson_error']]] +]; diff --git a/search/all_16.html b/search/all_16.html new file mode 100644 index 000000000..b19867ad9 --- /dev/null +++ b/search/all_16.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 000000000..ea521d928 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7eparser_273',['~parser',['../classsimdjson_1_1dom_1_1parser.html#aeb48211f320af02b58dc3d0505059844',1,'simdjson::dom::parser::~parser()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a4a144d96ad06a2295137dd0e5b7dcc1d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::~parser()']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 000000000..02cfffc2e --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 000000000..02dee09bf --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['capacity_17',['capacity',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#aec2c883af898053ab8e5eca8e9e870ae',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::capacity()'],['../classsimdjson_1_1padded__string__view.html#a9d98e1984b893116d8bb7123d84d75b8',1,'simdjson::padded_string_view::capacity()'],['../classsimdjson_1_1dom_1_1parser.html#aedf495a6e090929be23473e8a29f2fe2',1,'simdjson::dom::parser::capacity()']]], + ['capacity_18',['CAPACITY',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a2d50048bbe409023df4e88f6ffe3bc71',1,'simdjson']]], + ['child_19',['child',['../group__array.html#gaba7c4e5787c7295da3a0d73b0db1c890',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['consume_20',['consume',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a96aeba1fb4eac299260937b78e346ee8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::consume()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac16e0e51de3ce97fbd3fd0b1f947d552',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::consume()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#add102ee85423a75e22e4d7ca9a3eaacd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::consume()']]], + ['count_5felements_21',['count_elements',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a9f23e6ab13ad93c43e705ce7fe6134c9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::count_elements()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab408c2ea4be8874e3514b389c70a5667',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_elements()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a481e2b0b216d29038ddca3242a7047ad',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_elements()']]], + ['count_5ffields_22',['count_fields',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a24fd6a8aa158b80d851e3a57c9fef642',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_fields()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a55f04607ee4e718294a572f9b6ad94cc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_fields()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aef6872e07743217fe2e2abe790a21d4c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::count_fields()']]], + ['cpu_20architecture_2dspecific_20implementations_23',['CPU Architecture-Specific Implementations',['../md_doc_implementation_selection.html',1,'']]], + ['current_5fdepth_24',['current_depth',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1919a4ca6418c94ed54f026fbbda6f1d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::current_depth()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bcd64ae6b4d204c4b6b2a8420e0270c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_depth()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a3bfd36dafc82c212f165b434ab5378b3',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_depth()']]], + ['current_5flocation_25',['current_location',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a55603828cddcd2b6cfec1a487f0cd137',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::current_location()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a06258e49f2dbb910beeaf6814ff7e071',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_location()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a78b9e4e22a89050c9f911f1878165e88',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_location()']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 000000000..39767b85b --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 000000000..18a5ad125 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['data_26',['data',['../structsimdjson_1_1padded__string.html#aadd3bb268cbba43012c5d17a8c1ab7ef',1,'simdjson::padded_string::data() const noexcept'],['../structsimdjson_1_1padded__string.html#aa833ecdbe40c220c5baf7a29c472c972',1,'simdjson::padded_string::data() noexcept']]], + ['default_5fmax_5fdepth_27',['DEFAULT_MAX_DEPTH',['../namespacesimdjson.html#a6df2598eb1d4e1ea669c41831cc7325d',1,'simdjson']]], + ['deprecated_20list_28',['Deprecated List',['../deprecated.html',1,'']]], + ['depth_5ferror_29',['DEPTH_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0c6b4af181d3d5f40a09182522c88681',1,'simdjson']]], + ['depth_5ft_30',['depth_t',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#af941be7ff0cfaeb30d15d2fb52e76dd1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['description_31',['description',['../classsimdjson_1_1implementation.html#a4f41daefefc573e20fccd591b158e063',1,'simdjson::implementation']]], + ['doc_32',['doc',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a4089d6265ec845fd85acd2db0973b858',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['document_33',['document',['../classsimdjson_1_1dom_1_1document.html#af34f108b46f82428bfe4ea33869358f0',1,'simdjson::dom::document::document()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a54cd729a715a09bc9e706b7640233427',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::document()'],['../classsimdjson_1_1dom_1_1document.html#a6947c9d79453071ca73d06e398bcdd2a',1,'simdjson::dom::document::document()'],['../classsimdjson_1_1dom_1_1document.html',1,'simdjson::dom::document'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['document_5fdepth_34',['DOCUMENT_DEPTH',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a18847ef30e5800f1c628a344c23ec968',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['document_5freference_35',['document_reference',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['document_5fstream_36',['document_stream',['../classsimdjson_1_1dom_1_1document__stream.html#ae6ee894790448145e11a456f12253364',1,'simdjson::dom::document_stream::document_stream() noexcept'],['../classsimdjson_1_1dom_1_1document__stream.html#a9d6bb44a7d8f818c401d65fb80f6a523',1,'simdjson::dom::document_stream::document_stream(document_stream &&other) noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#af12dc14d4d16b9f4f4602c738678cb0c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::document_stream() noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0ac2a6ad0393eb4330b440c8c09290f2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::document_stream(document_stream &&other) noexcept=default'],['../classsimdjson_1_1dom_1_1document__stream.html',1,'simdjson::dom::document_stream'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream']]], + ['dom_5fparser_5fimplementation_37',['dom_parser_implementation',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 000000000..fc40463c8 --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 000000000..a6726e152 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['element_38',['element',['../classsimdjson_1_1dom_1_1element.html#a9dbf81ad662ad32168025e8e08686935',1,'simdjson::dom::element::element()'],['../classsimdjson_1_1dom_1_1element.html',1,'simdjson::dom::element']]], + ['empty_39',['EMPTY',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7aed571b420dcdfe59742e0df97b415a',1,'simdjson']]], + ['end_40',['end',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a6ed00f1588087b2d0de926c4599366d6',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0a0d40ed80767c01232a6aacb6258b2b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7a79c0e85c9d40b53f0d4daeeb24111a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae482e8f5fa3233babbcb9ccc29db5a15',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::end()'],['../classsimdjson_1_1dom_1_1object.html#a79cf291477bcaa1bf2328411b411587d',1,'simdjson::dom::object::end()'],['../classsimdjson_1_1dom_1_1element.html#a846a790e93c9bad6c40641239bd77b28',1,'simdjson::dom::element::end()'],['../classsimdjson_1_1dom_1_1document__stream.html#adec1e168e4188bf9c90ee87adbd72850',1,'simdjson::dom::document_stream::end()'],['../classsimdjson_1_1dom_1_1array.html#a378b3312cdf6f8fe04725b617b8cfcb9',1,'simdjson::dom::array::end()']]], + ['error_41',['error',['../structsimdjson_1_1simdjson__error.html#aa8143615e5f6f02474f6ab165682ab6e',1,'simdjson::simdjson_error::error()'],['../structsimdjson_1_1simdjson__result.html#a23470fcc7f01262019e96d3f3010b4a1',1,'simdjson::simdjson_result::error()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a20a01e401b72125b9b1acef9cfb5b9ea',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::error()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a4111757108422ffaf647024319205d5c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::error()']]], + ['error_5fcode_42',['error_code',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9',1,'simdjson']]], + ['error_5fmessage_43',['error_message',['../namespacesimdjson.html#a65b00a7a7a9c8fafe9eb3b9b413a36fa',1,'simdjson::error_message(error_code error) noexcept'],['../namespacesimdjson.html#a56e8e2fa6798b9e0da80bc51ae4a5f29',1,'simdjson::error_message(int error) noexcept']]], + ['errorvalues_44',['ErrorValues',['../namespacesimdjson.html#a63b494af834917af13120dcd57719bdb',1,'simdjson']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 000000000..9dd9344b0 --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 000000000..69ce8e328 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['f_5fatom_5ferror_45',['F_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae726a74b8a99e4bf802f3078436a2394',1,'simdjson']]], + ['field_46',['field',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a9415aecf3526ad6081be495c9be61b43',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::field()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field']]], + ['field_5fkey_47',['field_key',['../group__object.html#ga9fd0d39ec786f26b7ea86f9bc8380bdd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['field_5fvalue_48',['field_value',['../group__object.html#gaaaf58bcf25e6d30a3469848d36c65a05',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['find_5ffield_49',['find_field',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab919032e611f7f4a1e8cc9eb47ad4dea',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aa25020165cc5a191026a243a10da6558',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a1588a173b15a20cacf77a24d07032d83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a4ff908713e1eb6d6294706a235be8101',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field()'],['../group__object.html#gacefcaf06811426a241ed97a6948a94ee',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field(const std::string_view key) noexcept']]], + ['find_5ffield_5fraw_50',['find_field_raw',['../group__object.html#gab66bdaf2c97d2cbd2a94a5a3e67ffabc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['find_5ffield_5funordered_51',['find_field_unordered',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa89d66d993d0bffcbb85e303ad3950c2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field_unordered()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a55d8bd31e2f5e6b10986af2f48a544fc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field_unordered()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acb1514c00a87027c5eb3c81171a3b874',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field_unordered()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a423064962ffe48495948c98afb0e556c',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field_unordered()']]], + ['find_5ffield_5funordered_5fraw_52',['find_field_unordered_raw',['../group__object.html#ga678e53c38ebaf2323550e7f29e253df9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['first_53',['first',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ae51247dce4e77f1e6067cfd4654cca30',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 000000000..f1e516d75 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 000000000..61c5a2433 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['get_54',['get',['../classsimdjson_1_1dom_1_1element.html#a3474c8fc1b1cb06625a50dcb9a2c5269',1,'simdjson::dom::element::get()'],['../structsimdjson_1_1simdjson__result.html#ab0fafc6d63a14891788a9edaedff4b05',1,'simdjson::simdjson_result::get()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a96c905c44f3c53cb6cdb23b760d323b8',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::get()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7fe39fb73b6a4d9b1c97742dc2ae7b98',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get() &noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af0af8707b5623e17c3bc9a329b7c4fa3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get(T &out) &noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8d50c7c494ab9acc4a644cc77dd058f9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get() noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a40af3c6af7d18241c1c4017df8557d86',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get(T &out) noexcept'],['../classsimdjson_1_1dom_1_1element.html#a47663724b3a6bad8666ccd24cd598bd2',1,'simdjson::dom::element::get()']]], + ['get_5factive_5fimplementation_55',['get_active_implementation',['../namespacesimdjson.html#abd8b8fd009878125822fca9a2624f6a6',1,'simdjson']]], + ['get_5farray_56',['get_array',['../classsimdjson_1_1dom_1_1element.html#a87c75accdc0b35e06f3d554561ce8cd3',1,'simdjson::dom::element::get_array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aea545f106413a9bc01cd19e6630a580d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2fdcc51cac791c3a2f4c970764bc0155',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_array()']]], + ['get_5favailable_5fimplementations_57',['get_available_implementations',['../namespacesimdjson.html#a7e4483a8ae684fdb5b2f1e7d4a8acc69',1,'simdjson']]], + ['get_5fbool_58',['get_bool',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa0e07db099e651d3e5279872683cb7dd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_bool()'],['../classsimdjson_1_1dom_1_1element.html#a548e0fc369eb455ea477e20fb0793627',1,'simdjson::dom::element::get_bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a41eaac87582a465b4c9f9834701a837d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_bool()']]], + ['get_5fc_5fstr_59',['get_c_str',['../classsimdjson_1_1dom_1_1element.html#a29c21d70352c9b8af7144fd4f38baaa6',1,'simdjson::dom::element']]], + ['get_5fdouble_60',['get_double',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9a5ebeb4a79fa1d997f9f3478370a57e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double()'],['../classsimdjson_1_1dom_1_1element.html#a3e74a8a6ef8318e2de805359126c6d7b',1,'simdjson::dom::element::get_double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9909be358c78a64bc9ab7e11e3f2a47b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ab261642a30f5e26b0769ce701cd5b9f8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_double()']]], + ['get_5fdouble_5fin_5fstring_61',['get_double_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac8b8d7d4bc7958363b7f0d380b248a4f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a85e4b5250e316cc602b1b05bd097f771',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double_in_string()']]], + ['get_5fint64_62',['get_int64',['../classsimdjson_1_1dom_1_1element.html#aa954cda836a4748ec9937291a9250604',1,'simdjson::dom::element::get_int64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab7e4b28c0d9637cf1b04554d99c0e3b3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6abc08fb48868bdc5104c885c46ced82',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a92b12b32ee177c2a818618d0595d2584',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_int64()']]], + ['get_5fint64_5fin_5fstring_63',['get_int64_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aac4a4837e66c8f1243722ab04ce45436',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a547e99f2f430ca39bf4060d090f45ff7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64_in_string() noexcept']]], + ['get_5fnumber_64',['get_number',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa89c4aceb7e052a1f7ff7e4058b651f1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2b04a9cd8c4ff9b591dc3f2db95c69cf',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number() noexcept']]], + ['get_5fnumber_5ftype_65',['get_number_type',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#abb3a7cc6f2391d26f27a28c16ca38c9c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number_type()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a8c8d29d831635c958e87de0cc2dab8b4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_number_type()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2f46079741d1ba316de32bb9765c5082',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number_type()']]], + ['get_5fobject_66',['get_object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4620d364a637031ef38661f9fb215ebc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a3bde0795cb309f3e51b8388fbafc1fe4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_object()'],['../classsimdjson_1_1dom_1_1element.html#ab4c2e35dc44664eb04038ad35efc64f9',1,'simdjson::dom::element::get_object()']]], + ['get_5fraw_5fjson_5fstring_67',['get_raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#afa3370b930da937911cf61ec9b047c56',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_raw_json_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aca8b183c4e674a5b4ade8f6d2780f815',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_raw_json_string()']]], + ['get_5fstring_68',['get_string',['../classsimdjson_1_1dom_1_1element.html#ae83652b5016ce4d4ff71f8f9bc05913e',1,'simdjson::dom::element::get_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#addfd2bc654d13906456ce44168d2ab68',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e96b60b036694be5ef43fb564ab8d1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_string()']]], + ['get_5fstring_5flength_69',['get_string_length',['../classsimdjson_1_1dom_1_1element.html#a9d92145af64401654c20d2885dd4051d',1,'simdjson::dom::element']]], + ['get_5fuint64_70',['get_uint64',['../classsimdjson_1_1dom_1_1element.html#a9e5a750a066f17d5a9a31a24980e0b1d',1,'simdjson::dom::element::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4d221850d045f1e7ada4dfaaee0e145c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a47b30548f71aca4317bdc4c6955cd719',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference::get_uint64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aff5939efdcb41c9d2b9a1997816f093f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#adaa7bb2c9b3988476f3317ddda27e22d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64()']]], + ['get_5fuint64_5fin_5fstring_71',['get_uint64_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5cb63d14a99509d751f4be45063fec95',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bc2eb9eeeb7e2e0b82c23ed4d254933',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64_in_string()']]], + ['get_5fvalue_72',['get_value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab89eda435b4a68be578fcb5c3da73980',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 000000000..8ddbf6c8e --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 000000000..ff3a5618d --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['has_5fnext_5felement_73',['has_next_element',['../group__array.html#ga31b0a8ce8734db9413cce31c4d9c8c8d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['has_5fnext_5ffield_74',['has_next_field',['../group__object.html#ga7956fe38cd8ecfbc8f709aa6f65c92b4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 000000000..83c55ae22 --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 000000000..db4952763 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,50 @@ +var searchData= +[ + ['implementation_75',['implementation',['../classsimdjson_1_1implementation.html',1,'simdjson']]], + ['implementation_2dbase_2eh_76',['implementation-base.h',['../implementation-base_8h.html',1,'']]], + ['implementation_5fsimdjson_5fresult_5fbase_77',['implementation_simdjson_result_base',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a108dd35fd49314820106a21afa0fb2ea',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base() noexcept=default'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a4f59b204f1eddcdc2b36e6df0639a516',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(error_code error) noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#af8a436d40886a295f618311d3849d7e5',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value) noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a44ff65b6194c7c1cb74180b43e438619',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value, error_code error) noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_20_3e_78',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_5fiterator_20_3e_79',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_20_3e_80',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5freference_20_3e_81',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5fstream_20_3e_82',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3afield_20_3e_83',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5fiterator_20_3e_84',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5ftype_20_3e_85',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_20_3e_86',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_5fiterator_20_3e_87',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aparser_20_3e_88',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3araw_5fjson_5fstring_20_3e_89',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3atoken_5fiterator_20_3e_90',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_20_3e_91',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_5fiterator_20_3e_92',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['incomplete_5farray_5for_5fobject_93',['INCOMPLETE_ARRAY_OR_OBJECT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab8a4df583110f900741d0b3f229f349a',1,'simdjson']]], + ['incorrect_5ftype_94',['INCORRECT_TYPE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a1de02af1d67e8350f612eee0dcf634b4',1,'simdjson']]], + ['index_5fout_5fof_5fbounds_95',['INDEX_OUT_OF_BOUNDS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a80bcf6820da38abe1a2e9abeaa0f0c49',1,'simdjson']]], + ['insufficient_5fpadding_96',['INSUFFICIENT_PADDING',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aee3335b961f2d0f732e95b359c16a69a',1,'simdjson']]], + ['invalid_5fjson_5fpointer_97',['INVALID_JSON_POINTER',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aeeaf930969566f76840224d64ee3a9a1',1,'simdjson']]], + ['invalid_5furi_5ffragment_98',['INVALID_URI_FRAGMENT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7b0467451dc0cecb41d3ea46c4a0005b',1,'simdjson']]], + ['io_5ferror_99',['IO_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9acaec8ffce84b1acf9e6833b0f930878e',1,'simdjson']]], + ['is_100',['is',['../classsimdjson_1_1dom_1_1element.html#a4c77063d766c7db197f8674407b504d7',1,'simdjson::dom::element']]], + ['is_5falive_101',['is_alive',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a3170300bc331577a1435bb238cf3faff',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['is_5farray_102',['is_array',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9b82f3273bb2f2f83b8e085b7d9c6613',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation::is_array()'],['../classsimdjson_1_1dom_1_1element.html#afaaac6e2f58128a01a25b0a5f5abb856',1,'simdjson::dom::element::is_array() const noexcept']]], + ['is_5fbool_103',['is_bool',['../classsimdjson_1_1dom_1_1element.html#afde562c5aae1b85a03ab6d4b040e7d13',1,'simdjson::dom::element']]], + ['is_5fdouble_104',['is_double',['../classsimdjson_1_1dom_1_1element.html#a0d11f69ba87f55960be6f655e4e99aba',1,'simdjson::dom::element::is_double()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a48f9e54ebd40e1c060be0a4b1d4ff823',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_double()']]], + ['is_5fempty_105',['is_empty',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ad210f9115679a625ada433add55eff51',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::is_empty()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a371cf8909f04019606063e8538fd7109',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::is_empty()']]], + ['is_5fequal_106',['is_equal',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#aa3165ea813c4c15fb9cb282e67abe6af',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::is_equal(const char *target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a0ddac0ab1c69022610d8051b989b5c95',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::is_equal(std::string_view target) const noexcept']]], + ['is_5ffree_5ffrom_5funescaped_5fquote_107',['is_free_from_unescaped_quote',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a671923a53cc070f65029698afeb9be7f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string']]], + ['is_5fint64_108',['is_int64',['../classsimdjson_1_1dom_1_1element.html#adadf66ec37675d5f3fac9816a8aacba2',1,'simdjson::dom::element::is_int64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a38d6b4b4e91f30c8def71997d23454c2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_int64()']]], + ['is_5finteger_109',['is_integer',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a5ab2c9c7d29a7a6c09f78930b0100836',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_integer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af47e11e9925fd5d3d8a43cf0f7773992',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_integer() noexcept']]], + ['is_5fnegative_110',['is_negative',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5083f65b71d7540ea785ec2b52604267',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_negative()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2701c283de019e56624e930e936e0df0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_negative()']]], + ['is_5fnull_111',['is_null',['../classsimdjson_1_1dom_1_1element.html#ae38f84f4272ae3c32b32dd6d5007ffb9',1,'simdjson::dom::element::is_null()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5ed59f01a0d4ad253f0e1c1f995ed0a7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_null()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a04f1c591d93d834377a9cb916c90e09b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_null()']]], + ['is_5fnumber_112',['is_number',['../classsimdjson_1_1dom_1_1element.html#a1e3f78b3bee5ec3f33cc4b03dcc87981',1,'simdjson::dom::element']]], + ['is_5fobject_113',['is_object',['../classsimdjson_1_1dom_1_1element.html#a08c7dcebf9e96fe5e4dd6df2959c0024',1,'simdjson::dom::element']]], + ['is_5fscalar_114',['is_scalar',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac2ea8f4340d02d9062f81419da47500b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_scalar()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8c2618e57ec26501dd93ff8fd5cc2191',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_scalar()']]], + ['is_5fstreaming_115',['is_streaming',['../namespacesimdjson.html#a6f306690d6d088d80b0cc2717040b2d0',1,'simdjson']]], + ['is_5fstring_116',['is_string',['../classsimdjson_1_1dom_1_1element.html#a65bd96042cc0f19dc3e0635937edded4',1,'simdjson::dom::element']]], + ['is_5fuint64_117',['is_uint64',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#af0e89976b80a7a7dedaf8c1a7cfd64a2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_uint64()'],['../classsimdjson_1_1dom_1_1element.html#ac5017726a573f59c3494b92bb66a3beb',1,'simdjson::dom::element::is_uint64()']]], + ['iter_118',['iter',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a969e1000319391cd2bee3aed88481500',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::iter()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a2d84851f9e4fc07b3e518ea957e2d9b6',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::iter()']]], + ['iterate_119',['iterate',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a0da712132ca4180a84907f2ca4ffbc5b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['iterate_5fmany_120',['iterate_many',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a8f2dee06242abddb70eb7c07b50cef0b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::iterate_many()'],['../md_doc_iterate_many.html',1,'(Global Namespace)']]], + ['iterator_121',['iterator',['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a6c3a5002801ab80b1c59422d7f3400d3',1,'simdjson::dom::document_stream::iterator::iterator()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a3b0ac5e3e64e53167a011afdd0b77345',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::iterator()'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html',1,'simdjson::dom::array::iterator'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html',1,'simdjson::dom::document_stream::iterator'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html',1,'simdjson::dom::object::iterator'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 000000000..1e263c134 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 000000000..3be549ce7 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['json_5ftype_122',['json_type',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 000000000..3a6cac108 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 000000000..aefe151c1 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['key_123',['key',['../classsimdjson_1_1dom_1_1key__value__pair.html#a58c41d937401cfe88ceb6e71d7dbeb45',1,'simdjson::dom::key_value_pair::key()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a951609ca7a164b499ff19adbe2de7983',1,'simdjson::dom::object::iterator::key()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a4f49d8e89feb3ca69cf85ce2aea80c0f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::key()']]], + ['key_5fc_5fstr_124',['key_c_str',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a54a99dcf9c422d5c24f3c570b6d9b6e4',1,'simdjson::dom::object::iterator']]], + ['key_5fequals_125',['key_equals',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a4807eeb1ed5f596b587d0b61dfb550e7',1,'simdjson::dom::object::iterator']]], + ['key_5fequals_5fcase_5finsensitive_126',['key_equals_case_insensitive',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a6d335de77b8c5b731566e48f6cacd95d',1,'simdjson::dom::object::iterator']]], + ['key_5flength_127',['key_length',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a5ad1b60fd5df56d9fdb8bce1e08de88f',1,'simdjson::dom::object::iterator']]], + ['key_5fvalue_5fpair_128',['key_value_pair',['../classsimdjson_1_1dom_1_1key__value__pair.html',1,'simdjson::dom']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 000000000..130deb4ed --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 000000000..3217e80f0 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['len_129',['len',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a132a95e1147b80c2533d1632185a6a09',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['length_130',['length',['../structsimdjson_1_1padded__string.html#a863fded7b347718299190ad3f501d38c',1,'simdjson::padded_string']]], + ['load_131',['load',['../classsimdjson_1_1dom_1_1parser.html#ab3e5bbb1974a1932aead90ad63883a23',1,'simdjson::dom::parser::load()'],['../structsimdjson_1_1padded__string.html#aaf017ffe731c738da5eb31c63b987d3a',1,'simdjson::padded_string::load()']]], + ['load_5fmany_132',['load_many',['../classsimdjson_1_1dom_1_1parser.html#a5300851ba21d0a0273a11510fd1c378a',1,'simdjson::dom::parser']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 000000000..3dd5af06d --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 000000000..028b96be8 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['max_5fcapacity_133',['max_capacity',['../classsimdjson_1_1dom_1_1parser.html#a8bfde4193783adef9c5f12dfc4da3bc0',1,'simdjson::dom::parser::max_capacity()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a006ad62e81d1ffa0fa898b586095208b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::max_capacity()']]], + ['max_5fdepth_134',['max_depth',['../classsimdjson_1_1dom_1_1parser.html#a209d15b8f87ad69f5fbaccdd5b6b5441',1,'simdjson::dom::parser::max_depth()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a9dd8dfaa40f0faec56e31f976e4c2c94',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::max_depth()']]], + ['memalloc_135',['MEMALLOC',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa0e71422c8ae80ebaa11d8d74d64737f',1,'simdjson']]], + ['minify_136',['minify',['../namespacesimdjson.html#aeb4ef5cab43d52da3fdd99cb689aff2c',1,'simdjson::minify(T x)'],['../namespacesimdjson.html#a94bb4244756d764cf0ed7de180ae6520',1,'simdjson::minify(const char *buf, size_t len, char *dst, size_t &dst_len) noexcept']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 000000000..af7f2f0f5 --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 000000000..f7a3f35bb --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['n_5fatom_5ferror_137',['N_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4e161f7bd0b3ca10f41a220a75de8cde',1,'simdjson']]], + ['name_138',['name',['../classsimdjson_1_1implementation.html#a404c32ec6187ac0fb5b2ec6b5aea4abd',1,'simdjson::implementation']]], + ['no_5fsuch_5ffield_139',['NO_SUCH_FIELD',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4a2c71f8eca438b3f0553a2811bdab9a',1,'simdjson']]], + ['null_140',['null',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a37a6259cc0c1dae299a7866489dff0bd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['number_141',['number',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab1bc248a7ff2b2e95569f56de68615df',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['number_5ferror_142',['NUMBER_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9adfcabbbd1ddb0843a0f320e062866ae8',1,'simdjson']]], + ['number_5fof_5fslots_143',['number_of_slots',['../classsimdjson_1_1dom_1_1array.html#a26e66312190e016c22093292974490ff',1,'simdjson::dom::array']]], + ['number_5fout_5fof_5frange_144',['NUMBER_OUT_OF_RANGE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8c779dcc8fb73a4eb8891af3ef65eebb',1,'simdjson']]], + ['number_5ftype_145',['number_type',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 000000000..e25df423a --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 000000000..d90b82508 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['object_146',['object',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330aa8cfde6331bd59eb2ac96f8911c4b666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object()'],['../classsimdjson_1_1dom_1_1object.html#ae2e1a8cbaab9d352495d1dc993407be3',1,'simdjson::dom::object::object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a034b27d7ff75832a574c2069af267111',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::object()'],['../classsimdjson_1_1dom_1_1object.html',1,'simdjson::dom::object'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object']]], + ['object_20iteration_147',['Object iteration',['../group__object.html',1,'']]], + ['object_5fiterator_148',['object_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a9fce67dabeb5dcccd16fa531febec666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator::object_iterator()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator']]], + ['open_5fcontainer_149',['open_container',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['open_5fcontainers_150',['open_containers',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9c67c6c782f1296319a58ec1586f2329',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['operator_20array_151',['operator array',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a93756146a65e835b9358cc652dc53396',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator array()'],['../classsimdjson_1_1dom_1_1element.html#a71d6bfa627dd66e202f8b402f91a44ac',1,'simdjson::dom::element::operator array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a08307c0a5552cf8cb06613ed1de48eac',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator array()']]], + ['operator_20bool_152',['operator bool',['../classsimdjson_1_1dom_1_1element.html#ab036e52a73d5bd046e1f2650a31dab30',1,'simdjson::dom::element::operator bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7df7ba140c9d6398fef2c6963da82230',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#af7b51d9048d388235f3936c8fa30a2f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator bool()']]], + ['operator_20const_20char_20_2a_153',['operator const char *',['../classsimdjson_1_1dom_1_1element.html#a8f9569b40dd2b23aab9fbf2229749589',1,'simdjson::dom::element']]], + ['operator_20double_154',['operator double',['../classsimdjson_1_1dom_1_1element.html#a743b5f1ef4202d8fb8fb317e612385f3',1,'simdjson::dom::element::operator double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae052e098bfbfde398845060a8d4f572f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a53f99cedf58e62c1382a4d5a585e05a0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator double()']]], + ['operator_20int64_5ft_155',['operator int64_t',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5d50aa0d396fc49855d3c0c571b07a25',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator int64_t()'],['../classsimdjson_1_1dom_1_1element.html#afb98fdfcb6ddf19071cd2300613218d3',1,'simdjson::dom::element::operator int64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a30f182e71d3c13d2656ba5983862be57',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator int64_t()']]], + ['operator_20object_156',['operator object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6cd27fe6dc9062b5380db757d49c3f7b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator object()'],['../classsimdjson_1_1dom_1_1element.html#a23f4d8c38309b0184e658d8a9697a177',1,'simdjson::dom::element::operator object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a89519c599fd938a6a750262111fc5757',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator object()']]], + ['operator_20padded_5fstring_5fview_157',['operator padded_string_view',['../structsimdjson_1_1padded__string.html#a0e5b8e8917478af4e82e023c2efa40e9',1,'simdjson::padded_string']]], + ['operator_20raw_5fjson_5fstring_158',['operator raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a78411bf36298e3468ac83f3562b75d83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator raw_json_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a85d69a32b4b95f353abe6214ecc98619',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator raw_json_string()']]], + ['operator_20t_26_26_159',['operator T&&',['../structsimdjson_1_1simdjson__result.html#afcce23c64894ec135fe8c2d255d2121b',1,'simdjson::simdjson_result::operator T&&()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a11133790f4386ea4d11567a3a0806096',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::operator T&&()']]], + ['operator_20uint64_5ft_160',['operator uint64_t',['../classsimdjson_1_1dom_1_1element.html#ae3c0226046e29cfb0e868c5251a87e53',1,'simdjson::dom::element::operator uint64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a847db7139319155ef5fa2d4af7063163',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator uint64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#afb7be23d4f1006d5eae234d8c8c8d286',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator uint64_t()']]], + ['operator_20value_161',['operator value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ad12185e1993ebcad73eb5ce82f5de8f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['operator_21_3d_162',['operator!=',['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a56c69d73c7e424e008a28771661ab218',1,'simdjson::dom::document_stream::iterator::operator!=()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a05396b8e8322363b523b3bf9730a31f1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator!=()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#abbca17b48bd6c2b045b659076f1f64ce',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator!=()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a1da5ce328cc2609432be961736c6e810',1,'simdjson::dom::object::iterator::operator!=()'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a2680a46eeece638bc352bcf6a169bcf6',1,'simdjson::dom::array::iterator::operator!=(const iterator &other) const noexcept']]], + ['operator_2a_163',['operator*',['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a90254656d4e7a8826246d1f931647eff',1,'simdjson::dom::array::iterator::operator*()'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a09b193fe348fa8a267b96edd96f7515e',1,'simdjson::dom::document_stream::iterator::operator*()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a688f6c7f451602bb3385a93252c0828a',1,'simdjson::dom::object::iterator::operator*()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a1577fb5a95f92a4a1aaa8eee6440d572',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator*()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a5fe3ce985cc1921d5917667d6b25841b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator*() noexcept']]], + ['operator_2b_2b_164',['operator++',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a03e0c8d93b86a18b10370d51b99548ef',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator++()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a55e0ae33e5e5835c841fd082edab5937',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator++()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a83b3c467632c017400f95ff05d2367b3',1,'simdjson::dom::object::iterator::operator++(int) noexcept'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#aa26738ad08b7de3be4621a75863118ab',1,'simdjson::dom::object::iterator::operator++() noexcept'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a46454681bd5e3a938c04eb89210e7966',1,'simdjson::dom::array::iterator::operator++(int) noexcept'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a6ec91111a2bcc9e378d30b47b613fac5',1,'simdjson::dom::array::iterator::operator++() noexcept'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a7b05ed75aa2b2a6d3a17204b9863956a',1,'simdjson::dom::document_stream::iterator::operator++()']]], + ['operator_3c_3c_165',['operator<<',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a386f80798c223c5fdbfc4dd9066a6b99',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson_result< json_type > &type) noexcept(false)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ab10943c6107de5337f376a6939f817af',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, json_type type) noexcept'],['../namespacesimdjson.html#a43514fe76c3095e45f30a050a9551d27',1,'simdjson::operator<<()'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac3a4f6af474f2b5f6d749f7452bb5477',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a24f9bbfe8b5a3017b4dd4b72dbccec4d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a6f753d5e1bc479321c51b54392a96a65',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document &value)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ae52a82c2f754a47eb9dac12223b3311d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value)'],['../namespacesimdjson.html#a537445bb236ae76d2b5559b1851b7108',1,'simdjson::operator<<(std::ostream &out, const padded_string &s)'],['../namespacesimdjson.html#a39bbbf605c0068e4a65c2d8885727fc9',1,'simdjson::operator<<(std::ostream &out, simdjson_result< padded_string > &s) noexcept(false)'],['../namespacesimdjson.html#a61a74357c3e9313ad84c5f1243fdf581',1,'simdjson::operator<<(std::ostream &out, simdjson_result< padded_string_view > &s) noexcept(false)']]], + ['operator_3d_166',['operator=',['../structsimdjson_1_1padded__string.html#aa43b3a8e0df4edcf960f04441dd9b930',1,'simdjson::padded_string::operator=()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ac3c10596a0934f4f5375b986a35f90db',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::operator=()'],['../classsimdjson_1_1dom_1_1parser.html#af5b61dda345cef1feba7c4529dfe0259',1,'simdjson::dom::parser::operator=()'],['../classsimdjson_1_1dom_1_1document__stream.html#a162d002972b41bbb7d8e4021341e15ba',1,'simdjson::dom::document_stream::operator=()'],['../classsimdjson_1_1dom_1_1document.html#a336814aa587d9ca605e1548b22b2b80c',1,'simdjson::dom::document::operator=()']]], + ['operator_3d_3d_167',['operator==',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#aab771b17058b0c93bdd0a8679c2c4d84',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator==()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a20cd55e63cf5bdc1561f771b4db1ac1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator==()']]], + ['operator_5b_5d_168',['operator[]',['../classsimdjson_1_1dom_1_1object.html#a2691ceae488be203aac2d5ef5b67347f',1,'simdjson::dom::object::operator[](const char *key) const noexcept'],['../classsimdjson_1_1dom_1_1object.html#acc66a2f2eb74fbe359d4064531764f50',1,'simdjson::dom::object::operator[](std::string_view key) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#a367d22eeabc1881a8eb18bae2f2ba3b8',1,'simdjson::dom::element::operator[](const char *key) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#aca693f57d73a5ce95d1f7bedf67289b7',1,'simdjson::dom::element::operator[](std::string_view key) const noexcept']]], + ['out_5fof_5fbounds_169',['OUT_OF_BOUNDS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a3f94172e04ae52a978ea62157140b0de',1,'simdjson']]], + ['out_5fof_5forder_5fiteration_170',['OUT_OF_ORDER_ITERATION',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a351bcafefbbc80a6dadc1ea6c27a35e6',1,'simdjson']]], + ['string_5fview_171',['string_view',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e5f2ff46639e6c1cffb73d4e071e491',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::string_view()'],['../classsimdjson_1_1dom_1_1element.html#a83adcf723abff34d7c1e8ec0e69d967b',1,'simdjson::dom::element::string_view()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a30e8df60ace82837a17e52d5e457ac52',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::string_view()'],['../structsimdjson_1_1padded__string.html#a4bf80c11155b8067a87bd76762bee23b',1,'simdjson::padded_string::string_view()']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 000000000..b23da6ce4 --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 000000000..2e5aafee7 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['padded_5fstring_172',['padded_string',['../structsimdjson_1_1padded__string.html#a8e10a3a5a46a4d58459b052975b0bf66',1,'simdjson::padded_string::padded_string() noexcept'],['../structsimdjson_1_1padded__string.html#ac06ec74c78934565cdf50df163d35476',1,'simdjson::padded_string::padded_string(size_t length) noexcept'],['../structsimdjson_1_1padded__string.html#a1b15f9345c0215e7548df1aa0105de98',1,'simdjson::padded_string::padded_string(const char *data, size_t length) noexcept'],['../structsimdjson_1_1padded__string.html#a44fb0f219f05528e606f79dab7c32482',1,'simdjson::padded_string::padded_string(const std::string &str_) noexcept'],['../structsimdjson_1_1padded__string.html#a6199f5bf259fcac114addeef569cf5a5',1,'simdjson::padded_string::padded_string(std::string_view sv_) noexcept'],['../structsimdjson_1_1padded__string.html#a952eaf7ff8ddf252d9c00a693978a4da',1,'simdjson::padded_string::padded_string(padded_string &&o) noexcept'],['../structsimdjson_1_1padded__string.html',1,'simdjson::padded_string']]], + ['padded_5fstring_5fview_173',['padded_string_view',['../classsimdjson_1_1padded__string__view.html#a12b33830793e7ab1953b961088a83c3d',1,'simdjson::padded_string_view::padded_string_view(std::string_view s, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html#aae57856a217294ac218b6372a5e37d9a',1,'simdjson::padded_string_view::padded_string_view(const std::string &s) noexcept'],['../classsimdjson_1_1padded__string__view.html#aa338ad56304bc79e6ca1fab64af41de0',1,'simdjson::padded_string_view::padded_string_view() noexcept=default'],['../classsimdjson_1_1padded__string__view.html#a47ac0063f7dd0ffd832c5e4439f2de30',1,'simdjson::padded_string_view::padded_string_view(const char *s, size_t len, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html#a184b54acd28046a9c4f2a6cfa5419779',1,'simdjson::padded_string_view::padded_string_view(const uint8_t *s, size_t len, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html',1,'simdjson::padded_string_view']]], + ['padding_174',['padding',['../classsimdjson_1_1padded__string__view.html#a934e7272d22d6024383eafe07b06773c',1,'simdjson::padded_string_view']]], + ['parse_175',['parse',['../classsimdjson_1_1dom_1_1parser.html#a16c7d1e28125ef7d5703244483f70984',1,'simdjson::dom::parser']]], + ['parse_5finto_5fdocument_176',['parse_into_document',['../classsimdjson_1_1dom_1_1parser.html#a1afc4d3b429363b503a5605d66081e30',1,'simdjson::dom::parser']]], + ['parse_5fmany_177',['parse_many',['../md_doc_parse_many.html',1,'(Global Namespace)'],['../classsimdjson_1_1dom_1_1parser.html#afb18710d2e2ef0fd40dda4887282bdb2',1,'simdjson::dom::parser::parse_many()']]], + ['parsedjson_178',['ParsedJson',['../namespacesimdjson.html#a9245ff68919610377256bb9b21070e2a',1,'simdjson']]], + ['parser_179',['parser',['../classsimdjson_1_1dom_1_1parser.html#a09370efac9e1b7d9b4a8349332e026c3',1,'simdjson::dom::parser::parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept'],['../classsimdjson_1_1dom_1_1parser.html#a3f3c80565fe63857e2901c48e7bed64d',1,'simdjson::dom::parser::parser(parser &&other) noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a76abd4d78f0c26d80d3bf436ce212e00',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::parser()'],['../classsimdjson_1_1dom_1_1parser.html',1,'simdjson::dom::parser'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['parser_5fin_5fuse_180',['PARSER_IN_USE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae9067bb5cb6283141b1c66466005ac0d',1,'simdjson']]], + ['payload_181',['payload',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa17e81138859bcef934d9502a9852049',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['performance_20notes_182',['Performance Notes',['../md_doc_performance.html',1,'']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 000000000..af8159ee6 --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 000000000..f3fee03ac --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['array_274',['array',['../classsimdjson_1_1dom_1_1array.html',1,'simdjson::dom::array'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['array_5fiterator_275',['array_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 000000000..576e91689 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 000000000..a3c40ce6d --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['document_276',['document',['../classsimdjson_1_1dom_1_1document.html',1,'simdjson::dom::document'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['document_5freference_277',['document_reference',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['document_5fstream_278',['document_stream',['../classsimdjson_1_1dom_1_1document__stream.html',1,'simdjson::dom::document_stream'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream']]], + ['dom_5fparser_5fimplementation_279',['dom_parser_implementation',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 000000000..956405e5a --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 000000000..a5b48e02d --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['element_280',['element',['../classsimdjson_1_1dom_1_1element.html',1,'simdjson::dom']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 000000000..d33343bc1 --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 000000000..f89e52801 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['field_281',['field',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 000000000..8430b07fe --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 000000000..171edb6d8 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['implementation_282',['implementation',['../classsimdjson_1_1implementation.html',1,'simdjson']]], + ['implementation_5fsimdjson_5fresult_5fbase_283',['implementation_simdjson_result_base',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_20_3e_284',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_5fiterator_20_3e_285',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_20_3e_286',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5freference_20_3e_287',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5fstream_20_3e_288',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3afield_20_3e_289',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5fiterator_20_3e_290',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5ftype_20_3e_291',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_20_3e_292',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_5fiterator_20_3e_293',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aparser_20_3e_294',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3araw_5fjson_5fstring_20_3e_295',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3atoken_5fiterator_20_3e_296',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_20_3e_297',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['implementation_5fsimdjson_5fresult_5fbase_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_5fiterator_20_3e_298',['implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['iterator_299',['iterator',['../classsimdjson_1_1dom_1_1array_1_1iterator.html',1,'simdjson::dom::array::iterator'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html',1,'simdjson::dom::document_stream::iterator'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html',1,'simdjson::dom::object::iterator'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 000000000..c2f1b767b --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 000000000..3186079d2 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key_5fvalue_5fpair_300',['key_value_pair',['../classsimdjson_1_1dom_1_1key__value__pair.html',1,'simdjson::dom']]] +]; diff --git a/search/classes_6.html b/search/classes_6.html new file mode 100644 index 000000000..e39847ce8 --- /dev/null +++ b/search/classes_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 000000000..37ad4f5ed --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['number_301',['number',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/classes_7.html b/search/classes_7.html new file mode 100644 index 000000000..a2c4d1a39 --- /dev/null +++ b/search/classes_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 000000000..723363dff --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['object_302',['object',['../classsimdjson_1_1dom_1_1object.html',1,'simdjson::dom::object'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object']]], + ['object_5fiterator_303',['object_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['open_5fcontainer_304',['open_container',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]] +]; diff --git a/search/classes_8.html b/search/classes_8.html new file mode 100644 index 000000000..17003e480 --- /dev/null +++ b/search/classes_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 000000000..562d89f85 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['padded_5fstring_305',['padded_string',['../structsimdjson_1_1padded__string.html',1,'simdjson']]], + ['padded_5fstring_5fview_306',['padded_string_view',['../classsimdjson_1_1padded__string__view.html',1,'simdjson']]], + ['parser_307',['parser',['../classsimdjson_1_1dom_1_1parser.html',1,'simdjson::dom::parser'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]] +]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 000000000..b8afa8cba --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 000000000..8ed6227e9 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['raw_5fjson_5fstring_308',['raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/classes_a.html b/search/classes_a.html new file mode 100644 index 000000000..6788af270 --- /dev/null +++ b/search/classes_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 000000000..971215976 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['simdjson_5ferror_309',['simdjson_error',['../structsimdjson_1_1simdjson__error.html',1,'simdjson']]], + ['simdjson_5fresult_310',['simdjson_result',['../structsimdjson_1_1simdjson__result.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aarray_20_3e_311',['simdjson_result< dom::array >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3adocument_5fstream_20_3e_312',['simdjson_result< dom::document_stream >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aelement_20_3e_313',['simdjson_result< dom::element >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20dom_3a_3aobject_20_3e_314',['simdjson_result< dom::object >',['../structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_20_3e_315',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aarray_5fiterator_20_3e_316',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_20_3e_317',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5freference_20_3e_318',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3adocument_5fstream_20_3e_319',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3afield_20_3e_320',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5fiterator_20_3e_321',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3ajson_5ftype_20_3e_322',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_20_3e_323',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aobject_5fiterator_20_3e_324',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3aparser_20_3e_325',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3araw_5fjson_5fstring_20_3e_326',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3atoken_5fiterator_20_3e_327',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_20_3e_328',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html',1,'simdjson']]], + ['simdjson_5fresult_3c_20simdjson_5fimplementation_3a_3aondemand_3a_3avalue_5fiterator_20_3e_329',['simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html',1,'simdjson']]] +]; diff --git a/search/classes_b.html b/search/classes_b.html new file mode 100644 index 000000000..3fcb49858 --- /dev/null +++ b/search/classes_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 000000000..24e64140c --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value_330',['value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 000000000..a933eea1a --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 000000000..141fff57b --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 000000000..76cc33015 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['error_5fcode_514',['error_code',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9',1,'simdjson']]] +]; diff --git a/search/enums_1.html b/search/enums_1.html new file mode 100644 index 000000000..d29f3b16d --- /dev/null +++ b/search/enums_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 000000000..663772f38 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['json_5ftype_515',['json_type',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/enums_2.html b/search/enums_2.html new file mode 100644 index 000000000..59aadf2cb --- /dev/null +++ b/search/enums_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 000000000..29107b80b --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['number_5ftype_516',['number_type',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/enums_3.html b/search/enums_3.html new file mode 100644 index 000000000..87c174430 --- /dev/null +++ b/search/enums_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 000000000..23a7c2a9a --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['stage1_5fmode_517',['stage1_mode',['../namespacesimdjson.html#ae6ec9f0ce23fc51d87116b64fdbeb811',1,'simdjson']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 000000000..0d131d95b --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 000000000..e4838ccf3 --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['array_518',['array',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330af1f713c9e000f5d3f280adbd124df4f5',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html new file mode 100644 index 000000000..cd9187ab3 --- /dev/null +++ b/search/enumvalues_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 000000000..7bc672b08 --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['boolean_519',['boolean',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a84e2c64f38f78ba3ea5c905ab5a2da27',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/enumvalues_2.html b/search/enumvalues_2.html new file mode 100644 index 000000000..2b95d9204 --- /dev/null +++ b/search/enumvalues_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 000000000..10a23a66f --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['capacity_520',['CAPACITY',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a2d50048bbe409023df4e88f6ffe3bc71',1,'simdjson']]] +]; diff --git a/search/enumvalues_3.html b/search/enumvalues_3.html new file mode 100644 index 000000000..bc0ac8a97 --- /dev/null +++ b/search/enumvalues_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 000000000..bf9d75f60 --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['depth_5ferror_521',['DEPTH_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0c6b4af181d3d5f40a09182522c88681',1,'simdjson']]] +]; diff --git a/search/enumvalues_4.html b/search/enumvalues_4.html new file mode 100644 index 000000000..ef94dd8d7 --- /dev/null +++ b/search/enumvalues_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 000000000..c19a89733 --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['empty_522',['EMPTY',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7aed571b420dcdfe59742e0df97b415a',1,'simdjson']]] +]; diff --git a/search/enumvalues_5.html b/search/enumvalues_5.html new file mode 100644 index 000000000..1c2e2f33d --- /dev/null +++ b/search/enumvalues_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_5.js b/search/enumvalues_5.js new file mode 100644 index 000000000..76da5af03 --- /dev/null +++ b/search/enumvalues_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['f_5fatom_5ferror_523',['F_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae726a74b8a99e4bf802f3078436a2394',1,'simdjson']]] +]; diff --git a/search/enumvalues_6.html b/search/enumvalues_6.html new file mode 100644 index 000000000..f985df91d --- /dev/null +++ b/search/enumvalues_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_6.js b/search/enumvalues_6.js new file mode 100644 index 000000000..e7384b4f5 --- /dev/null +++ b/search/enumvalues_6.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['incomplete_5farray_5for_5fobject_524',['INCOMPLETE_ARRAY_OR_OBJECT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab8a4df583110f900741d0b3f229f349a',1,'simdjson']]], + ['incorrect_5ftype_525',['INCORRECT_TYPE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a1de02af1d67e8350f612eee0dcf634b4',1,'simdjson']]], + ['index_5fout_5fof_5fbounds_526',['INDEX_OUT_OF_BOUNDS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a80bcf6820da38abe1a2e9abeaa0f0c49',1,'simdjson']]], + ['insufficient_5fpadding_527',['INSUFFICIENT_PADDING',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aee3335b961f2d0f732e95b359c16a69a',1,'simdjson']]], + ['invalid_5fjson_5fpointer_528',['INVALID_JSON_POINTER',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aeeaf930969566f76840224d64ee3a9a1',1,'simdjson']]], + ['invalid_5furi_5ffragment_529',['INVALID_URI_FRAGMENT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a7b0467451dc0cecb41d3ea46c4a0005b',1,'simdjson']]], + ['io_5ferror_530',['IO_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9acaec8ffce84b1acf9e6833b0f930878e',1,'simdjson']]] +]; diff --git a/search/enumvalues_7.html b/search/enumvalues_7.html new file mode 100644 index 000000000..7fdf663dd --- /dev/null +++ b/search/enumvalues_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_7.js b/search/enumvalues_7.js new file mode 100644 index 000000000..6a61743d8 --- /dev/null +++ b/search/enumvalues_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['memalloc_531',['MEMALLOC',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa0e71422c8ae80ebaa11d8d74d64737f',1,'simdjson']]] +]; diff --git a/search/enumvalues_8.html b/search/enumvalues_8.html new file mode 100644 index 000000000..674ccda69 --- /dev/null +++ b/search/enumvalues_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_8.js b/search/enumvalues_8.js new file mode 100644 index 000000000..2634c8da6 --- /dev/null +++ b/search/enumvalues_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['n_5fatom_5ferror_532',['N_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4e161f7bd0b3ca10f41a220a75de8cde',1,'simdjson']]], + ['no_5fsuch_5ffield_533',['NO_SUCH_FIELD',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4a2c71f8eca438b3f0553a2811bdab9a',1,'simdjson']]], + ['null_534',['null',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330a37a6259cc0c1dae299a7866489dff0bd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['number_535',['number',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab1bc248a7ff2b2e95569f56de68615df',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['number_5ferror_536',['NUMBER_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9adfcabbbd1ddb0843a0f320e062866ae8',1,'simdjson']]], + ['number_5fout_5fof_5frange_537',['NUMBER_OUT_OF_RANGE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8c779dcc8fb73a4eb8891af3ef65eebb',1,'simdjson']]] +]; diff --git a/search/enumvalues_9.html b/search/enumvalues_9.html new file mode 100644 index 000000000..60f15ee38 --- /dev/null +++ b/search/enumvalues_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_9.js b/search/enumvalues_9.js new file mode 100644 index 000000000..bd6c3ba9a --- /dev/null +++ b/search/enumvalues_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['object_538',['object',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330aa8cfde6331bd59eb2ac96f8911c4b666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['out_5fof_5fbounds_539',['OUT_OF_BOUNDS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a3f94172e04ae52a978ea62157140b0de',1,'simdjson']]], + ['out_5fof_5forder_5fiteration_540',['OUT_OF_ORDER_ITERATION',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a351bcafefbbc80a6dadc1ea6c27a35e6',1,'simdjson']]] +]; diff --git a/search/enumvalues_a.html b/search/enumvalues_a.html new file mode 100644 index 000000000..ce1064c72 --- /dev/null +++ b/search/enumvalues_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_a.js b/search/enumvalues_a.js new file mode 100644 index 000000000..1729dcdcb --- /dev/null +++ b/search/enumvalues_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parser_5fin_5fuse_541',['PARSER_IN_USE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ae9067bb5cb6283141b1c66466005ac0d',1,'simdjson']]] +]; diff --git a/search/enumvalues_b.html b/search/enumvalues_b.html new file mode 100644 index 000000000..ec768e7ff --- /dev/null +++ b/search/enumvalues_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_b.js b/search/enumvalues_b.js new file mode 100644 index 000000000..b18182cb6 --- /dev/null +++ b/search/enumvalues_b.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['scalar_5fdocument_5fas_5fvalue_542',['SCALAR_DOCUMENT_AS_VALUE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a00d7c038f551d9527ba8897f3cee907d',1,'simdjson']]], + ['signed_5finteger_543',['signed_integer',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3faa14b6141855cd58c670ca6559c75c941',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['simdjson_5fversion_5fmajor_544',['SIMDJSON_VERSION_MAJOR',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97ae36fce138c6f2f7a25e9ee06e7ed37ae',1,'simdjson']]], + ['simdjson_5fversion_5fminor_545',['SIMDJSON_VERSION_MINOR',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97ab442d4c66052c2f30b72a0d6f8dc8814',1,'simdjson']]], + ['simdjson_5fversion_5frevision_546',['SIMDJSON_VERSION_REVISION',['../namespacesimdjson.html#a44beb117a12abd0d8d18589dbc3dbe97a5537fa0bdb6b7345ea789c51f74b10ee',1,'simdjson']]], + ['string_547',['string',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac915f0c06e5ab0363e09593bba651330ab45cffe084dd3d20d928bee85e7b0f21',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['string_5ferror_548',['STRING_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a8ef9cfdd78dd92d2b304249917638d12',1,'simdjson']]], + ['success_549',['SUCCESS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aa4ffc800804829a88c5b52ac3c4c6681',1,'simdjson']]] +]; diff --git a/search/enumvalues_c.html b/search/enumvalues_c.html new file mode 100644 index 000000000..bdb4e1315 --- /dev/null +++ b/search/enumvalues_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_c.js b/search/enumvalues_c.js new file mode 100644 index 000000000..3c99fa839 --- /dev/null +++ b/search/enumvalues_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['t_5fatom_5ferror_550',['T_ATOM_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab6e8bfc242f7bea38657eaf61400077f',1,'simdjson']]], + ['tape_5ferror_551',['TAPE_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4005fbda56edc47e077e5cfd4e68cda9',1,'simdjson']]], + ['trailing_5fcontent_552',['TRAILING_CONTENT',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ab70f5a6f0ac798d482e95a0fcc528676',1,'simdjson']]] +]; diff --git a/search/enumvalues_d.html b/search/enumvalues_d.html new file mode 100644 index 000000000..47a761596 --- /dev/null +++ b/search/enumvalues_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_d.js b/search/enumvalues_d.js new file mode 100644 index 000000000..b245de3ee --- /dev/null +++ b/search/enumvalues_d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unclosed_5fstring_553',['UNCLOSED_STRING',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a0f9ce97e85e7607e0f4d3811b818a013',1,'simdjson']]], + ['unescaped_5fchars_554',['UNESCAPED_CHARS',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9aca57917fc85c421aab3f2dd451519fa5',1,'simdjson']]], + ['unexpected_5ferror_555',['UNEXPECTED_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9abdd3905c91a152a01637a2946066db6b',1,'simdjson']]], + ['uninitialized_556',['UNINITIALIZED',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9ac2aef8f0fc33187cc118c95fade925d2',1,'simdjson']]], + ['unsigned_5finteger_557',['unsigned_integer',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a5a5f83e81a35457b070256b78e16bf3fa7383104b83254a99f5991d0ac77a6666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]], + ['unsupported_5farchitecture_558',['UNSUPPORTED_ARCHITECTURE',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a4d768ac107473bceb91f8a0d1a824bc2',1,'simdjson']]], + ['utf8_5ferror_559',['UTF8_ERROR',['../namespacesimdjson.html#a7b735a3a50ba79e3f7f14df5f77d8da9a398a5389d6e20c39e8880b0101b66f56',1,'simdjson']]] +]; diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 000000000..9498842a6 --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 000000000..71551e507 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['implementation_2dbase_2eh_333',['implementation-base.h',['../implementation-base_8h.html',1,'']]] +]; diff --git a/search/files_1.html b/search/files_1.html new file mode 100644 index 000000000..7050ef48a --- /dev/null +++ b/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 000000000..6deb328a0 --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['simdjson_2eh_334',['simdjson.h',['../simdjson_8h.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 000000000..eb4c5014c --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 000000000..0b41a9a88 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['allocate_335',['allocate',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ab6201f2eab41026e722a237d280b8fe1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::allocate()'],['../classsimdjson_1_1dom_1_1parser.html#af8f49755a335bc269cb02d24badfcdf9',1,'simdjson::dom::parser::allocate()']]], + ['append_5fdouble_336',['append_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ae5b327f855878cba9b026059a1fc8a1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['append_5fs64_337',['append_s64',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#adb931b17ba9d4d41dd8111ad9288256c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['append_5fu64_338',['append_u64',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa3481ec0d0726a732688b7fc64372049',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['array_339',['array',['../classsimdjson_1_1dom_1_1array.html#a8b3d6eaec52a2b44965e53d874e367e9',1,'simdjson::dom::array::array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cc89dada9999c2ecc319954cc3fc90a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a240a8118a5b6f76962425134cc284764',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::array(const value_iterator &iter) noexcept']]], + ['array_5fiterator_340',['array_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#aa330b23feb572f33d77516431572b643',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator']]], + ['as_5fdouble_341',['as_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a41dc1bfd660e0b9c86cb5a5171fd7c02',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['at_342',['at',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a1c97143f7637414d737d58daeec2eb84',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acc369e813e7cf4a97564bb0d85f76db3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a01c6bde0574654dc22ea219c3b3dbf51',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at()'],['../classsimdjson_1_1dom_1_1element.html#aeb155c47ef7bebcad79e1b7449734030',1,'simdjson::dom::element::at(size_t index) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#aa8b5798004a859bf922778226b8c1cce',1,'simdjson::dom::element::at(const std::string_view json_pointer) const noexcept'],['../classsimdjson_1_1dom_1_1array.html#a6a6373cc1542a7137b79978680a93d18',1,'simdjson::dom::array::at()']]], + ['at_5fkey_343',['at_key',['../classsimdjson_1_1dom_1_1element.html#a686a21f39c755dcbf95116757d2193bd',1,'simdjson::dom::element::at_key()'],['../classsimdjson_1_1dom_1_1object.html#a4fb3e04e0ea591132da90341bf9ed819',1,'simdjson::dom::object::at_key()']]], + ['at_5fkey_5fcase_5finsensitive_344',['at_key_case_insensitive',['../classsimdjson_1_1dom_1_1element.html#a5185447e6bf8949e7c5e9c22711e8764',1,'simdjson::dom::element::at_key_case_insensitive()'],['../classsimdjson_1_1dom_1_1object.html#ab075da9eb7678f6321cecf4cbd196039',1,'simdjson::dom::object::at_key_case_insensitive()']]], + ['at_5fpointer_345',['at_pointer',['../classsimdjson_1_1dom_1_1array.html#a8141c7d98672bc3ab69fea7b63afcfb2',1,'simdjson::dom::array::at_pointer()'],['../classsimdjson_1_1dom_1_1element.html#a3777fed88f37555f2d090aeb604a117c',1,'simdjson::dom::element::at_pointer()'],['../classsimdjson_1_1dom_1_1object.html#ace84581be0fee46d5128c49710522aba',1,'simdjson::dom::object::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a73c2fc4db0c0b4083fafe706412d3b26',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a74484485f4a3d8dce5943b0cb60ac815',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae3d80f8e7f31c319fe6ee09c0860df83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::at_pointer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aadd2f646a3231d407948bf5f3da46528',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at_pointer()']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 000000000..ef4088b89 --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 000000000..17cbbb0b0 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['begin_346',['begin',['../classsimdjson_1_1dom_1_1array.html#aebd2b7ca5e1d87476ea2cd4fc9239a74',1,'simdjson::dom::array::begin()'],['../classsimdjson_1_1dom_1_1document__stream.html#a9a51df3d81c9b7849bbbc8ae42096b76',1,'simdjson::dom::document_stream::begin()'],['../classsimdjson_1_1dom_1_1element.html#aa59ecf8e9ac7b1a9e977d2cd3f03aa7f',1,'simdjson::dom::element::begin()'],['../classsimdjson_1_1dom_1_1object.html#afe127a7e9ec8dab9ec76160525a68a83',1,'simdjson::dom::object::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a8cb4bf0ca1890a4a3c86f69be40f17f2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1a450826deb3ba982c9f0ec6208cb246',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ae88253d9f6cef0dfc0bd05c45cdfc06f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::begin()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a88d1cdc3124965d707754af4fcfae7f9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::begin()']]], + ['builtin_5fimplementation_347',['builtin_implementation',['../namespacesimdjson.html#af63210cc51d5c99ad84958daf9812e63',1,'simdjson']]] +]; diff --git a/search/functions_10.html b/search/functions_10.html new file mode 100644 index 000000000..1bdc12572 --- /dev/null +++ b/search/functions_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 000000000..bccd112c4 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['set_5fmax_5fcapacity_462',['set_max_capacity',['../classsimdjson_1_1dom_1_1parser.html#a6977b4586bc601070cf100e2973a4cbc',1,'simdjson::dom::parser']]], + ['simdjson_5ferror_463',['simdjson_error',['../structsimdjson_1_1simdjson__error.html#af5355b65f85b897251b3665086075f39',1,'simdjson::simdjson_error']]], + ['size_464',['size',['../classsimdjson_1_1dom_1_1array.html#a698f2f984d1a78a68962c06b2f047686',1,'simdjson::dom::array::size()'],['../classsimdjson_1_1dom_1_1object.html#a93ec5c36aae913f266f533b2e02bc873',1,'simdjson::dom::object::size()'],['../structsimdjson_1_1padded__string.html#a07d50795f042119ab848c37cb8911db4',1,'simdjson::padded_string::size()']]], + ['size_5fin_5fbytes_465',['size_in_bytes',['../classsimdjson_1_1dom_1_1document__stream.html#a2a08525ae815167b73b6393a8999e46b',1,'simdjson::dom::document_stream::size_in_bytes()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a43723c86c43ee3533a3278b5cd2fe2d0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::size_in_bytes()']]], + ['skip_466',['skip',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ae75aa0d09a10682fd30dc4e8e25d0a73',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['skip_5fdouble_467',['skip_double',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ac6b75b1d1af73c9ef8958e573c367e1c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]], + ['start_468',['start',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a760c4d01ad03f18e09a93387de5de60e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::start()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a0126e4a8e02fa0a02481d3bdfd3965f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::start()']]], + ['start_5farray_469',['start_array',['../group__array.html#ga14e69f9c4949805695e30a576bd9c964',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5fobject_470',['start_object',['../group__object.html#ga46e677764da46ebbe4b0e4dea6672a5f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5for_5fresume_5fobject_471',['start_or_resume_object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a821e11bc3b6b3f16fa7d6b15c77c17d3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['start_5froot_472',['start_root',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#aac11a5e300a49531b3600a019cd89304',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['start_5froot_5farray_473',['start_root_array',['../group__array.html#ga334481c295286d926bb3bb912232e225',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['start_5froot_5fobject_474',['start_root_object',['../group__object.html#gab9563a58e164e9f5f75805cffb3582ec',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_475',['started',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#aca1c364caedac11edc78c64734013ce0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array']]], + ['started_5farray_476',['started_array',['../group__array.html#ga136e508ce46622b86cc901490c807578',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5fobject_477',['started_object',['../group__object.html#ga192424d19b12648eea73e3d073d5fcac',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5froot_5farray_478',['started_root_array',['../group__array.html#gaa3428f6c87e63d8a2ba93a3816721066',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['started_5froot_5fobject_479',['started_root_object',['../group__object.html#gaa0c31077aeadb6fc627d4c5750e58ecb',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['supported_5fby_5fruntime_5fsystem_480',['supported_by_runtime_system',['../classsimdjson_1_1implementation.html#adf77c9bc0869eff8fd46e942c4532135',1,'simdjson::implementation']]] +]; diff --git a/search/functions_11.html b/search/functions_11.html new file mode 100644 index 000000000..188076ef2 --- /dev/null +++ b/search/functions_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 000000000..5bb2cf25a --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['take_5fvalue_481',['take_value',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#affadf1e1f762248d60950e333b739820',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::take_value()'],['../structsimdjson_1_1simdjson__result.html#a815368a9e09fa675d0b6672595f5ad19',1,'simdjson::simdjson_result::take_value()']]], + ['tie_482',['tie',['../classsimdjson_1_1dom_1_1element.html#a5342161b8c52c78b2f5edac10e9d05ca',1,'simdjson::dom::element::tie()'],['../structsimdjson_1_1simdjson__result.html#a86dbcba063713c0e284dbde9fae17568',1,'simdjson::simdjson_result::tie()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#acd950d432e76a0bc1a7f3236cc7a1894',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::tie()']]], + ['to_5fdebug_5fstring_483',['to_debug_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9afdfb30ac2aacabce09a5c9d7fd375a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['to_5fjson_5fstring_484',['to_json_string',['../namespacesimdjson.html#a598dd79ec46726de8a6d409ba1bae034',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::array &x) noexcept'],['../namespacesimdjson.html#afc529e3bcacb5b3c747b525fb443771f',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::object &x) noexcept'],['../namespacesimdjson.html#a4c998fcc6bf2bca2196b45a5c3e1967a',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::value &x) noexcept'],['../namespacesimdjson.html#a2cda17221b852e5c398bad5bf350d270',1,'simdjson::to_json_string(SIMDJSON_IMPLEMENTATION::ondemand::document &x) noexcept']]], + ['to_5fstring_485',['to_string',['../namespacesimdjson.html#ade4516933f53705eacfaed65ed14962d',1,'simdjson']]], + ['truncated_5fbytes_486',['truncated_bytes',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#acd3fd372dfd30fcce1d6a103c6682d0e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::truncated_bytes()'],['../classsimdjson_1_1dom_1_1document__stream.html#a6c2a07e08213dc9a51754940942f9e69',1,'simdjson::dom::document_stream::truncated_bytes()']]], + ['type_487',['type',['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#af3d0d03752d5e96d7ee5b83f29136b1b',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::type()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac39965b3006b8f19ed576ce99b7534c5',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::type()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a77bdebf4d2105efdd123cbf0a4906b1e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::type()'],['../classsimdjson_1_1dom_1_1element.html#a19162bf6d94fb6c21bb2bf2e9b78ff0d',1,'simdjson::dom::element::type()']]] +]; diff --git a/search/functions_12.html b/search/functions_12.html new file mode 100644 index 000000000..eb29d8f9a --- /dev/null +++ b/search/functions_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 000000000..67d3a2099 --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unescape_488',['unescape',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#ac69b3aef12e3490c9fbd0a580004e015',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['unescaped_5fkey_489',['unescaped_key',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a49425afaaf0874b07c1f8e4ed1d86cf0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field']]], + ['unsafe_5fis_5fequal_490',['unsafe_is_equal',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#affa14023a66c65f906ee3e673443d943',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(size_t length, std::string_view target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a11bccba8ede5e7dff56e2737fcb853c7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(std::string_view target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a3d8f15d3b004acd695b6fff5ba94b515',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::unsafe_is_equal(const char *target) const noexcept']]] +]; diff --git a/search/functions_13.html b/search/functions_13.html new file mode 100644 index 000000000..3da2ea69c --- /dev/null +++ b/search/functions_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 000000000..3f36045a0 --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['validate_5futf8_491',['validate_utf8',['../namespacesimdjson.html#a04edabca6d128b8b31592e1e2e331ae0',1,'simdjson::validate_utf8(const std::string &s) noexcept'],['../namespacesimdjson.html#a28a847c4b31fc804bec2987b171dbd07',1,'simdjson::validate_utf8(const std::string_view sv) noexcept'],['../namespacesimdjson.html#a53546f3af0ed6840ffbeefcbefd305a1',1,'simdjson::validate_utf8(const char *buf, size_t len) noexcept'],['../classsimdjson_1_1implementation.html#aa3a7b818d56a54cca272191ec176f8f1',1,'simdjson::implementation::validate_utf8()']]], + ['value_492',['value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a7188b9843c2b3b3050c54b52d5b6886f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value(const value_iterator &iter) noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab96f6c19a1866863a110e8bcc93e0392',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#ad5f688629f86f80dff49cab2270b1967',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::value()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a934c09eb8db55277d2d7190f1bbc1a84',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value() &&noexcept(false)'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a78c5842bded486846c816eb01ff439fc',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value() &noexcept(false)'],['../structsimdjson_1_1simdjson__result.html#ae52c2cc66e62e47b05f29e342ad5078a',1,'simdjson::simdjson_result::value() &&noexcept(false)'],['../structsimdjson_1_1simdjson__result.html#af7f6d5a5e979b60d5231449d53dcd9be',1,'simdjson::simdjson_result::value() &noexcept(false)'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a2049ae539dca6999cc33300d212a5014',1,'simdjson::dom::object::iterator::value()']]], + ['value_5funsafe_493',['value_unsafe',['../structsimdjson_1_1simdjson__result.html#a3c25e74570144de48ef71ae490def85f',1,'simdjson::simdjson_result::value_unsafe() const &noexcept'],['../structsimdjson_1_1simdjson__result.html#a67ac8535dcf368fed604549a07e423e2',1,'simdjson::simdjson_result::value_unsafe() &&noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a92e1c9ffc7a854b4b33fa48fe2d95709',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() const &noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a5d412981bc3cee0f0bcf3bfb53ae83e1',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() &noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ad06c8e25c44d091eb3757a65ccd9f57f',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::value_unsafe() &&noexcept']]] +]; diff --git a/search/functions_14.html b/search/functions_14.html new file mode 100644 index 000000000..29237b44c --- /dev/null +++ b/search/functions_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_14.js b/search/functions_14.js new file mode 100644 index 000000000..39154d461 --- /dev/null +++ b/search/functions_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['what_494',['what',['../structsimdjson_1_1simdjson__error.html#a73b15aae33a4eef105d0735e03d83a49',1,'simdjson::simdjson_error']]] +]; diff --git a/search/functions_15.html b/search/functions_15.html new file mode 100644 index 000000000..6d5decd70 --- /dev/null +++ b/search/functions_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_15.js b/search/functions_15.js new file mode 100644 index 000000000..1da5aa742 --- /dev/null +++ b/search/functions_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7eparser_495',['~parser',['../classsimdjson_1_1dom_1_1parser.html#aeb48211f320af02b58dc3d0505059844',1,'simdjson::dom::parser::~parser()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a4a144d96ad06a2295137dd0e5b7dcc1d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::~parser()']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 000000000..ca5aa10e6 --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 000000000..c07ccea2a --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['capacity_348',['capacity',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#aec2c883af898053ab8e5eca8e9e870ae',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::capacity()'],['../classsimdjson_1_1padded__string__view.html#a9d98e1984b893116d8bb7123d84d75b8',1,'simdjson::padded_string_view::capacity()'],['../classsimdjson_1_1dom_1_1parser.html#aedf495a6e090929be23473e8a29f2fe2',1,'simdjson::dom::parser::capacity()']]], + ['child_349',['child',['../group__array.html#gaba7c4e5787c7295da3a0d73b0db1c890',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['consume_350',['consume',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a96aeba1fb4eac299260937b78e346ee8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::consume()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac16e0e51de3ce97fbd3fd0b1f947d552',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::consume()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#add102ee85423a75e22e4d7ca9a3eaacd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::consume()']]], + ['count_5felements_351',['count_elements',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a481e2b0b216d29038ddca3242a7047ad',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_elements()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab408c2ea4be8874e3514b389c70a5667',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_elements()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a9f23e6ab13ad93c43e705ce7fe6134c9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::count_elements()']]], + ['count_5ffields_352',['count_fields',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a24fd6a8aa158b80d851e3a57c9fef642',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::count_fields()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aef6872e07743217fe2e2abe790a21d4c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::count_fields()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a55f04607ee4e718294a572f9b6ad94cc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_fields()']]], + ['current_5fdepth_353',['current_depth',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a1919a4ca6418c94ed54f026fbbda6f1d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::current_depth()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bcd64ae6b4d204c4b6b2a8420e0270c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_depth()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a3bfd36dafc82c212f165b434ab5378b3',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_depth()']]], + ['current_5flocation_354',['current_location',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a55603828cddcd2b6cfec1a487f0cd137',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::current_location()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a06258e49f2dbb910beeaf6814ff7e071',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_location()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a78b9e4e22a89050c9f911f1878165e88',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_location()']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 000000000..d79f55b8e --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 000000000..209569e78 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['data_355',['data',['../structsimdjson_1_1padded__string.html#aadd3bb268cbba43012c5d17a8c1ab7ef',1,'simdjson::padded_string::data() const noexcept'],['../structsimdjson_1_1padded__string.html#aa833ecdbe40c220c5baf7a29c472c972',1,'simdjson::padded_string::data() noexcept']]], + ['description_356',['description',['../classsimdjson_1_1implementation.html#a4f41daefefc573e20fccd591b158e063',1,'simdjson::implementation']]], + ['document_357',['document',['../classsimdjson_1_1dom_1_1document.html#a6947c9d79453071ca73d06e398bcdd2a',1,'simdjson::dom::document::document() noexcept=default'],['../classsimdjson_1_1dom_1_1document.html#af34f108b46f82428bfe4ea33869358f0',1,'simdjson::dom::document::document(document &&other) noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a54cd729a715a09bc9e706b7640233427',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::document()']]], + ['document_5fstream_358',['document_stream',['../classsimdjson_1_1dom_1_1document__stream.html#ae6ee894790448145e11a456f12253364',1,'simdjson::dom::document_stream::document_stream() noexcept'],['../classsimdjson_1_1dom_1_1document__stream.html#a9d6bb44a7d8f818c401d65fb80f6a523',1,'simdjson::dom::document_stream::document_stream(document_stream &&other) noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#af12dc14d4d16b9f4f4602c738678cb0c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::document_stream() noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0ac2a6ad0393eb4330b440c8c09290f2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::document_stream(document_stream &&other) noexcept=default']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 000000000..1657cad0d --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 000000000..526e0199e --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['element_359',['element',['../classsimdjson_1_1dom_1_1element.html#a9dbf81ad662ad32168025e8e08686935',1,'simdjson::dom::element']]], + ['end_360',['end',['../classsimdjson_1_1dom_1_1array.html#a378b3312cdf6f8fe04725b617b8cfcb9',1,'simdjson::dom::array::end()'],['../classsimdjson_1_1dom_1_1document__stream.html#adec1e168e4188bf9c90ee87adbd72850',1,'simdjson::dom::document_stream::end()'],['../classsimdjson_1_1dom_1_1element.html#a846a790e93c9bad6c40641239bd77b28',1,'simdjson::dom::element::end()'],['../classsimdjson_1_1dom_1_1object.html#a79cf291477bcaa1bf2328411b411587d',1,'simdjson::dom::object::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae482e8f5fa3233babbcb9ccc29db5a15',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7a79c0e85c9d40b53f0d4daeeb24111a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#a0a0d40ed80767c01232a6aacb6258b2b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::end()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a6ed00f1588087b2d0de926c4599366d6',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::end()']]], + ['error_361',['error',['../structsimdjson_1_1simdjson__error.html#aa8143615e5f6f02474f6ab165682ab6e',1,'simdjson::simdjson_error::error()'],['../structsimdjson_1_1simdjson__result.html#a23470fcc7f01262019e96d3f3010b4a1',1,'simdjson::simdjson_result::error()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a20a01e401b72125b9b1acef9cfb5b9ea',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::error()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a4111757108422ffaf647024319205d5c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::error()']]], + ['error_5fmessage_362',['error_message',['../namespacesimdjson.html#a65b00a7a7a9c8fafe9eb3b9b413a36fa',1,'simdjson::error_message(error_code error) noexcept'],['../namespacesimdjson.html#a56e8e2fa6798b9e0da80bc51ae4a5f29',1,'simdjson::error_message(int error) noexcept']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 000000000..9301d6b9c --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 000000000..e359dae92 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['field_363',['field',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a9415aecf3526ad6081be495c9be61b43',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field']]], + ['field_5fkey_364',['field_key',['../group__object.html#ga9fd0d39ec786f26b7ea86f9bc8380bdd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['field_5fvalue_365',['field_value',['../group__object.html#gaaaf58bcf25e6d30a3469848d36c65a05',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['find_5ffield_366',['find_field',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab919032e611f7f4a1e8cc9eb47ad4dea',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#aa25020165cc5a191026a243a10da6558',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a1588a173b15a20cacf77a24d07032d83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a4ff908713e1eb6d6294706a235be8101',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field()'],['../group__object.html#gacefcaf06811426a241ed97a6948a94ee',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator::find_field(const std::string_view key) noexcept']]], + ['find_5ffield_5fraw_367',['find_field_raw',['../group__object.html#gab66bdaf2c97d2cbd2a94a5a3e67ffabc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['find_5ffield_5funordered_368',['find_field_unordered',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa89d66d993d0bffcbb85e303ad3950c2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::find_field_unordered()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a55d8bd31e2f5e6b10986af2f48a544fc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::find_field_unordered()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#acb1514c00a87027c5eb3c81171a3b874',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field_unordered()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a423064962ffe48495948c98afb0e556c',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field_unordered()']]], + ['find_5ffield_5funordered_5fraw_369',['find_field_unordered_raw',['../group__object.html#ga678e53c38ebaf2323550e7f29e253df9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 000000000..9c4f5fc65 --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 000000000..310a2fa5e --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['get_370',['get',['../classsimdjson_1_1dom_1_1element.html#a3474c8fc1b1cb06625a50dcb9a2c5269',1,'simdjson::dom::element::get()'],['../structsimdjson_1_1simdjson__result.html#ab0fafc6d63a14891788a9edaedff4b05',1,'simdjson::simdjson_result::get()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a96c905c44f3c53cb6cdb23b760d323b8',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::get()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7fe39fb73b6a4d9b1c97742dc2ae7b98',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get() &noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af0af8707b5623e17c3bc9a329b7c4fa3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get(T &out) &noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8d50c7c494ab9acc4a644cc77dd058f9',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get() noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a40af3c6af7d18241c1c4017df8557d86',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get(T &out) noexcept'],['../classsimdjson_1_1dom_1_1element.html#a47663724b3a6bad8666ccd24cd598bd2',1,'simdjson::dom::element::get()']]], + ['get_5factive_5fimplementation_371',['get_active_implementation',['../namespacesimdjson.html#abd8b8fd009878125822fca9a2624f6a6',1,'simdjson']]], + ['get_5farray_372',['get_array',['../classsimdjson_1_1dom_1_1element.html#a87c75accdc0b35e06f3d554561ce8cd3',1,'simdjson::dom::element::get_array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aea545f106413a9bc01cd19e6630a580d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2fdcc51cac791c3a2f4c970764bc0155',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_array()']]], + ['get_5favailable_5fimplementations_373',['get_available_implementations',['../namespacesimdjson.html#a7e4483a8ae684fdb5b2f1e7d4a8acc69',1,'simdjson']]], + ['get_5fbool_374',['get_bool',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa0e07db099e651d3e5279872683cb7dd',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_bool()'],['../classsimdjson_1_1dom_1_1element.html#a548e0fc369eb455ea477e20fb0793627',1,'simdjson::dom::element::get_bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a41eaac87582a465b4c9f9834701a837d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_bool()']]], + ['get_5fc_5fstr_375',['get_c_str',['../classsimdjson_1_1dom_1_1element.html#a29c21d70352c9b8af7144fd4f38baaa6',1,'simdjson::dom::element']]], + ['get_5fdouble_376',['get_double',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a9a5ebeb4a79fa1d997f9f3478370a57e',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double()'],['../classsimdjson_1_1dom_1_1element.html#a3e74a8a6ef8318e2de805359126c6d7b',1,'simdjson::dom::element::get_double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9909be358c78a64bc9ab7e11e3f2a47b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ab261642a30f5e26b0769ce701cd5b9f8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_double()']]], + ['get_5fdouble_5fin_5fstring_377',['get_double_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ac8b8d7d4bc7958363b7f0d380b248a4f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a85e4b5250e316cc602b1b05bd097f771',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_double_in_string()']]], + ['get_5fint64_378',['get_int64',['../classsimdjson_1_1dom_1_1element.html#aa954cda836a4748ec9937291a9250604',1,'simdjson::dom::element::get_int64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#ab7e4b28c0d9637cf1b04554d99c0e3b3',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6abc08fb48868bdc5104c885c46ced82',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a92b12b32ee177c2a818618d0595d2584',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_int64()']]], + ['get_5fint64_5fin_5fstring_379',['get_int64_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aac4a4837e66c8f1243722ab04ce45436',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_int64_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a547e99f2f430ca39bf4060d090f45ff7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64_in_string() noexcept']]], + ['get_5fnumber_380',['get_number',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aa89c4aceb7e052a1f7ff7e4058b651f1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a2b04a9cd8c4ff9b591dc3f2db95c69cf',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number() noexcept']]], + ['get_5fnumber_5ftype_381',['get_number_type',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#abb3a7cc6f2391d26f27a28c16ca38c9c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_number_type()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a8c8d29d831635c958e87de0cc2dab8b4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_number_type()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2f46079741d1ba316de32bb9765c5082',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number_type()']]], + ['get_5fobject_382',['get_object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4620d364a637031ef38661f9fb215ebc',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a3bde0795cb309f3e51b8388fbafc1fe4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_object()'],['../classsimdjson_1_1dom_1_1element.html#ab4c2e35dc44664eb04038ad35efc64f9',1,'simdjson::dom::element::get_object()']]], + ['get_5fraw_5fjson_5fstring_383',['get_raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#afa3370b930da937911cf61ec9b047c56',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_raw_json_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#aca8b183c4e674a5b4ade8f6d2780f815',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_raw_json_string()']]], + ['get_5fstring_384',['get_string',['../classsimdjson_1_1dom_1_1element.html#ae83652b5016ce4d4ff71f8f9bc05913e',1,'simdjson::dom::element::get_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#addfd2bc654d13906456ce44168d2ab68',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e96b60b036694be5ef43fb564ab8d1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_string()']]], + ['get_5fstring_5flength_385',['get_string_length',['../classsimdjson_1_1dom_1_1element.html#a9d92145af64401654c20d2885dd4051d',1,'simdjson::dom::element']]], + ['get_5fuint64_386',['get_uint64',['../classsimdjson_1_1dom_1_1element.html#a9e5a750a066f17d5a9a31a24980e0b1d',1,'simdjson::dom::element::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a4d221850d045f1e7ada4dfaaee0e145c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference.html#a47b30548f71aca4317bdc4c6955cd719',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_reference::get_uint64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aff5939efdcb41c9d2b9a1997816f093f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_uint64()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#adaa7bb2c9b3988476f3317ddda27e22d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64()']]], + ['get_5fuint64_5fin_5fstring_387',['get_uint64_in_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5cb63d14a99509d751f4be45063fec95',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::get_uint64_in_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8bc2eb9eeeb7e2e0b82c23ed4d254933',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64_in_string()']]], + ['get_5fvalue_388',['get_value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ab89eda435b4a68be578fcb5c3da73980',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 000000000..46b5c0f61 --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 000000000..ecf403011 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['has_5fnext_5felement_389',['has_next_element',['../group__array.html#ga31b0a8ce8734db9413cce31c4d9c8c8d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]], + ['has_5fnext_5ffield_390',['has_next_field',['../group__object.html#ga7956fe38cd8ecfbc8f709aa6f65c92b4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value_iterator']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 000000000..31a1d9503 --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 000000000..b152b135e --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['implementation_5fsimdjson_5fresult_5fbase_391',['implementation_simdjson_result_base',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a4f59b204f1eddcdc2b36e6df0639a516',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(error_code error) noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a108dd35fd49314820106a21afa0fb2ea',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base() noexcept=default'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a44ff65b6194c7c1cb74180b43e438619',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value, error_code error) noexcept'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#af8a436d40886a295f618311d3849d7e5',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value) noexcept']]], + ['is_392',['is',['../classsimdjson_1_1dom_1_1element.html#a4c77063d766c7db197f8674407b504d7',1,'simdjson::dom::element']]], + ['is_5falive_393',['is_alive',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a3170300bc331577a1435bb238cf3faff',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['is_5farray_394',['is_array',['../classsimdjson_1_1dom_1_1element.html#afaaac6e2f58128a01a25b0a5f5abb856',1,'simdjson::dom::element']]], + ['is_5fbool_395',['is_bool',['../classsimdjson_1_1dom_1_1element.html#afde562c5aae1b85a03ab6d4b040e7d13',1,'simdjson::dom::element']]], + ['is_5fdouble_396',['is_double',['../classsimdjson_1_1dom_1_1element.html#a0d11f69ba87f55960be6f655e4e99aba',1,'simdjson::dom::element::is_double()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a48f9e54ebd40e1c060be0a4b1d4ff823',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_double()']]], + ['is_5fempty_397',['is_empty',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a371cf8909f04019606063e8538fd7109',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::is_empty()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ad210f9115679a625ada433add55eff51',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::is_empty()']]], + ['is_5fequal_398',['is_equal',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a0ddac0ab1c69022610d8051b989b5c95',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::is_equal(std::string_view target) const noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#aa3165ea813c4c15fb9cb282e67abe6af',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::is_equal(const char *target) const noexcept']]], + ['is_5ffree_5ffrom_5funescaped_5fquote_399',['is_free_from_unescaped_quote',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a671923a53cc070f65029698afeb9be7f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string']]], + ['is_5fint64_400',['is_int64',['../classsimdjson_1_1dom_1_1element.html#adadf66ec37675d5f3fac9816a8aacba2',1,'simdjson::dom::element::is_int64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a38d6b4b4e91f30c8def71997d23454c2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_int64()']]], + ['is_5finteger_401',['is_integer',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a5ab2c9c7d29a7a6c09f78930b0100836',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_integer()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#af47e11e9925fd5d3d8a43cf0f7773992',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_integer() noexcept']]], + ['is_5fnegative_402',['is_negative',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5083f65b71d7540ea785ec2b52604267',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_negative()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a2701c283de019e56624e930e936e0df0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_negative()']]], + ['is_5fnull_403',['is_null',['../classsimdjson_1_1dom_1_1element.html#ae38f84f4272ae3c32b32dd6d5007ffb9',1,'simdjson::dom::element::is_null()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5ed59f01a0d4ad253f0e1c1f995ed0a7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_null()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a04f1c591d93d834377a9cb916c90e09b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_null()']]], + ['is_5fnumber_404',['is_number',['../classsimdjson_1_1dom_1_1element.html#a1e3f78b3bee5ec3f33cc4b03dcc87981',1,'simdjson::dom::element']]], + ['is_5fobject_405',['is_object',['../classsimdjson_1_1dom_1_1element.html#a08c7dcebf9e96fe5e4dd6df2959c0024',1,'simdjson::dom::element']]], + ['is_5fscalar_406',['is_scalar',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8c2618e57ec26501dd93ff8fd5cc2191',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_scalar()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ac2ea8f4340d02d9062f81419da47500b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::is_scalar()']]], + ['is_5fstreaming_407',['is_streaming',['../namespacesimdjson.html#a6f306690d6d088d80b0cc2717040b2d0',1,'simdjson']]], + ['is_5fstring_408',['is_string',['../classsimdjson_1_1dom_1_1element.html#a65bd96042cc0f19dc3e0635937edded4',1,'simdjson::dom::element']]], + ['is_5fuint64_409',['is_uint64',['../classsimdjson_1_1dom_1_1element.html#ac5017726a573f59c3494b92bb66a3beb',1,'simdjson::dom::element::is_uint64()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#af0e89976b80a7a7dedaf8c1a7cfd64a2',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::is_uint64()']]], + ['iterate_410',['iterate',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a0da712132ca4180a84907f2ca4ffbc5b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['iterate_5fmany_411',['iterate_many',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a8f2dee06242abddb70eb7c07b50cef0b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser']]], + ['iterator_412',['iterator',['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a6c3a5002801ab80b1c59422d7f3400d3',1,'simdjson::dom::document_stream::iterator::iterator()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a3b0ac5e3e64e53167a011afdd0b77345',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::iterator()']]] +]; diff --git a/search/functions_9.html b/search/functions_9.html new file mode 100644 index 000000000..9a8e4290c --- /dev/null +++ b/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 000000000..02e3615d4 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['key_413',['key',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a951609ca7a164b499ff19adbe2de7983',1,'simdjson::dom::object::iterator::key()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field.html#a4f49d8e89feb3ca69cf85ce2aea80c0f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::field::key()']]], + ['key_5fc_5fstr_414',['key_c_str',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a54a99dcf9c422d5c24f3c570b6d9b6e4',1,'simdjson::dom::object::iterator']]], + ['key_5fequals_415',['key_equals',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a4807eeb1ed5f596b587d0b61dfb550e7',1,'simdjson::dom::object::iterator']]], + ['key_5fequals_5fcase_5finsensitive_416',['key_equals_case_insensitive',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a6d335de77b8c5b731566e48f6cacd95d',1,'simdjson::dom::object::iterator']]], + ['key_5flength_417',['key_length',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a5ad1b60fd5df56d9fdb8bce1e08de88f',1,'simdjson::dom::object::iterator']]] +]; diff --git a/search/functions_a.html b/search/functions_a.html new file mode 100644 index 000000000..5ecc152ca --- /dev/null +++ b/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 000000000..441c3dee6 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['length_418',['length',['../structsimdjson_1_1padded__string.html#a863fded7b347718299190ad3f501d38c',1,'simdjson::padded_string']]], + ['load_419',['load',['../classsimdjson_1_1dom_1_1parser.html#ab3e5bbb1974a1932aead90ad63883a23',1,'simdjson::dom::parser::load()'],['../structsimdjson_1_1padded__string.html#aaf017ffe731c738da5eb31c63b987d3a',1,'simdjson::padded_string::load()']]], + ['load_5fmany_420',['load_many',['../classsimdjson_1_1dom_1_1parser.html#a5300851ba21d0a0273a11510fd1c378a',1,'simdjson::dom::parser']]] +]; diff --git a/search/functions_b.html b/search/functions_b.html new file mode 100644 index 000000000..e301fedd7 --- /dev/null +++ b/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 000000000..117ad4c28 --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['max_5fcapacity_421',['max_capacity',['../classsimdjson_1_1dom_1_1parser.html#a8bfde4193783adef9c5f12dfc4da3bc0',1,'simdjson::dom::parser::max_capacity()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a006ad62e81d1ffa0fa898b586095208b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::max_capacity()']]], + ['max_5fdepth_422',['max_depth',['../classsimdjson_1_1dom_1_1parser.html#a209d15b8f87ad69f5fbaccdd5b6b5441',1,'simdjson::dom::parser::max_depth()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a9dd8dfaa40f0faec56e31f976e4c2c94',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::max_depth()']]], + ['minify_423',['minify',['../namespacesimdjson.html#aeb4ef5cab43d52da3fdd99cb689aff2c',1,'simdjson::minify(T x)'],['../namespacesimdjson.html#a94bb4244756d764cf0ed7de180ae6520',1,'simdjson::minify(const char *buf, size_t len, char *dst, size_t &dst_len) noexcept']]] +]; diff --git a/search/functions_c.html b/search/functions_c.html new file mode 100644 index 000000000..c4f326877 --- /dev/null +++ b/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 000000000..e4b4a35bd --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['name_424',['name',['../classsimdjson_1_1implementation.html#a404c32ec6187ac0fb5b2ec6b5aea4abd',1,'simdjson::implementation']]], + ['number_5fof_5fslots_425',['number_of_slots',['../classsimdjson_1_1dom_1_1array.html#a26e66312190e016c22093292974490ff',1,'simdjson::dom::array']]] +]; diff --git a/search/functions_d.html b/search/functions_d.html new file mode 100644 index 000000000..7a1ed065d --- /dev/null +++ b/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 000000000..9eab4e6a1 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['object_426',['object',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a034b27d7ff75832a574c2069af267111',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::object()'],['../classsimdjson_1_1dom_1_1object.html#ae2e1a8cbaab9d352495d1dc993407be3',1,'simdjson::dom::object::object()']]], + ['object_5fiterator_427',['object_iterator',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator.html#a9fce67dabeb5dcccd16fa531febec666',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_iterator']]], + ['operator_20array_428',['operator array',['../classsimdjson_1_1dom_1_1element.html#a71d6bfa627dd66e202f8b402f91a44ac',1,'simdjson::dom::element::operator array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a08307c0a5552cf8cb06613ed1de48eac',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator array()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a93756146a65e835b9358cc652dc53396',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator array()']]], + ['operator_20bool_429',['operator bool',['../classsimdjson_1_1dom_1_1element.html#ab036e52a73d5bd046e1f2650a31dab30',1,'simdjson::dom::element::operator bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a7df7ba140c9d6398fef2c6963da82230',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator bool()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#af7b51d9048d388235f3936c8fa30a2f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator bool()']]], + ['operator_20const_20char_20_2a_430',['operator const char *',['../classsimdjson_1_1dom_1_1element.html#a8f9569b40dd2b23aab9fbf2229749589',1,'simdjson::dom::element']]], + ['operator_20double_431',['operator double',['../classsimdjson_1_1dom_1_1element.html#a743b5f1ef4202d8fb8fb317e612385f3',1,'simdjson::dom::element::operator double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ae052e098bfbfde398845060a8d4f572f',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator double()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a53f99cedf58e62c1382a4d5a585e05a0',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator double()']]], + ['operator_20int64_5ft_432',['operator int64_t',['../classsimdjson_1_1dom_1_1element.html#afb98fdfcb6ddf19071cd2300613218d3',1,'simdjson::dom::element::operator int64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a5d50aa0d396fc49855d3c0c571b07a25',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator int64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a30f182e71d3c13d2656ba5983862be57',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator int64_t()']]], + ['operator_20object_433',['operator object',['../classsimdjson_1_1dom_1_1element.html#a23f4d8c38309b0184e658d8a9697a177',1,'simdjson::dom::element::operator object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a89519c599fd938a6a750262111fc5757',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator object()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a6cd27fe6dc9062b5380db757d49c3f7b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator object()']]], + ['operator_20padded_5fstring_5fview_434',['operator padded_string_view',['../structsimdjson_1_1padded__string.html#a0e5b8e8917478af4e82e023c2efa40e9',1,'simdjson::padded_string']]], + ['operator_20raw_5fjson_5fstring_435',['operator raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a78411bf36298e3468ac83f3562b75d83',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator raw_json_string()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a85d69a32b4b95f353abe6214ecc98619',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator raw_json_string()']]], + ['operator_20t_26_26_436',['operator T&&',['../structsimdjson_1_1simdjson__result.html#afcce23c64894ec135fe8c2d255d2121b',1,'simdjson::simdjson_result::operator T&&()'],['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a11133790f4386ea4d11567a3a0806096',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base::operator T&&()']]], + ['operator_20uint64_5ft_437',['operator uint64_t',['../classsimdjson_1_1dom_1_1element.html#ae3c0226046e29cfb0e868c5251a87e53',1,'simdjson::dom::element::operator uint64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a847db7139319155ef5fa2d4af7063163',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::operator uint64_t()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#afb7be23d4f1006d5eae234d8c8c8d286',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator uint64_t()']]], + ['operator_20value_438',['operator value',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#ad12185e1993ebcad73eb5ce82f5de8f7',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['operator_21_3d_439',['operator!=',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a05396b8e8322363b523b3bf9730a31f1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator!=()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#abbca17b48bd6c2b045b659076f1f64ce',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator!=()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a1da5ce328cc2609432be961736c6e810',1,'simdjson::dom::object::iterator::operator!=()'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a56c69d73c7e424e008a28771661ab218',1,'simdjson::dom::document_stream::iterator::operator!=()'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a2680a46eeece638bc352bcf6a169bcf6',1,'simdjson::dom::array::iterator::operator!=(const iterator &other) const noexcept']]], + ['operator_2a_440',['operator*',['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a90254656d4e7a8826246d1f931647eff',1,'simdjson::dom::array::iterator::operator*()'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a09b193fe348fa8a267b96edd96f7515e',1,'simdjson::dom::document_stream::iterator::operator*()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a688f6c7f451602bb3385a93252c0828a',1,'simdjson::dom::object::iterator::operator*()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a1577fb5a95f92a4a1aaa8eee6440d572',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator*()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a5fe3ce985cc1921d5917667d6b25841b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator*()']]], + ['operator_2b_2b_441',['operator++',['../classsimdjson_1_1dom_1_1object_1_1iterator.html#a83b3c467632c017400f95ff05d2367b3',1,'simdjson::dom::object::iterator::operator++()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_1_1iterator.html#a03e0c8d93b86a18b10370d51b99548ef',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::iterator::operator++()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a55e0ae33e5e5835c841fd082edab5937',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator++()'],['../classsimdjson_1_1dom_1_1object_1_1iterator.html#aa26738ad08b7de3be4621a75863118ab',1,'simdjson::dom::object::iterator::operator++()'],['../classsimdjson_1_1dom_1_1document__stream_1_1iterator.html#a7b05ed75aa2b2a6d3a17204b9863956a',1,'simdjson::dom::document_stream::iterator::operator++()'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a6ec91111a2bcc9e378d30b47b613fac5',1,'simdjson::dom::array::iterator::operator++() noexcept'],['../classsimdjson_1_1dom_1_1array_1_1iterator.html#a46454681bd5e3a938c04eb89210e7966',1,'simdjson::dom::array::iterator::operator++(int) noexcept']]], + ['operator_3c_3c_442',['operator<<',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ab10943c6107de5337f376a6939f817af',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<()'],['../namespacesimdjson.html#a43514fe76c3095e45f30a050a9551d27',1,'simdjson::operator<<()'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a386f80798c223c5fdbfc4dd9066a6b99',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson_result< json_type > &type) noexcept(false)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ac3a4f6af474f2b5f6d749f7452bb5477',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value x)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a24f9bbfe8b5a3017b4dd4b72dbccec4d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array value)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#a6f753d5e1bc479321c51b54392a96a65',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document &value)'],['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#ae52a82c2f754a47eb9dac12223b3311d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator<<(std::ostream &out, simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object value)'],['../namespacesimdjson.html#a61a74357c3e9313ad84c5f1243fdf581',1,'simdjson::operator<<(std::ostream &out, simdjson_result< padded_string_view > &s) noexcept(false)'],['../namespacesimdjson.html#a39bbbf605c0068e4a65c2d8885727fc9',1,'simdjson::operator<<(std::ostream &out, simdjson_result< padded_string > &s) noexcept(false)'],['../namespacesimdjson.html#a537445bb236ae76d2b5559b1851b7108',1,'simdjson::operator<<(std::ostream &out, const padded_string &s)']]], + ['operator_3d_443',['operator=',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream.html#ac3c10596a0934f4f5375b986a35f90db',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document_stream::operator=()'],['../structsimdjson_1_1padded__string.html#aa43b3a8e0df4edcf960f04441dd9b930',1,'simdjson::padded_string::operator=()'],['../classsimdjson_1_1dom_1_1parser.html#af5b61dda345cef1feba7c4529dfe0259',1,'simdjson::dom::parser::operator=()'],['../classsimdjson_1_1dom_1_1document__stream.html#a162d002972b41bbb7d8e4021341e15ba',1,'simdjson::dom::document_stream::operator=()'],['../classsimdjson_1_1dom_1_1document.html#a336814aa587d9ca605e1548b22b2b80c',1,'simdjson::dom::document::operator=()']]], + ['operator_3d_3d_444',['operator==',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#aab771b17058b0c93bdd0a8679c2c4d84',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::operator==()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator.html#a20cd55e63cf5bdc1561f771b4db1ac1b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_iterator::operator==()']]], + ['operator_5b_5d_445',['operator[]',['../classsimdjson_1_1dom_1_1object.html#a2691ceae488be203aac2d5ef5b67347f',1,'simdjson::dom::object::operator[](const char *key) const noexcept'],['../classsimdjson_1_1dom_1_1object.html#acc66a2f2eb74fbe359d4064531764f50',1,'simdjson::dom::object::operator[](std::string_view key) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#a367d22eeabc1881a8eb18bae2f2ba3b8',1,'simdjson::dom::element::operator[](const char *key) const noexcept'],['../classsimdjson_1_1dom_1_1element.html#aca693f57d73a5ce95d1f7bedf67289b7',1,'simdjson::dom::element::operator[](std::string_view key) const noexcept']]], + ['string_5fview_446',['string_view',['../classsimdjson_1_1dom_1_1element.html#a83adcf723abff34d7c1e8ec0e69d967b',1,'simdjson::dom::element::string_view()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a30e8df60ace82837a17e52d5e457ac52',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::string_view()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a8e5f2ff46639e6c1cffb73d4e071e491',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::string_view()'],['../structsimdjson_1_1padded__string.html#a4bf80c11155b8067a87bd76762bee23b',1,'simdjson::padded_string::string_view()']]] +]; diff --git a/search/functions_e.html b/search/functions_e.html new file mode 100644 index 000000000..22d2a6bf5 --- /dev/null +++ b/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 000000000..38a24fbd9 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['padded_5fstring_447',['padded_string',['../structsimdjson_1_1padded__string.html#ac06ec74c78934565cdf50df163d35476',1,'simdjson::padded_string::padded_string(size_t length) noexcept'],['../structsimdjson_1_1padded__string.html#a1b15f9345c0215e7548df1aa0105de98',1,'simdjson::padded_string::padded_string(const char *data, size_t length) noexcept'],['../structsimdjson_1_1padded__string.html#a44fb0f219f05528e606f79dab7c32482',1,'simdjson::padded_string::padded_string(const std::string &str_) noexcept'],['../structsimdjson_1_1padded__string.html#a6199f5bf259fcac114addeef569cf5a5',1,'simdjson::padded_string::padded_string(std::string_view sv_) noexcept'],['../structsimdjson_1_1padded__string.html#a952eaf7ff8ddf252d9c00a693978a4da',1,'simdjson::padded_string::padded_string(padded_string &&o) noexcept'],['../structsimdjson_1_1padded__string.html#a8e10a3a5a46a4d58459b052975b0bf66',1,'simdjson::padded_string::padded_string() noexcept']]], + ['padded_5fstring_5fview_448',['padded_string_view',['../classsimdjson_1_1padded__string__view.html#aae57856a217294ac218b6372a5e37d9a',1,'simdjson::padded_string_view::padded_string_view(const std::string &s) noexcept'],['../classsimdjson_1_1padded__string__view.html#a12b33830793e7ab1953b961088a83c3d',1,'simdjson::padded_string_view::padded_string_view(std::string_view s, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html#a184b54acd28046a9c4f2a6cfa5419779',1,'simdjson::padded_string_view::padded_string_view(const uint8_t *s, size_t len, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html#a47ac0063f7dd0ffd832c5e4439f2de30',1,'simdjson::padded_string_view::padded_string_view(const char *s, size_t len, size_t capacity) noexcept'],['../classsimdjson_1_1padded__string__view.html#aa338ad56304bc79e6ca1fab64af41de0',1,'simdjson::padded_string_view::padded_string_view() noexcept=default']]], + ['padding_449',['padding',['../classsimdjson_1_1padded__string__view.html#a934e7272d22d6024383eafe07b06773c',1,'simdjson::padded_string_view']]], + ['parse_450',['parse',['../classsimdjson_1_1dom_1_1parser.html#a16c7d1e28125ef7d5703244483f70984',1,'simdjson::dom::parser']]], + ['parse_5finto_5fdocument_451',['parse_into_document',['../classsimdjson_1_1dom_1_1parser.html#a1afc4d3b429363b503a5605d66081e30',1,'simdjson::dom::parser']]], + ['parse_5fmany_452',['parse_many',['../classsimdjson_1_1dom_1_1parser.html#afb18710d2e2ef0fd40dda4887282bdb2',1,'simdjson::dom::parser']]], + ['parser_453',['parser',['../classsimdjson_1_1dom_1_1parser.html#a09370efac9e1b7d9b4a8349332e026c3',1,'simdjson::dom::parser::parser(size_t max_capacity=SIMDJSON_MAXSIZE_BYTES) noexcept'],['../classsimdjson_1_1dom_1_1parser.html#a3f3c80565fe63857e2901c48e7bed64d',1,'simdjson::dom::parser::parser(parser &&other) noexcept'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser.html#a76abd4d78f0c26d80d3bf436ce212e00',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::parser::parser()']]] +]; diff --git a/search/functions_f.html b/search/functions_f.html new file mode 100644 index 000000000..54b7dee08 --- /dev/null +++ b/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 000000000..156e1f44e --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['raw_454',['raw',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a8736f5e397a3e0a55090aadee0596214',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string']]], + ['raw_5fjson_455',['raw_json',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ad8a7f0b418fae60160e403f71a5a8088',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::raw_json()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#aa3a27654a19c386ad0c775cff258cf0c',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#a71600033791f9c6bbc9f40fb2f82fdc8',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::raw_json()']]], + ['raw_5fjson_5fstring_456',['raw_json_string',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#a78b420ddb8a0570ee973cdfbccd31c9a',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string() noexcept=default'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string.html#acf64001cc9961cd01712211b778e760b',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string::raw_json_string(const uint8_t *_buf) noexcept']]], + ['raw_5fjson_5ftoken_457',['raw_json_token',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a58802e77b6fb25a3d2ec8a4d2482f9bf',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::raw_json_token()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a0bcbee63db869ac122bed75000b54d46',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >::raw_json_token()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ac1bcd8afb10742d6f18b8f2f07ba0392',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >::raw_json_token()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a37427e768435aafef5af097b8cc3cfec',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::raw_json_token()'],['../structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a442b2e5803e69d4845b5b7f7bd51a0ed',1,'simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::raw_json_token()']]], + ['reset_458',['reset',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#ae7248918b09cb4cb1d866605c641679d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::reset()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object.html#ae0bc6b9803e0c989e9defaf3edcaaae4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object::reset()']]], + ['resume_459',['resume',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value.html#a970f5c3f3e668a399765d52c7426764d',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value']]], + ['rewind_460',['rewind',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a9cc053001e8246e6e65bbcbf3db035c4',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]], + ['root_461',['root',['../classsimdjson_1_1dom_1_1document.html#ae19dced0eee5f63b9d1591ef51dcda4e',1,'simdjson::dom::document']]] +]; diff --git a/search/groups_0.html b/search/groups_0.html new file mode 100644 index 000000000..c600b4970 --- /dev/null +++ b/search/groups_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 000000000..e3c6cb0f7 --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['array_20iteration_560',['Array iteration',['../group__array.html',1,'']]] +]; diff --git a/search/groups_1.html b/search/groups_1.html new file mode 100644 index 000000000..2eb3550dc --- /dev/null +++ b/search/groups_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 000000000..39fb05b06 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['object_20iteration_561',['Object iteration',['../group__object.html',1,'']]] +]; diff --git a/search/groups_2.html b/search/groups_2.html new file mode 100644 index 000000000..12f4af7a0 --- /dev/null +++ b/search/groups_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 000000000..bac2643ea --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scalar_20values_562',['Scalar values',['../group__scalar.html',1,'']]] +]; diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 000000000..03626f64a --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/namespaces_0.html b/search/namespaces_0.html new file mode 100644 index 000000000..21db2c3a5 --- /dev/null +++ b/search/namespaces_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 000000000..48ace5d7e --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ondemand_331',['ondemand',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html',1,'simdjson::SIMDJSON_IMPLEMENTATION']]], + ['simdjson_332',['simdjson',['../namespacesimdjson.html',1,'']]] +]; diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 000000000..2b9360b6b --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 000000000..8517b48f0 --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 000000000..c8a8f8a67 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['a_20better_20way_20to_20parse_20documents_3f_563',['A Better Way to Parse Documents?',['../md_doc_ondemand_design.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 000000000..a0fb67963 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 000000000..c87823e13 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cpu_20architecture_2dspecific_20implementations_564',['CPU Architecture-Specific Implementations',['../md_doc_implementation_selection.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 000000000..084edfd03 --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 000000000..bf0c149a2 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_565',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 000000000..c0b45b0fc --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 000000000..2ccbdd9b6 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iterate_5fmany_566',['iterate_many',['../md_doc_iterate_many.html',1,'']]] +]; diff --git a/search/pages_4.html b/search/pages_4.html new file mode 100644 index 000000000..0f05c2e73 --- /dev/null +++ b/search/pages_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 000000000..5be55f5bd --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parse_5fmany_567',['parse_many',['../md_doc_parse_many.html',1,'']]], + ['performance_20notes_568',['Performance Notes',['../md_doc_performance.html',1,'']]] +]; diff --git a/search/pages_5.html b/search/pages_5.html new file mode 100644 index 000000000..27e2b6c78 --- /dev/null +++ b/search/pages_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 000000000..53402230f --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['tape_20structure_20in_20simdjson_569',['Tape structure in simdjson',['../md_doc_tape.html',1,'']]], + ['the_20basics_570',['The Basics',['../md_doc_basics.html',1,'']]], + ['the_20document_2dobject_2dmodel_20_28dom_29_20front_2dend_571',['The Document-Object-Model (DOM) front-end',['../md_doc_dom.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 000000000..9074198f8 --- /dev/null +++ b/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 000000000..fb226f734 --- /dev/null +++ b/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 000000000..269488ba0 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,45 @@ +var indexSectionsWithContent = +{ + 0: "abcdefghijklmnoprstuvw~", + 1: "adefiknoprsv", + 2: "s", + 3: "is", + 4: "abcdefghiklmnoprstuvw~", + 5: "bdfiklopsv", + 6: "dep", + 7: "ejns", + 8: "abcdefimnopstu", + 9: "aos", + 10: "acdipt" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "enums", + 8: "enumvalues", + 9: "groups", + 10: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Typedefs", + 7: "Enumerations", + 8: "Enumerator", + 9: "Modules", + 10: "Pages" +}; + diff --git a/search/typedefs_0.html b/search/typedefs_0.html new file mode 100644 index 000000000..a4684c4ad --- /dev/null +++ b/search/typedefs_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 000000000..ef4a08f6e --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['depth_5ft_511',['depth_t',['../namespacesimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand.html#af941be7ff0cfaeb30d15d2fb52e76dd1',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand']]] +]; diff --git a/search/typedefs_1.html b/search/typedefs_1.html new file mode 100644 index 000000000..46cf01e62 --- /dev/null +++ b/search/typedefs_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_1.js b/search/typedefs_1.js new file mode 100644 index 000000000..b28c0f541 --- /dev/null +++ b/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['errorvalues_512',['ErrorValues',['../namespacesimdjson.html#a63b494af834917af13120dcd57719bdb',1,'simdjson']]] +]; diff --git a/search/typedefs_2.html b/search/typedefs_2.html new file mode 100644 index 000000000..6835ee65b --- /dev/null +++ b/search/typedefs_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_2.js b/search/typedefs_2.js new file mode 100644 index 000000000..7f31f3ab0 --- /dev/null +++ b/search/typedefs_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parsedjson_513',['ParsedJson',['../namespacesimdjson.html#a9245ff68919610377256bb9b21070e2a',1,'simdjson']]] +]; diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 000000000..1e477c08c --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 000000000..829908394 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buf_496',['buf',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a961b4870710d5ee1da938c4923d6f68d',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 000000000..ea73d9a49 --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 000000000..13fa9b2ad --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['default_5fmax_5fdepth_497',['DEFAULT_MAX_DEPTH',['../namespacesimdjson.html#a6df2598eb1d4e1ea669c41831cc7325d',1,'simdjson']]], + ['doc_498',['doc',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a4089d6265ec845fd85acd2db0973b858',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['document_5fdepth_499',['DOCUMENT_DEPTH',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a18847ef30e5800f1c628a344c23ec968',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 000000000..0580462e9 --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 000000000..24cf52ef2 --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['first_500',['first',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ae51247dce4e77f1e6067cfd4654cca30',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 000000000..0d69e7619 --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 000000000..be694c445 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['is_5farray_501',['is_array',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9b82f3273bb2f2f83b8e085b7d9c6613',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]], + ['iter_502',['iter',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array.html#a2d84851f9e4fc07b3e518ea957e2d9b6',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array::iter()'],['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document.html#a969e1000319391cd2bee3aed88481500',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::document::iter()']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 000000000..a4b6506bb --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 000000000..5bd56fc83 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key_503',['key',['../classsimdjson_1_1dom_1_1key__value__pair.html#a58c41d937401cfe88ceb6e71d7dbeb45',1,'simdjson::dom::key_value_pair']]] +]; diff --git a/search/variables_5.html b/search/variables_5.html new file mode 100644 index 000000000..7e345d16c --- /dev/null +++ b/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 000000000..c89484e54 --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['len_504',['len',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a132a95e1147b80c2533d1632185a6a09',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]] +]; diff --git a/search/variables_6.html b/search/variables_6.html new file mode 100644 index 000000000..7d48e75e2 --- /dev/null +++ b/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 000000000..723a773ac --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['open_5fcontainers_505',['open_containers',['../classsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1dom__parser__implementation.html#a9c67c6c782f1296319a58ec1586f2329',1,'simdjson::SIMDJSON_IMPLEMENTATION::dom_parser_implementation']]] +]; diff --git a/search/variables_7.html b/search/variables_7.html new file mode 100644 index 000000000..5c2634092 --- /dev/null +++ b/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 000000000..bc7db6210 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['payload_506',['payload',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa17e81138859bcef934d9502a9852049',1,'simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number']]] +]; diff --git a/search/variables_8.html b/search/variables_8.html new file mode 100644 index 000000000..dc9ec54a5 --- /dev/null +++ b/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 000000000..048f94ec3 --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['second_507',['second',['../structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a25289df3eaabd14f029e9872a6db3dfb',1,'simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base']]], + ['simdjson_5fmaxsize_5fbytes_508',['SIMDJSON_MAXSIZE_BYTES',['../namespacesimdjson.html#ac66973a7111dc4aa96ba7b3434344347',1,'simdjson']]], + ['simdjson_5fpadding_509',['SIMDJSON_PADDING',['../namespacesimdjson.html#aecdd750132f0eb123a6d61113b4197bf',1,'simdjson']]] +]; diff --git a/search/variables_9.html b/search/variables_9.html new file mode 100644 index 000000000..7b0147509 --- /dev/null +++ b/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 000000000..e2fde4e0b --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value_510',['value',['../classsimdjson_1_1dom_1_1key__value__pair.html#af7e38d9eb63a40256c9f936e45edf703',1,'simdjson::dom::key_value_pair']]] +]; diff --git a/simdjson_8h.html b/simdjson_8h.html new file mode 100644 index 000000000..8b724f45d --- /dev/null +++ b/simdjson_8h.html @@ -0,0 +1,109 @@ + + + + + + + +simdjson: include/simdjson/simdjson.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson.h File Reference
    +
    +
    + +

    Go to the source code of this file.

    +

    Detailed Description

    +
    Deprecated:
    We'll be removing this file so it isn't confused with the top level simdjson.h
    + +

    Definition in file simdjson.h.

    +
    +
    + + + + diff --git a/simdjson_8h_source.html b/simdjson_8h_source.html new file mode 100644 index 000000000..b0a316142 --- /dev/null +++ b/simdjson_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +simdjson: include/simdjson/simdjson.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef SIMDJSON_SIMDJSON_H
    +
    6 #define SIMDJSON_SIMDJSON_H
    +
    7 
    +
    8 #include "simdjson/compiler_check.h"
    +
    9 #include "simdjson/error.h"
    +
    10 
    +
    11 #endif // SIMDJSON_SIMDJSON_H
    +
    +
    + + + + diff --git a/simdjson__version_8h_source.html b/simdjson__version_8h_source.html new file mode 100644 index 000000000..9c5be709e --- /dev/null +++ b/simdjson__version_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +simdjson: include/simdjson/simdjson_version.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson_version.h
    +
    +
    +
    1 // /include/simdjson/simdjson_version.h automatically generated by release.py,
    +
    2 // do not change by hand
    +
    3 #ifndef SIMDJSON_SIMDJSON_VERSION_H
    +
    4 #define SIMDJSON_SIMDJSON_VERSION_H
    +
    5 
    +
    7 #define SIMDJSON_VERSION "3.1.0"
    +
    8 
    +
    9 namespace simdjson {
    +
    10 enum {
    + + + +
    23 };
    +
    24 } // namespace simdjson
    +
    25 
    +
    26 #endif // SIMDJSON_SIMDJSON_VERSION_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    @ SIMDJSON_VERSION_REVISION
    The revision (major.minor.REVISION) of simdjson being used.
    +
    @ SIMDJSON_VERSION_MINOR
    The minor version (major.MINOR.revision) of simdjson being used.
    +
    @ SIMDJSON_VERSION_MAJOR
    The major version (MAJOR.minor.revision) of simdjson being used.
    +
    +
    + + + + diff --git a/simdprune__tables_8h_source.html b/simdprune__tables_8h_source.html new file mode 100644 index 000000000..691e42acd --- /dev/null +++ b/simdprune__tables_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +simdjson: include/simdjson/internal/simdprune_tables.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdprune_tables.h
    +
    +
    +
    1 #ifndef SIMDJSON_INTERNAL_SIMDPRUNE_TABLES_H
    +
    2 #define SIMDJSON_INTERNAL_SIMDPRUNE_TABLES_H
    +
    3 
    +
    4 #include <cstdint>
    +
    5 
    +
    6 namespace simdjson { // table modified and copied from
    +
    7 namespace internal { // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetTable
    +
    8 
    +
    9 extern SIMDJSON_DLLIMPORTEXPORT const unsigned char BitsSetTable256mul2[256];
    +
    10 
    +
    11 extern SIMDJSON_DLLIMPORTEXPORT const uint8_t pshufb_combine_table[272];
    +
    12 
    +
    13 // 256 * 8 bytes = 2kB, easily fits in cache.
    +
    14 extern SIMDJSON_DLLIMPORTEXPORT const uint64_t thintable_epi8[256];
    +
    15 
    +
    16 } // namespace internal
    +
    17 } // namespace simdjson
    +
    18 
    +
    19 #endif // SIMDJSON_INTERNAL_SIMDPRUNE_TABLES_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/string__view_8hpp_source.html b/string__view_8hpp_source.html new file mode 100644 index 000000000..dd12c1bb5 --- /dev/null +++ b/string__view_8hpp_source.html @@ -0,0 +1,1743 @@ + + + + + + + +simdjson: include/simdjson/nonstd/string_view.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    string_view.hpp
    +
    +
    +
    1 // Copyright 2017-2020 by Martin Moene
    +
    2 //
    +
    3 // string-view lite, a C++17-like string_view for C++98 and later.
    +
    4 // For more information see https://github.com/martinmoene/string-view-lite
    +
    5 //
    +
    6 // Distributed under the Boost Software License, Version 1.0.
    +
    7 // (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    +
    8 
    +
    9 #pragma once
    +
    10 
    +
    11 #ifndef NONSTD_SV_LITE_H_INCLUDED
    +
    12 #define NONSTD_SV_LITE_H_INCLUDED
    +
    13 
    +
    14 #define string_view_lite_MAJOR 1
    +
    15 #define string_view_lite_MINOR 6
    +
    16 #define string_view_lite_PATCH 0
    +
    17 
    +
    18 #define string_view_lite_VERSION nssv_STRINGIFY(string_view_lite_MAJOR) "." nssv_STRINGIFY(string_view_lite_MINOR) "." nssv_STRINGIFY(string_view_lite_PATCH)
    +
    19 
    +
    20 #define nssv_STRINGIFY( x ) nssv_STRINGIFY_( x )
    +
    21 #define nssv_STRINGIFY_( x ) #x
    +
    22 
    +
    23 // string-view lite configuration:
    +
    24 
    +
    25 #define nssv_STRING_VIEW_DEFAULT 0
    +
    26 #define nssv_STRING_VIEW_NONSTD 1
    +
    27 #define nssv_STRING_VIEW_STD 2
    +
    28 
    +
    29 // tweak header support:
    +
    30 
    +
    31 #ifdef __has_include
    +
    32 # if __has_include(<nonstd/string_view.tweak.hpp>)
    +
    33 # include <nonstd/string_view.tweak.hpp>
    +
    34 # endif
    +
    35 #define nssv_HAVE_TWEAK_HEADER 1
    +
    36 #else
    +
    37 #define nssv_HAVE_TWEAK_HEADER 0
    +
    38 //# pragma message("string_view.hpp: Note: Tweak header not supported.")
    +
    39 #endif
    +
    40 
    +
    41 // string_view selection and configuration:
    +
    42 
    +
    43 #if !defined( nssv_CONFIG_SELECT_STRING_VIEW )
    +
    44 # define nssv_CONFIG_SELECT_STRING_VIEW ( nssv_HAVE_STD_STRING_VIEW ? nssv_STRING_VIEW_STD : nssv_STRING_VIEW_NONSTD )
    +
    45 #endif
    +
    46 
    +
    47 #ifndef nssv_CONFIG_STD_SV_OPERATOR
    +
    48 # define nssv_CONFIG_STD_SV_OPERATOR 0
    +
    49 #endif
    +
    50 
    +
    51 #ifndef nssv_CONFIG_USR_SV_OPERATOR
    +
    52 # define nssv_CONFIG_USR_SV_OPERATOR 1
    +
    53 #endif
    +
    54 
    +
    55 #ifdef nssv_CONFIG_CONVERSION_STD_STRING
    +
    56 # define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS nssv_CONFIG_CONVERSION_STD_STRING
    +
    57 # define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS nssv_CONFIG_CONVERSION_STD_STRING
    +
    58 #endif
    +
    59 
    +
    60 #ifndef nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS
    +
    61 # define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS 1
    +
    62 #endif
    +
    63 
    +
    64 #ifndef nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    65 # define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS 1
    +
    66 #endif
    +
    67 
    +
    68 #ifndef nssv_CONFIG_NO_STREAM_INSERTION
    +
    69 # define nssv_CONFIG_NO_STREAM_INSERTION 0
    +
    70 #endif
    +
    71 
    +
    72 // Control presence of exception handling (try and auto discover):
    +
    73 
    +
    74 #ifndef nssv_CONFIG_NO_EXCEPTIONS
    +
    75 # if _MSC_VER
    +
    76 # include <cstddef> // for _HAS_EXCEPTIONS
    +
    77 # endif
    +
    78 # if defined(__cpp_exceptions) || defined(__EXCEPTIONS) || (_HAS_EXCEPTIONS)
    +
    79 # define nssv_CONFIG_NO_EXCEPTIONS 0
    +
    80 # else
    +
    81 # define nssv_CONFIG_NO_EXCEPTIONS 1
    +
    82 # endif
    +
    83 #endif
    +
    84 
    +
    85 // C++ language version detection (C++20 is speculative):
    +
    86 // Note: VC14.0/1900 (VS2015) lacks too much from C++14.
    +
    87 
    +
    88 #ifndef nssv_CPLUSPLUS
    +
    89 # if defined(_MSVC_LANG ) && !defined(__clang__)
    +
    90 # define nssv_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG )
    +
    91 # else
    +
    92 # define nssv_CPLUSPLUS __cplusplus
    +
    93 # endif
    +
    94 #endif
    +
    95 
    +
    96 #define nssv_CPP98_OR_GREATER ( nssv_CPLUSPLUS >= 199711L )
    +
    97 #define nssv_CPP11_OR_GREATER ( nssv_CPLUSPLUS >= 201103L )
    +
    98 #define nssv_CPP11_OR_GREATER_ ( nssv_CPLUSPLUS >= 201103L )
    +
    99 #define nssv_CPP14_OR_GREATER ( nssv_CPLUSPLUS >= 201402L )
    +
    100 #define nssv_CPP17_OR_GREATER ( nssv_CPLUSPLUS >= 201703L )
    +
    101 #define nssv_CPP20_OR_GREATER ( nssv_CPLUSPLUS >= 202000L )
    +
    102 
    +
    103 // use C++17 std::string_view if available and requested:
    +
    104 
    +
    105 #if nssv_CPP17_OR_GREATER && defined(__has_include )
    +
    106 # if __has_include( <string_view> )
    +
    107 # define nssv_HAVE_STD_STRING_VIEW 1
    +
    108 # else
    +
    109 # define nssv_HAVE_STD_STRING_VIEW 0
    +
    110 # endif
    +
    111 #else
    +
    112 # define nssv_HAVE_STD_STRING_VIEW 0
    +
    113 #endif
    +
    114 
    +
    115 #define nssv_USES_STD_STRING_VIEW ( (nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_STD) || ((nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_DEFAULT) && nssv_HAVE_STD_STRING_VIEW) )
    +
    116 
    +
    117 #define nssv_HAVE_STARTS_WITH ( nssv_CPP20_OR_GREATER || !nssv_USES_STD_STRING_VIEW )
    +
    118 #define nssv_HAVE_ENDS_WITH nssv_HAVE_STARTS_WITH
    +
    119 
    +
    120 //
    +
    121 // Use C++17 std::string_view:
    +
    122 //
    +
    123 
    +
    124 #if nssv_USES_STD_STRING_VIEW
    +
    125 
    +
    126 #include <string_view>
    +
    127 
    +
    128 // Extensions for std::string:
    +
    129 
    +
    130 #if nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    131 
    +
    132 namespace nonstd {
    +
    133 
    +
    134 template< class CharT, class Traits, class Allocator = std::allocator<CharT> >
    +
    135 std::basic_string<CharT, Traits, Allocator>
    +
    136 to_string( std::basic_string_view<CharT, Traits> v, Allocator const & a = Allocator() )
    +
    137 {
    +
    138  return std::basic_string<CharT,Traits, Allocator>( v.begin(), v.end(), a );
    +
    139 }
    +
    140 
    +
    141 template< class CharT, class Traits, class Allocator >
    +
    142 std::basic_string_view<CharT, Traits>
    +
    143 to_string_view( std::basic_string<CharT, Traits, Allocator> const & s )
    +
    144 {
    +
    145  return std::basic_string_view<CharT, Traits>( s.data(), s.size() );
    +
    146 }
    +
    147 
    +
    148 // Literal operators sv and _sv:
    +
    149 
    +
    150 #if nssv_CONFIG_STD_SV_OPERATOR
    +
    151 
    +
    152 using namespace std::literals::string_view_literals;
    +
    153 
    +
    154 #endif
    +
    155 
    +
    156 #if nssv_CONFIG_USR_SV_OPERATOR
    +
    157 
    +
    158 inline namespace literals {
    +
    159 inline namespace string_view_literals {
    +
    160 
    +
    161 
    +
    162 constexpr std::string_view operator "" _sv( const char* str, size_t len ) noexcept // (1)
    +
    163 {
    +
    164  return std::string_view{ str, len };
    +
    165 }
    +
    166 
    +
    167 constexpr std::u16string_view operator "" _sv( const char16_t* str, size_t len ) noexcept // (2)
    +
    168 {
    +
    169  return std::u16string_view{ str, len };
    +
    170 }
    +
    171 
    +
    172 constexpr std::u32string_view operator "" _sv( const char32_t* str, size_t len ) noexcept // (3)
    +
    173 {
    +
    174  return std::u32string_view{ str, len };
    +
    175 }
    +
    176 
    +
    177 constexpr std::wstring_view operator "" _sv( const wchar_t* str, size_t len ) noexcept // (4)
    +
    178 {
    +
    179  return std::wstring_view{ str, len };
    +
    180 }
    +
    181 
    +
    182 }} // namespace literals::string_view_literals
    +
    183 
    +
    184 #endif // nssv_CONFIG_USR_SV_OPERATOR
    +
    185 
    +
    186 } // namespace nonstd
    +
    187 
    +
    188 #endif // nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    189 
    +
    190 namespace nonstd {
    +
    191 
    +
    192 using std::string_view;
    +
    193 using std::wstring_view;
    +
    194 using std::u16string_view;
    +
    195 using std::u32string_view;
    +
    196 using std::basic_string_view;
    +
    197 
    +
    198 // literal "sv" and "_sv", see above
    +
    199 
    +
    200 using std::operator==;
    +
    201 using std::operator!=;
    +
    202 using std::operator<;
    +
    203 using std::operator<=;
    +
    204 using std::operator>;
    +
    205 using std::operator>=;
    +
    206 
    +
    207 using std::operator<<;
    +
    208 
    +
    209 } // namespace nonstd
    +
    210 
    +
    211 #else // nssv_HAVE_STD_STRING_VIEW
    +
    212 
    +
    213 //
    +
    214 // Before C++17: use string_view lite:
    +
    215 //
    +
    216 
    +
    217 // Compiler versions:
    +
    218 //
    +
    219 // MSVC++ 6.0 _MSC_VER == 1200 nssv_COMPILER_MSVC_VERSION == 60 (Visual Studio 6.0)
    +
    220 // MSVC++ 7.0 _MSC_VER == 1300 nssv_COMPILER_MSVC_VERSION == 70 (Visual Studio .NET 2002)
    +
    221 // MSVC++ 7.1 _MSC_VER == 1310 nssv_COMPILER_MSVC_VERSION == 71 (Visual Studio .NET 2003)
    +
    222 // MSVC++ 8.0 _MSC_VER == 1400 nssv_COMPILER_MSVC_VERSION == 80 (Visual Studio 2005)
    +
    223 // MSVC++ 9.0 _MSC_VER == 1500 nssv_COMPILER_MSVC_VERSION == 90 (Visual Studio 2008)
    +
    224 // MSVC++ 10.0 _MSC_VER == 1600 nssv_COMPILER_MSVC_VERSION == 100 (Visual Studio 2010)
    +
    225 // MSVC++ 11.0 _MSC_VER == 1700 nssv_COMPILER_MSVC_VERSION == 110 (Visual Studio 2012)
    +
    226 // MSVC++ 12.0 _MSC_VER == 1800 nssv_COMPILER_MSVC_VERSION == 120 (Visual Studio 2013)
    +
    227 // MSVC++ 14.0 _MSC_VER == 1900 nssv_COMPILER_MSVC_VERSION == 140 (Visual Studio 2015)
    +
    228 // MSVC++ 14.1 _MSC_VER >= 1910 nssv_COMPILER_MSVC_VERSION == 141 (Visual Studio 2017)
    +
    229 // MSVC++ 14.2 _MSC_VER >= 1920 nssv_COMPILER_MSVC_VERSION == 142 (Visual Studio 2019)
    +
    230 
    +
    231 #if defined(_MSC_VER ) && !defined(__clang__)
    +
    232 # define nssv_COMPILER_MSVC_VER (_MSC_VER )
    +
    233 # define nssv_COMPILER_MSVC_VERSION (_MSC_VER / 10 - 10 * ( 5 + (_MSC_VER < 1900 ) ) )
    +
    234 #else
    +
    235 # define nssv_COMPILER_MSVC_VER 0
    +
    236 # define nssv_COMPILER_MSVC_VERSION 0
    +
    237 #endif
    +
    238 
    +
    239 #define nssv_COMPILER_VERSION( major, minor, patch ) ( 10 * ( 10 * (major) + (minor) ) + (patch) )
    +
    240 
    +
    241 #if defined( __apple_build_version__ )
    +
    242 # define nssv_COMPILER_APPLECLANG_VERSION nssv_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
    +
    243 # define nssv_COMPILER_CLANG_VERSION 0
    +
    244 #elif defined( __clang__ )
    +
    245 # define nssv_COMPILER_APPLECLANG_VERSION 0
    +
    246 # define nssv_COMPILER_CLANG_VERSION nssv_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
    +
    247 #else
    +
    248 # define nssv_COMPILER_APPLECLANG_VERSION 0
    +
    249 # define nssv_COMPILER_CLANG_VERSION 0
    +
    250 #endif
    +
    251 
    +
    252 #if defined(__GNUC__) && !defined(__clang__)
    +
    253 # define nssv_COMPILER_GNUC_VERSION nssv_COMPILER_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
    +
    254 #else
    +
    255 # define nssv_COMPILER_GNUC_VERSION 0
    +
    256 #endif
    +
    257 
    +
    258 // half-open range [lo..hi):
    +
    259 #define nssv_BETWEEN( v, lo, hi ) ( (lo) <= (v) && (v) < (hi) )
    +
    260 
    +
    261 // Presence of language and library features:
    +
    262 
    +
    263 #ifdef _HAS_CPP0X
    +
    264 # define nssv_HAS_CPP0X _HAS_CPP0X
    +
    265 #else
    +
    266 # define nssv_HAS_CPP0X 0
    +
    267 #endif
    +
    268 
    +
    269 // Unless defined otherwise below, consider VC14 as C++11 for variant-lite:
    +
    270 
    +
    271 #if nssv_COMPILER_MSVC_VER >= 1900
    +
    272 # undef nssv_CPP11_OR_GREATER
    +
    273 # define nssv_CPP11_OR_GREATER 1
    +
    274 #endif
    +
    275 
    +
    276 #define nssv_CPP11_90 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1500)
    +
    277 #define nssv_CPP11_100 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1600)
    +
    278 #define nssv_CPP11_110 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1700)
    +
    279 #define nssv_CPP11_120 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1800)
    +
    280 #define nssv_CPP11_140 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1900)
    +
    281 #define nssv_CPP11_141 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1910)
    +
    282 
    +
    283 #define nssv_CPP14_000 (nssv_CPP14_OR_GREATER)
    +
    284 #define nssv_CPP17_000 (nssv_CPP17_OR_GREATER)
    +
    285 
    +
    286 // Presence of C++11 language features:
    +
    287 
    +
    288 #define nssv_HAVE_CONSTEXPR_11 nssv_CPP11_140
    +
    289 #define nssv_HAVE_EXPLICIT_CONVERSION nssv_CPP11_140
    +
    290 #define nssv_HAVE_INLINE_NAMESPACE nssv_CPP11_140
    +
    291 #define nssv_HAVE_NOEXCEPT nssv_CPP11_140
    +
    292 #define nssv_HAVE_NULLPTR nssv_CPP11_100
    +
    293 #define nssv_HAVE_REF_QUALIFIER nssv_CPP11_140
    +
    294 #define nssv_HAVE_UNICODE_LITERALS nssv_CPP11_140
    +
    295 #define nssv_HAVE_USER_DEFINED_LITERALS nssv_CPP11_140
    +
    296 #define nssv_HAVE_WCHAR16_T nssv_CPP11_100
    +
    297 #define nssv_HAVE_WCHAR32_T nssv_CPP11_100
    +
    298 
    +
    299 #if ! ( ( nssv_CPP11_OR_GREATER && nssv_COMPILER_CLANG_VERSION ) || nssv_BETWEEN( nssv_COMPILER_CLANG_VERSION, 300, 400 ) )
    +
    300 # define nssv_HAVE_STD_DEFINED_LITERALS nssv_CPP11_140
    +
    301 #else
    +
    302 # define nssv_HAVE_STD_DEFINED_LITERALS 0
    +
    303 #endif
    +
    304 
    +
    305 // Presence of C++14 language features:
    +
    306 
    +
    307 #define nssv_HAVE_CONSTEXPR_14 nssv_CPP14_000
    +
    308 
    +
    309 // Presence of C++17 language features:
    +
    310 
    +
    311 #define nssv_HAVE_NODISCARD nssv_CPP17_000
    +
    312 
    +
    313 // Presence of C++ library features:
    +
    314 
    +
    315 #define nssv_HAVE_STD_HASH nssv_CPP11_120
    +
    316 
    +
    317 // Presence of compiler intrinsics:
    +
    318 
    +
    319 // Providing char-type specializations for compare() and length() that
    +
    320 // use compiler intrinsics can improve compile- and run-time performance.
    +
    321 //
    +
    322 // The challenge is in using the right combinations of builtin availability
    +
    323 // and its constexpr-ness.
    +
    324 //
    +
    325 // | compiler | __builtin_memcmp (constexpr) | memcmp (constexpr) |
    +
    326 // |----------|------------------------------|---------------------|
    +
    327 // | clang | 4.0 (>= 4.0 ) | any (? ) |
    +
    328 // | clang-a | 9.0 (>= 9.0 ) | any (? ) |
    +
    329 // | gcc | any (constexpr) | any (? ) |
    +
    330 // | msvc | >= 14.2 C++17 (>= 14.2 ) | any (? ) |
    +
    331 
    +
    332 #define nssv_HAVE_BUILTIN_VER ( (nssv_CPP17_000 && nssv_COMPILER_MSVC_VERSION >= 142) || nssv_COMPILER_GNUC_VERSION > 0 || nssv_COMPILER_CLANG_VERSION >= 400 || nssv_COMPILER_APPLECLANG_VERSION >= 900 )
    +
    333 #define nssv_HAVE_BUILTIN_CE ( nssv_HAVE_BUILTIN_VER )
    +
    334 
    +
    335 #define nssv_HAVE_BUILTIN_MEMCMP ( (nssv_HAVE_CONSTEXPR_14 && nssv_HAVE_BUILTIN_CE) || !nssv_HAVE_CONSTEXPR_14 )
    +
    336 #define nssv_HAVE_BUILTIN_STRLEN ( (nssv_HAVE_CONSTEXPR_11 && nssv_HAVE_BUILTIN_CE) || !nssv_HAVE_CONSTEXPR_11 )
    +
    337 
    +
    338 #ifdef __has_builtin
    +
    339 # define nssv_HAVE_BUILTIN( x ) __has_builtin( x )
    +
    340 #else
    +
    341 # define nssv_HAVE_BUILTIN( x ) 0
    +
    342 #endif
    +
    343 
    +
    344 #if nssv_HAVE_BUILTIN(__builtin_memcmp) || nssv_HAVE_BUILTIN_VER
    +
    345 # define nssv_BUILTIN_MEMCMP __builtin_memcmp
    +
    346 #else
    +
    347 # define nssv_BUILTIN_MEMCMP memcmp
    +
    348 #endif
    +
    349 
    +
    350 #if nssv_HAVE_BUILTIN(__builtin_strlen) || nssv_HAVE_BUILTIN_VER
    +
    351 # define nssv_BUILTIN_STRLEN __builtin_strlen
    +
    352 #else
    +
    353 # define nssv_BUILTIN_STRLEN strlen
    +
    354 #endif
    +
    355 
    +
    356 // C++ feature usage:
    +
    357 
    +
    358 #if nssv_HAVE_CONSTEXPR_11
    +
    359 # define nssv_constexpr constexpr
    +
    360 #else
    +
    361 # define nssv_constexpr /*constexpr*/
    +
    362 #endif
    +
    363 
    +
    364 #if nssv_HAVE_CONSTEXPR_14
    +
    365 # define nssv_constexpr14 constexpr
    +
    366 #else
    +
    367 # define nssv_constexpr14 /*constexpr*/
    +
    368 #endif
    +
    369 
    +
    370 #if nssv_HAVE_EXPLICIT_CONVERSION
    +
    371 # define nssv_explicit explicit
    +
    372 #else
    +
    373 # define nssv_explicit /*explicit*/
    +
    374 #endif
    +
    375 
    +
    376 #if nssv_HAVE_INLINE_NAMESPACE
    +
    377 # define nssv_inline_ns inline
    +
    378 #else
    +
    379 # define nssv_inline_ns /*inline*/
    +
    380 #endif
    +
    381 
    +
    382 #if nssv_HAVE_NOEXCEPT
    +
    383 # define nssv_noexcept noexcept
    +
    384 #else
    +
    385 # define nssv_noexcept /*noexcept*/
    +
    386 #endif
    +
    387 
    +
    388 //#if nssv_HAVE_REF_QUALIFIER
    +
    389 //# define nssv_ref_qual &
    +
    390 //# define nssv_refref_qual &&
    +
    391 //#else
    +
    392 //# define nssv_ref_qual /*&*/
    +
    393 //# define nssv_refref_qual /*&&*/
    +
    394 //#endif
    +
    395 
    +
    396 #if nssv_HAVE_NULLPTR
    +
    397 # define nssv_nullptr nullptr
    +
    398 #else
    +
    399 # define nssv_nullptr NULL
    +
    400 #endif
    +
    401 
    +
    402 #if nssv_HAVE_NODISCARD
    +
    403 # define nssv_nodiscard [[nodiscard]]
    +
    404 #else
    +
    405 # define nssv_nodiscard /*[[nodiscard]]*/
    +
    406 #endif
    +
    407 
    +
    408 // Additional includes:
    +
    409 
    +
    410 #include <algorithm>
    +
    411 #include <cassert>
    +
    412 #include <iterator>
    +
    413 #include <limits>
    +
    414 #include <string> // std::char_traits<>
    +
    415 
    +
    416 #if ! nssv_CONFIG_NO_STREAM_INSERTION
    +
    417 # include <ostream>
    +
    418 #endif
    +
    419 
    +
    420 #if ! nssv_CONFIG_NO_EXCEPTIONS
    +
    421 # include <stdexcept>
    +
    422 #endif
    +
    423 
    +
    424 #if nssv_CPP11_OR_GREATER
    +
    425 # include <type_traits>
    +
    426 #endif
    +
    427 
    +
    428 // Clang, GNUC, MSVC warning suppression macros:
    +
    429 
    +
    430 #if defined(__clang__)
    +
    431 # pragma clang diagnostic ignored "-Wreserved-user-defined-literal"
    +
    432 # pragma clang diagnostic push
    +
    433 # pragma clang diagnostic ignored "-Wuser-defined-literals"
    +
    434 #elif defined(__GNUC__)
    +
    435 # pragma GCC diagnostic push
    +
    436 # pragma GCC diagnostic ignored "-Wliteral-suffix"
    +
    437 #endif // __clang__
    +
    438 
    +
    439 #if nssv_COMPILER_MSVC_VERSION >= 140
    +
    440 # define nssv_SUPPRESS_MSGSL_WARNING(expr) [[gsl::suppress(expr)]]
    +
    441 # define nssv_SUPPRESS_MSVC_WARNING(code, descr) __pragma(warning(suppress: code) )
    +
    442 # define nssv_DISABLE_MSVC_WARNINGS(codes) __pragma(warning(push)) __pragma(warning(disable: codes))
    +
    443 #else
    +
    444 # define nssv_SUPPRESS_MSGSL_WARNING(expr)
    +
    445 # define nssv_SUPPRESS_MSVC_WARNING(code, descr)
    +
    446 # define nssv_DISABLE_MSVC_WARNINGS(codes)
    +
    447 #endif
    +
    448 
    +
    449 #if defined(__clang__)
    +
    450 # define nssv_RESTORE_WARNINGS() _Pragma("clang diagnostic pop")
    +
    451 #elif defined(__GNUC__)
    +
    452 # define nssv_RESTORE_WARNINGS() _Pragma("GCC diagnostic pop")
    +
    453 #elif nssv_COMPILER_MSVC_VERSION >= 140
    +
    454 # define nssv_RESTORE_WARNINGS() __pragma(warning(pop ))
    +
    455 #else
    +
    456 # define nssv_RESTORE_WARNINGS()
    +
    457 #endif
    +
    458 
    +
    459 // Suppress the following MSVC (GSL) warnings:
    +
    460 // - C4455, non-gsl : 'operator ""sv': literal suffix identifiers that do not
    +
    461 // start with an underscore are reserved
    +
    462 // - C26472, gsl::t.1 : don't use a static_cast for arithmetic conversions;
    +
    463 // use brace initialization, gsl::narrow_cast or gsl::narow
    +
    464 // - C26481: gsl::b.1 : don't use pointer arithmetic. Use span instead
    +
    465 
    +
    466 nssv_DISABLE_MSVC_WARNINGS( 4455 26481 26472 )
    +
    467 //nssv_DISABLE_CLANG_WARNINGS( "-Wuser-defined-literals" )
    +
    468 //nssv_DISABLE_GNUC_WARNINGS( -Wliteral-suffix )
    +
    469 
    +
    470 namespace nonstd { namespace sv_lite {
    +
    471 
    +
    472 namespace detail {
    +
    473 
    +
    474 // support constexpr comparison in C++14;
    +
    475 // for C++17 and later, use provided traits:
    +
    476 
    +
    477 template< typename CharT >
    +
    478 inline nssv_constexpr14 int compare( CharT const * s1, CharT const * s2, std::size_t count )
    +
    479 {
    +
    480  while ( count-- != 0 )
    +
    481  {
    +
    482  if ( *s1 < *s2 ) return -1;
    +
    483  if ( *s1 > *s2 ) return +1;
    +
    484  ++s1; ++s2;
    +
    485  }
    +
    486  return 0;
    +
    487 }
    +
    488 
    +
    489 #if nssv_HAVE_BUILTIN_MEMCMP
    +
    490 
    +
    491 // specialization of compare() for char, see also generic compare() above:
    +
    492 
    +
    493 inline nssv_constexpr14 int compare( char const * s1, char const * s2, std::size_t count )
    +
    494 {
    +
    495  return nssv_BUILTIN_MEMCMP( s1, s2, count );
    +
    496 }
    +
    497 
    +
    498 #endif
    +
    499 
    +
    500 #if nssv_HAVE_BUILTIN_STRLEN
    +
    501 
    +
    502 // specialization of length() for char, see also generic length() further below:
    +
    503 
    +
    504 inline nssv_constexpr std::size_t length( char const * s )
    +
    505 {
    +
    506  return nssv_BUILTIN_STRLEN( s );
    +
    507 }
    +
    508 
    +
    509 #endif
    +
    510 
    +
    511 #if defined(__OPTIMIZE__)
    +
    512 
    +
    513 // gcc, clang provide __OPTIMIZE__
    +
    514 // Expect tail call optimization to make length() non-recursive:
    +
    515 
    +
    516 template< typename CharT >
    +
    517 inline nssv_constexpr std::size_t length( CharT * s, std::size_t result = 0 )
    +
    518 {
    +
    519  return *s == '\0' ? result : length( s + 1, result + 1 );
    +
    520 }
    +
    521 
    +
    522 #else // OPTIMIZE
    +
    523 
    +
    524 // non-recursive:
    +
    525 
    +
    526 template< typename CharT >
    +
    527 inline nssv_constexpr14 std::size_t length( CharT * s )
    +
    528 {
    +
    529  std::size_t result = 0;
    +
    530  while ( *s++ != '\0' )
    +
    531  {
    +
    532  ++result;
    +
    533  }
    +
    534  return result;
    +
    535 }
    +
    536 
    +
    537 #endif // OPTIMIZE
    +
    538 
    +
    539 } // namespace detail
    +
    540 
    +
    541 template
    +
    542 <
    +
    543  class CharT,
    +
    544  class Traits = std::char_traits<CharT>
    +
    545 >
    +
    546 class basic_string_view;
    +
    547 
    +
    548 //
    +
    549 // basic_string_view:
    +
    550 //
    +
    551 
    +
    552 template
    +
    553 <
    +
    554  class CharT,
    +
    555  class Traits /* = std::char_traits<CharT> */
    +
    556 >
    +
    557 class basic_string_view
    +
    558 {
    +
    559 public:
    +
    560  // Member types:
    +
    561 
    +
    562  typedef Traits traits_type;
    +
    563  typedef CharT value_type;
    +
    564 
    +
    565  typedef CharT * pointer;
    +
    566  typedef CharT const * const_pointer;
    +
    567  typedef CharT & reference;
    +
    568  typedef CharT const & const_reference;
    +
    569 
    +
    570  typedef const_pointer iterator;
    +
    571  typedef const_pointer const_iterator;
    +
    572  typedef std::reverse_iterator< const_iterator > reverse_iterator;
    +
    573  typedef std::reverse_iterator< const_iterator > const_reverse_iterator;
    +
    574 
    +
    575  typedef std::size_t size_type;
    +
    576  typedef std::ptrdiff_t difference_type;
    +
    577 
    +
    578  // 24.4.2.1 Construction and assignment:
    +
    579 
    +
    580  nssv_constexpr basic_string_view() nssv_noexcept
    +
    581  : data_( nssv_nullptr )
    +
    582  , size_( 0 )
    +
    583  {}
    +
    584 
    +
    585 #if nssv_CPP11_OR_GREATER
    +
    586  nssv_constexpr basic_string_view( basic_string_view const & other ) nssv_noexcept = default;
    +
    587 #else
    +
    588  nssv_constexpr basic_string_view( basic_string_view const & other ) nssv_noexcept
    +
    589  : data_( other.data_)
    +
    590  , size_( other.size_)
    +
    591  {}
    +
    592 #endif
    +
    593 
    +
    594  nssv_constexpr basic_string_view( CharT const * s, size_type count ) nssv_noexcept // non-standard noexcept
    +
    595  : data_( s )
    +
    596  , size_( count )
    +
    597  {}
    +
    598 
    +
    599  nssv_constexpr basic_string_view( CharT const * s) nssv_noexcept // non-standard noexcept
    +
    600  : data_( s )
    +
    601 #if nssv_CPP17_OR_GREATER
    +
    602  , size_( Traits::length(s) )
    +
    603 #elif nssv_CPP11_OR_GREATER
    +
    604  , size_( detail::length(s) )
    +
    605 #else
    +
    606  , size_( Traits::length(s) )
    +
    607 #endif
    +
    608  {}
    +
    609 
    +
    610  // Assignment:
    +
    611 
    +
    612 #if nssv_CPP11_OR_GREATER
    +
    613  nssv_constexpr14 basic_string_view & operator=( basic_string_view const & other ) nssv_noexcept = default;
    +
    614 #else
    +
    615  nssv_constexpr14 basic_string_view & operator=( basic_string_view const & other ) nssv_noexcept
    +
    616  {
    +
    617  data_ = other.data_;
    +
    618  size_ = other.size_;
    +
    619  return *this;
    +
    620  }
    +
    621 #endif
    +
    622 
    +
    623  // 24.4.2.2 Iterator support:
    +
    624 
    +
    625  nssv_constexpr const_iterator begin() const nssv_noexcept { return data_; }
    +
    626  nssv_constexpr const_iterator end() const nssv_noexcept { return data_ + size_; }
    +
    627 
    +
    628  nssv_constexpr const_iterator cbegin() const nssv_noexcept { return begin(); }
    +
    629  nssv_constexpr const_iterator cend() const nssv_noexcept { return end(); }
    +
    630 
    +
    631  nssv_constexpr const_reverse_iterator rbegin() const nssv_noexcept { return const_reverse_iterator( end() ); }
    +
    632  nssv_constexpr const_reverse_iterator rend() const nssv_noexcept { return const_reverse_iterator( begin() ); }
    +
    633 
    +
    634  nssv_constexpr const_reverse_iterator crbegin() const nssv_noexcept { return rbegin(); }
    +
    635  nssv_constexpr const_reverse_iterator crend() const nssv_noexcept { return rend(); }
    +
    636 
    +
    637  // 24.4.2.3 Capacity:
    +
    638 
    +
    639  nssv_constexpr size_type size() const nssv_noexcept { return size_; }
    +
    640  nssv_constexpr size_type length() const nssv_noexcept { return size_; }
    +
    641  nssv_constexpr size_type max_size() const nssv_noexcept { return (std::numeric_limits< size_type >::max)(); }
    +
    642 
    +
    643  // since C++20
    +
    644  nssv_nodiscard nssv_constexpr bool empty() const nssv_noexcept
    +
    645  {
    +
    646  return 0 == size_;
    +
    647  }
    +
    648 
    +
    649  // 24.4.2.4 Element access:
    +
    650 
    +
    651  nssv_constexpr const_reference operator[]( size_type pos ) const
    +
    652  {
    +
    653  return data_at( pos );
    +
    654  }
    +
    655 
    +
    656  nssv_constexpr14 const_reference at( size_type pos ) const
    +
    657  {
    +
    658 #if nssv_CONFIG_NO_EXCEPTIONS
    +
    659  assert( pos < size() );
    +
    660 #else
    +
    661  if ( pos >= size() )
    +
    662  {
    +
    663  throw std::out_of_range("nonstd::string_view::at()");
    +
    664  }
    +
    665 #endif
    +
    666  return data_at( pos );
    +
    667  }
    +
    668 
    +
    669  nssv_constexpr const_reference front() const { return data_at( 0 ); }
    +
    670  nssv_constexpr const_reference back() const { return data_at( size() - 1 ); }
    +
    671 
    +
    672  nssv_constexpr const_pointer data() const nssv_noexcept { return data_; }
    +
    673 
    +
    674  // 24.4.2.5 Modifiers:
    +
    675 
    +
    676  nssv_constexpr14 void remove_prefix( size_type n )
    +
    677  {
    +
    678  assert( n <= size() );
    +
    679  data_ += n;
    +
    680  size_ -= n;
    +
    681  }
    +
    682 
    +
    683  nssv_constexpr14 void remove_suffix( size_type n )
    +
    684  {
    +
    685  assert( n <= size() );
    +
    686  size_ -= n;
    +
    687  }
    +
    688 
    +
    689  nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept
    +
    690  {
    +
    691  const basic_string_view tmp(other);
    +
    692  other = *this;
    +
    693  *this = tmp;
    +
    694  }
    +
    695 
    +
    696  // 24.4.2.6 String operations:
    +
    697 
    +
    698  size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const
    +
    699  {
    +
    700 #if nssv_CONFIG_NO_EXCEPTIONS
    +
    701  assert( pos <= size() );
    +
    702 #else
    +
    703  if ( pos > size() )
    +
    704  {
    +
    705  throw std::out_of_range("nonstd::string_view::copy()");
    +
    706  }
    +
    707 #endif
    +
    708  const size_type rlen = (std::min)( n, size() - pos );
    +
    709 
    +
    710  (void) Traits::copy( dest, data() + pos, rlen );
    +
    711 
    +
    712  return rlen;
    +
    713  }
    +
    714 
    +
    715  nssv_constexpr14 basic_string_view substr( size_type pos = 0, size_type n = npos ) const
    +
    716  {
    +
    717 #if nssv_CONFIG_NO_EXCEPTIONS
    +
    718  assert( pos <= size() );
    +
    719 #else
    +
    720  if ( pos > size() )
    +
    721  {
    +
    722  throw std::out_of_range("nonstd::string_view::substr()");
    +
    723  }
    +
    724 #endif
    +
    725  return basic_string_view( data() + pos, (std::min)( n, size() - pos ) );
    +
    726  }
    +
    727 
    +
    728  // compare(), 6x:
    +
    729 
    +
    730  nssv_constexpr14 int compare( basic_string_view other ) const nssv_noexcept // (1)
    +
    731  {
    +
    732 #if nssv_CPP17_OR_GREATER
    +
    733  if ( const int result = Traits::compare( data(), other.data(), (std::min)( size(), other.size() ) ) )
    +
    734 #else
    +
    735  if ( const int result = detail::compare( data(), other.data(), (std::min)( size(), other.size() ) ) )
    +
    736 #endif
    +
    737  {
    +
    738  return result;
    +
    739  }
    +
    740 
    +
    741  return size() == other.size() ? 0 : size() < other.size() ? -1 : 1;
    +
    742  }
    +
    743 
    +
    744  nssv_constexpr int compare( size_type pos1, size_type n1, basic_string_view other ) const // (2)
    +
    745  {
    +
    746  return substr( pos1, n1 ).compare( other );
    +
    747  }
    +
    748 
    +
    749  nssv_constexpr int compare( size_type pos1, size_type n1, basic_string_view other, size_type pos2, size_type n2 ) const // (3)
    +
    750  {
    +
    751  return substr( pos1, n1 ).compare( other.substr( pos2, n2 ) );
    +
    752  }
    +
    753 
    +
    754  nssv_constexpr int compare( CharT const * s ) const // (4)
    +
    755  {
    +
    756  return compare( basic_string_view( s ) );
    +
    757  }
    +
    758 
    +
    759  nssv_constexpr int compare( size_type pos1, size_type n1, CharT const * s ) const // (5)
    +
    760  {
    +
    761  return substr( pos1, n1 ).compare( basic_string_view( s ) );
    +
    762  }
    +
    763 
    +
    764  nssv_constexpr int compare( size_type pos1, size_type n1, CharT const * s, size_type n2 ) const // (6)
    +
    765  {
    +
    766  return substr( pos1, n1 ).compare( basic_string_view( s, n2 ) );
    +
    767  }
    +
    768 
    +
    769  // 24.4.2.7 Searching:
    +
    770 
    +
    771  // starts_with(), 3x, since C++20:
    +
    772 
    +
    773  nssv_constexpr bool starts_with( basic_string_view v ) const nssv_noexcept // (1)
    +
    774  {
    +
    775  return size() >= v.size() && compare( 0, v.size(), v ) == 0;
    +
    776  }
    +
    777 
    +
    778  nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept // (2)
    +
    779  {
    +
    780  return starts_with( basic_string_view( &c, 1 ) );
    +
    781  }
    +
    782 
    +
    783  nssv_constexpr bool starts_with( CharT const * s ) const // (3)
    +
    784  {
    +
    785  return starts_with( basic_string_view( s ) );
    +
    786  }
    +
    787 
    +
    788  // ends_with(), 3x, since C++20:
    +
    789 
    +
    790  nssv_constexpr bool ends_with( basic_string_view v ) const nssv_noexcept // (1)
    +
    791  {
    +
    792  return size() >= v.size() && compare( size() - v.size(), npos, v ) == 0;
    +
    793  }
    +
    794 
    +
    795  nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept // (2)
    +
    796  {
    +
    797  return ends_with( basic_string_view( &c, 1 ) );
    +
    798  }
    +
    799 
    +
    800  nssv_constexpr bool ends_with( CharT const * s ) const // (3)
    +
    801  {
    +
    802  return ends_with( basic_string_view( s ) );
    +
    803  }
    +
    804 
    +
    805  // find(), 4x:
    +
    806 
    +
    807  nssv_constexpr14 size_type find( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1)
    +
    808  {
    +
    809  return assert( v.size() == 0 || v.data() != nssv_nullptr )
    +
    810  , pos >= size()
    +
    811  ? npos
    +
    812  : to_pos( std::search( cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq ) );
    +
    813  }
    +
    814 
    +
    815  nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) const nssv_noexcept // (2)
    +
    816  {
    +
    817  return find( basic_string_view( &c, 1 ), pos );
    +
    818  }
    +
    819 
    +
    820  nssv_constexpr14 size_type find( CharT const * s, size_type pos, size_type n ) const // (3)
    +
    821  {
    +
    822  return find( basic_string_view( s, n ), pos );
    +
    823  }
    +
    824 
    +
    825  nssv_constexpr14 size_type find( CharT const * s, size_type pos = 0 ) const // (4)
    +
    826  {
    +
    827  return find( basic_string_view( s ), pos );
    +
    828  }
    +
    829 
    +
    830  // rfind(), 4x:
    +
    831 
    +
    832  nssv_constexpr14 size_type rfind( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1)
    +
    833  {
    +
    834  if ( size() < v.size() )
    +
    835  {
    +
    836  return npos;
    +
    837  }
    +
    838 
    +
    839  if ( v.empty() )
    +
    840  {
    +
    841  return (std::min)( size(), pos );
    +
    842  }
    +
    843 
    +
    844  const_iterator last = cbegin() + (std::min)( size() - v.size(), pos ) + v.size();
    +
    845  const_iterator result = std::find_end( cbegin(), last, v.cbegin(), v.cend(), Traits::eq );
    +
    846 
    +
    847  return result != last ? size_type( result - cbegin() ) : npos;
    +
    848  }
    +
    849 
    +
    850  nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) const nssv_noexcept // (2)
    +
    851  {
    +
    852  return rfind( basic_string_view( &c, 1 ), pos );
    +
    853  }
    +
    854 
    +
    855  nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, size_type n ) const // (3)
    +
    856  {
    +
    857  return rfind( basic_string_view( s, n ), pos );
    +
    858  }
    +
    859 
    +
    860  nssv_constexpr14 size_type rfind( CharT const * s, size_type pos = npos ) const // (4)
    +
    861  {
    +
    862  return rfind( basic_string_view( s ), pos );
    +
    863  }
    +
    864 
    +
    865  // find_first_of(), 4x:
    +
    866 
    +
    867  nssv_constexpr size_type find_first_of( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1)
    +
    868  {
    +
    869  return pos >= size()
    +
    870  ? npos
    +
    871  : to_pos( std::find_first_of( cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq ) );
    +
    872  }
    +
    873 
    +
    874  nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0 ) const nssv_noexcept // (2)
    +
    875  {
    +
    876  return find_first_of( basic_string_view( &c, 1 ), pos );
    +
    877  }
    +
    878 
    +
    879  nssv_constexpr size_type find_first_of( CharT const * s, size_type pos, size_type n ) const // (3)
    +
    880  {
    +
    881  return find_first_of( basic_string_view( s, n ), pos );
    +
    882  }
    +
    883 
    +
    884  nssv_constexpr size_type find_first_of( CharT const * s, size_type pos = 0 ) const // (4)
    +
    885  {
    +
    886  return find_first_of( basic_string_view( s ), pos );
    +
    887  }
    +
    888 
    +
    889  // find_last_of(), 4x:
    +
    890 
    +
    891  nssv_constexpr size_type find_last_of( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1)
    +
    892  {
    +
    893  return empty()
    +
    894  ? npos
    +
    895  : pos >= size()
    +
    896  ? find_last_of( v, size() - 1 )
    +
    897  : to_pos( std::find_first_of( const_reverse_iterator( cbegin() + pos + 1 ), crend(), v.cbegin(), v.cend(), Traits::eq ) );
    +
    898  }
    +
    899 
    +
    900  nssv_constexpr size_type find_last_of( CharT c, size_type pos = npos ) const nssv_noexcept // (2)
    +
    901  {
    +
    902  return find_last_of( basic_string_view( &c, 1 ), pos );
    +
    903  }
    +
    904 
    +
    905  nssv_constexpr size_type find_last_of( CharT const * s, size_type pos, size_type count ) const // (3)
    +
    906  {
    +
    907  return find_last_of( basic_string_view( s, count ), pos );
    +
    908  }
    +
    909 
    +
    910  nssv_constexpr size_type find_last_of( CharT const * s, size_type pos = npos ) const // (4)
    +
    911  {
    +
    912  return find_last_of( basic_string_view( s ), pos );
    +
    913  }
    +
    914 
    +
    915  // find_first_not_of(), 4x:
    +
    916 
    +
    917  nssv_constexpr size_type find_first_not_of( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1)
    +
    918  {
    +
    919  return pos >= size()
    +
    920  ? npos
    +
    921  : to_pos( std::find_if( cbegin() + pos, cend(), not_in_view( v ) ) );
    +
    922  }
    +
    923 
    +
    924  nssv_constexpr size_type find_first_not_of( CharT c, size_type pos = 0 ) const nssv_noexcept // (2)
    +
    925  {
    +
    926  return find_first_not_of( basic_string_view( &c, 1 ), pos );
    +
    927  }
    +
    928 
    +
    929  nssv_constexpr size_type find_first_not_of( CharT const * s, size_type pos, size_type count ) const // (3)
    +
    930  {
    +
    931  return find_first_not_of( basic_string_view( s, count ), pos );
    +
    932  }
    +
    933 
    +
    934  nssv_constexpr size_type find_first_not_of( CharT const * s, size_type pos = 0 ) const // (4)
    +
    935  {
    +
    936  return find_first_not_of( basic_string_view( s ), pos );
    +
    937  }
    +
    938 
    +
    939  // find_last_not_of(), 4x:
    +
    940 
    +
    941  nssv_constexpr size_type find_last_not_of( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1)
    +
    942  {
    +
    943  return empty()
    +
    944  ? npos
    +
    945  : pos >= size()
    +
    946  ? find_last_not_of( v, size() - 1 )
    +
    947  : to_pos( std::find_if( const_reverse_iterator( cbegin() + pos + 1 ), crend(), not_in_view( v ) ) );
    +
    948  }
    +
    949 
    +
    950  nssv_constexpr size_type find_last_not_of( CharT c, size_type pos = npos ) const nssv_noexcept // (2)
    +
    951  {
    +
    952  return find_last_not_of( basic_string_view( &c, 1 ), pos );
    +
    953  }
    +
    954 
    +
    955  nssv_constexpr size_type find_last_not_of( CharT const * s, size_type pos, size_type count ) const // (3)
    +
    956  {
    +
    957  return find_last_not_of( basic_string_view( s, count ), pos );
    +
    958  }
    +
    959 
    +
    960  nssv_constexpr size_type find_last_not_of( CharT const * s, size_type pos = npos ) const // (4)
    +
    961  {
    +
    962  return find_last_not_of( basic_string_view( s ), pos );
    +
    963  }
    +
    964 
    +
    965  // Constants:
    +
    966 
    +
    967 #if nssv_CPP17_OR_GREATER
    +
    968  static nssv_constexpr size_type npos = size_type(-1);
    +
    969 #elif nssv_CPP11_OR_GREATER
    +
    970  enum : size_type { npos = size_type(-1) };
    +
    971 #else
    +
    972  enum { npos = size_type(-1) };
    +
    973 #endif
    +
    974 
    +
    975 private:
    +
    976  struct not_in_view
    +
    977  {
    +
    978  const basic_string_view v;
    +
    979 
    +
    980  nssv_constexpr explicit not_in_view( basic_string_view v_ ) : v( v_ ) {}
    +
    981 
    +
    982  nssv_constexpr bool operator()( CharT c ) const
    +
    983  {
    +
    984  return npos == v.find_first_of( c );
    +
    985  }
    +
    986  };
    +
    987 
    +
    988  nssv_constexpr size_type to_pos( const_iterator it ) const
    +
    989  {
    +
    990  return it == cend() ? npos : size_type( it - cbegin() );
    +
    991  }
    +
    992 
    +
    993  nssv_constexpr size_type to_pos( const_reverse_iterator it ) const
    +
    994  {
    +
    995  return it == crend() ? npos : size_type( crend() - it - 1 );
    +
    996  }
    +
    997 
    +
    998  nssv_constexpr const_reference data_at( size_type pos ) const
    +
    999  {
    +
    1000 #if nssv_BETWEEN( nssv_COMPILER_GNUC_VERSION, 1, 500 )
    +
    1001  return data_[pos];
    +
    1002 #else
    +
    1003  return assert( pos < size() ), data_[pos];
    +
    1004 #endif
    +
    1005  }
    +
    1006 
    +
    1007 private:
    +
    1008  const_pointer data_;
    +
    1009  size_type size_;
    +
    1010 
    +
    1011 public:
    +
    1012 #if nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS
    +
    1013 
    +
    1014  template< class Allocator >
    +
    1015  basic_string_view( std::basic_string<CharT, Traits, Allocator> const & s ) nssv_noexcept
    +
    1016  : data_( s.data() )
    +
    1017  , size_( s.size() )
    +
    1018  {}
    +
    1019 
    +
    1020 #if nssv_HAVE_EXPLICIT_CONVERSION
    +
    1021 
    +
    1022  template< class Allocator >
    +
    1023  explicit operator std::basic_string<CharT, Traits, Allocator>() const
    +
    1024  {
    +
    1025  return to_string( Allocator() );
    +
    1026  }
    +
    1027 
    +
    1028 #endif // nssv_HAVE_EXPLICIT_CONVERSION
    +
    1029 
    +
    1030 #if nssv_CPP11_OR_GREATER
    +
    1031 
    +
    1032  template< class Allocator = std::allocator<CharT> >
    +
    1033  std::basic_string<CharT, Traits, Allocator>
    +
    1034  to_string( Allocator const & a = Allocator() ) const
    +
    1035  {
    +
    1036  return std::basic_string<CharT, Traits, Allocator>( begin(), end(), a );
    +
    1037  }
    +
    1038 
    +
    1039 #else
    +
    1040 
    +
    1041  std::basic_string<CharT, Traits>
    +
    1042  to_string() const
    +
    1043  {
    +
    1044  return std::basic_string<CharT, Traits>( begin(), end() );
    +
    1045  }
    +
    1046 
    +
    1047  template< class Allocator >
    +
    1048  std::basic_string<CharT, Traits, Allocator>
    +
    1049  to_string( Allocator const & a ) const
    +
    1050  {
    +
    1051  return std::basic_string<CharT, Traits, Allocator>( begin(), end(), a );
    +
    1052  }
    +
    1053 
    +
    1054 #endif // nssv_CPP11_OR_GREATER
    +
    1055 
    +
    1056 #endif // nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS
    +
    1057 };
    +
    1058 
    +
    1059 //
    +
    1060 // Non-member functions:
    +
    1061 //
    +
    1062 
    +
    1063 // 24.4.3 Non-member comparison functions:
    +
    1064 // lexicographically compare two string views (function template):
    +
    1065 
    +
    1066 template< class CharT, class Traits >
    +
    1067 nssv_constexpr bool operator== (
    +
    1068  basic_string_view <CharT, Traits> lhs,
    +
    1069  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1070 { return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; }
    +
    1071 
    +
    1072 template< class CharT, class Traits >
    +
    1073 nssv_constexpr bool operator!= (
    +
    1074  basic_string_view <CharT, Traits> lhs,
    +
    1075  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1076 { return !( lhs == rhs ); }
    +
    1077 
    +
    1078 template< class CharT, class Traits >
    +
    1079 nssv_constexpr bool operator< (
    +
    1080  basic_string_view <CharT, Traits> lhs,
    +
    1081  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1082 { return lhs.compare( rhs ) < 0; }
    +
    1083 
    +
    1084 template< class CharT, class Traits >
    +
    1085 nssv_constexpr bool operator<= (
    +
    1086  basic_string_view <CharT, Traits> lhs,
    +
    1087  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1088 { return lhs.compare( rhs ) <= 0; }
    +
    1089 
    +
    1090 template< class CharT, class Traits >
    +
    1091 nssv_constexpr bool operator> (
    +
    1092  basic_string_view <CharT, Traits> lhs,
    +
    1093  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1094 { return lhs.compare( rhs ) > 0; }
    +
    1095 
    +
    1096 template< class CharT, class Traits >
    +
    1097 nssv_constexpr bool operator>= (
    +
    1098  basic_string_view <CharT, Traits> lhs,
    +
    1099  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1100 { return lhs.compare( rhs ) >= 0; }
    +
    1101 
    +
    1102 // Let S be basic_string_view<CharT, Traits>, and sv be an instance of S.
    +
    1103 // Implementations shall provide sufficient additional overloads marked
    +
    1104 // constexpr and noexcept so that an object t with an implicit conversion
    +
    1105 // to S can be compared according to Table 67.
    +
    1106 
    +
    1107 #if ! nssv_CPP11_OR_GREATER || nssv_BETWEEN( nssv_COMPILER_MSVC_VERSION, 100, 141 )
    +
    1108 
    +
    1109 // accommodate for older compilers:
    +
    1110 
    +
    1111 // ==
    +
    1112 
    +
    1113 template< class CharT, class Traits>
    +
    1114 nssv_constexpr bool operator==(
    +
    1115  basic_string_view<CharT, Traits> lhs,
    +
    1116  CharT const * rhs ) nssv_noexcept
    +
    1117 { return lhs.size() == detail::length( rhs ) && lhs.compare( rhs ) == 0; }
    +
    1118 
    +
    1119 template< class CharT, class Traits>
    +
    1120 nssv_constexpr bool operator==(
    +
    1121  CharT const * lhs,
    +
    1122  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1123 { return detail::length( lhs ) == rhs.size() && rhs.compare( lhs ) == 0; }
    +
    1124 
    +
    1125 template< class CharT, class Traits>
    +
    1126 nssv_constexpr bool operator==(
    +
    1127  basic_string_view<CharT, Traits> lhs,
    +
    1128  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1129 { return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; }
    +
    1130 
    +
    1131 template< class CharT, class Traits>
    +
    1132 nssv_constexpr bool operator==(
    +
    1133  std::basic_string<CharT, Traits> rhs,
    +
    1134  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1135 { return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; }
    +
    1136 
    +
    1137 // !=
    +
    1138 
    +
    1139 template< class CharT, class Traits>
    +
    1140 nssv_constexpr bool operator!=(
    +
    1141  basic_string_view<CharT, Traits> lhs,
    +
    1142  CharT const * rhs ) nssv_noexcept
    +
    1143 { return !( lhs == rhs ); }
    +
    1144 
    +
    1145 template< class CharT, class Traits>
    +
    1146 nssv_constexpr bool operator!=(
    +
    1147  CharT const * lhs,
    +
    1148  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1149 { return !( lhs == rhs ); }
    +
    1150 
    +
    1151 template< class CharT, class Traits>
    +
    1152 nssv_constexpr bool operator!=(
    +
    1153  basic_string_view<CharT, Traits> lhs,
    +
    1154  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1155 { return !( lhs == rhs ); }
    +
    1156 
    +
    1157 template< class CharT, class Traits>
    +
    1158 nssv_constexpr bool operator!=(
    +
    1159  std::basic_string<CharT, Traits> rhs,
    +
    1160  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1161 { return !( lhs == rhs ); }
    +
    1162 
    +
    1163 // <
    +
    1164 
    +
    1165 template< class CharT, class Traits>
    +
    1166 nssv_constexpr bool operator<(
    +
    1167  basic_string_view<CharT, Traits> lhs,
    +
    1168  CharT const * rhs ) nssv_noexcept
    +
    1169 { return lhs.compare( rhs ) < 0; }
    +
    1170 
    +
    1171 template< class CharT, class Traits>
    +
    1172 nssv_constexpr bool operator<(
    +
    1173  CharT const * lhs,
    +
    1174  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1175 { return rhs.compare( lhs ) > 0; }
    +
    1176 
    +
    1177 template< class CharT, class Traits>
    +
    1178 nssv_constexpr bool operator<(
    +
    1179  basic_string_view<CharT, Traits> lhs,
    +
    1180  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1181 { return lhs.compare( rhs ) < 0; }
    +
    1182 
    +
    1183 template< class CharT, class Traits>
    +
    1184 nssv_constexpr bool operator<(
    +
    1185  std::basic_string<CharT, Traits> rhs,
    +
    1186  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1187 { return rhs.compare( lhs ) > 0; }
    +
    1188 
    +
    1189 // <=
    +
    1190 
    +
    1191 template< class CharT, class Traits>
    +
    1192 nssv_constexpr bool operator<=(
    +
    1193  basic_string_view<CharT, Traits> lhs,
    +
    1194  CharT const * rhs ) nssv_noexcept
    +
    1195 { return lhs.compare( rhs ) <= 0; }
    +
    1196 
    +
    1197 template< class CharT, class Traits>
    +
    1198 nssv_constexpr bool operator<=(
    +
    1199  CharT const * lhs,
    +
    1200  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1201 { return rhs.compare( lhs ) >= 0; }
    +
    1202 
    +
    1203 template< class CharT, class Traits>
    +
    1204 nssv_constexpr bool operator<=(
    +
    1205  basic_string_view<CharT, Traits> lhs,
    +
    1206  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1207 { return lhs.compare( rhs ) <= 0; }
    +
    1208 
    +
    1209 template< class CharT, class Traits>
    +
    1210 nssv_constexpr bool operator<=(
    +
    1211  std::basic_string<CharT, Traits> rhs,
    +
    1212  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1213 { return rhs.compare( lhs ) >= 0; }
    +
    1214 
    +
    1215 // >
    +
    1216 
    +
    1217 template< class CharT, class Traits>
    +
    1218 nssv_constexpr bool operator>(
    +
    1219  basic_string_view<CharT, Traits> lhs,
    +
    1220  CharT const * rhs ) nssv_noexcept
    +
    1221 { return lhs.compare( rhs ) > 0; }
    +
    1222 
    +
    1223 template< class CharT, class Traits>
    +
    1224 nssv_constexpr bool operator>(
    +
    1225  CharT const * lhs,
    +
    1226  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1227 { return rhs.compare( lhs ) < 0; }
    +
    1228 
    +
    1229 template< class CharT, class Traits>
    +
    1230 nssv_constexpr bool operator>(
    +
    1231  basic_string_view<CharT, Traits> lhs,
    +
    1232  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1233 { return lhs.compare( rhs ) > 0; }
    +
    1234 
    +
    1235 template< class CharT, class Traits>
    +
    1236 nssv_constexpr bool operator>(
    +
    1237  std::basic_string<CharT, Traits> rhs,
    +
    1238  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1239 { return rhs.compare( lhs ) < 0; }
    +
    1240 
    +
    1241 // >=
    +
    1242 
    +
    1243 template< class CharT, class Traits>
    +
    1244 nssv_constexpr bool operator>=(
    +
    1245  basic_string_view<CharT, Traits> lhs,
    +
    1246  CharT const * rhs ) nssv_noexcept
    +
    1247 { return lhs.compare( rhs ) >= 0; }
    +
    1248 
    +
    1249 template< class CharT, class Traits>
    +
    1250 nssv_constexpr bool operator>=(
    +
    1251  CharT const * lhs,
    +
    1252  basic_string_view<CharT, Traits> rhs ) nssv_noexcept
    +
    1253 { return rhs.compare( lhs ) <= 0; }
    +
    1254 
    +
    1255 template< class CharT, class Traits>
    +
    1256 nssv_constexpr bool operator>=(
    +
    1257  basic_string_view<CharT, Traits> lhs,
    +
    1258  std::basic_string<CharT, Traits> rhs ) nssv_noexcept
    +
    1259 { return lhs.compare( rhs ) >= 0; }
    +
    1260 
    +
    1261 template< class CharT, class Traits>
    +
    1262 nssv_constexpr bool operator>=(
    +
    1263  std::basic_string<CharT, Traits> rhs,
    +
    1264  basic_string_view<CharT, Traits> lhs ) nssv_noexcept
    +
    1265 { return rhs.compare( lhs ) <= 0; }
    +
    1266 
    +
    1267 #else // newer compilers:
    +
    1268 
    +
    1269 #define nssv_BASIC_STRING_VIEW_I(T,U) typename std::decay< basic_string_view<T,U> >::type
    +
    1270 
    +
    1271 #if defined(_MSC_VER) // issue 40
    +
    1272 # define nssv_MSVC_ORDER(x) , int=x
    +
    1273 #else
    +
    1274 # define nssv_MSVC_ORDER(x) /*, int=x*/
    +
    1275 #endif
    +
    1276 
    +
    1277 // ==
    +
    1278 
    +
    1279 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1280 nssv_constexpr bool operator==(
    +
    1281  basic_string_view <CharT, Traits> lhs,
    +
    1282  nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs ) nssv_noexcept
    +
    1283 { return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; }
    +
    1284 
    +
    1285 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1286 nssv_constexpr bool operator==(
    +
    1287  nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs,
    +
    1288  basic_string_view <CharT, Traits> rhs ) nssv_noexcept
    +
    1289 { return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; }
    +
    1290 
    +
    1291 // !=
    +
    1292 
    +
    1293 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1294 nssv_constexpr bool operator!= (
    +
    1295  basic_string_view < CharT, Traits > lhs,
    +
    1296  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept
    +
    1297 { return !( lhs == rhs ); }
    +
    1298 
    +
    1299 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1300 nssv_constexpr bool operator!= (
    +
    1301  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs,
    +
    1302  basic_string_view < CharT, Traits > rhs ) nssv_noexcept
    +
    1303 { return !( lhs == rhs ); }
    +
    1304 
    +
    1305 // <
    +
    1306 
    +
    1307 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1308 nssv_constexpr bool operator< (
    +
    1309  basic_string_view < CharT, Traits > lhs,
    +
    1310  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept
    +
    1311 { return lhs.compare( rhs ) < 0; }
    +
    1312 
    +
    1313 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1314 nssv_constexpr bool operator< (
    +
    1315  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs,
    +
    1316  basic_string_view < CharT, Traits > rhs ) nssv_noexcept
    +
    1317 { return lhs.compare( rhs ) < 0; }
    +
    1318 
    +
    1319 // <=
    +
    1320 
    +
    1321 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1322 nssv_constexpr bool operator<= (
    +
    1323  basic_string_view < CharT, Traits > lhs,
    +
    1324  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept
    +
    1325 { return lhs.compare( rhs ) <= 0; }
    +
    1326 
    +
    1327 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1328 nssv_constexpr bool operator<= (
    +
    1329  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs,
    +
    1330  basic_string_view < CharT, Traits > rhs ) nssv_noexcept
    +
    1331 { return lhs.compare( rhs ) <= 0; }
    +
    1332 
    +
    1333 // >
    +
    1334 
    +
    1335 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1336 nssv_constexpr bool operator> (
    +
    1337  basic_string_view < CharT, Traits > lhs,
    +
    1338  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept
    +
    1339 { return lhs.compare( rhs ) > 0; }
    +
    1340 
    +
    1341 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1342 nssv_constexpr bool operator> (
    +
    1343  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs,
    +
    1344  basic_string_view < CharT, Traits > rhs ) nssv_noexcept
    +
    1345 { return lhs.compare( rhs ) > 0; }
    +
    1346 
    +
    1347 // >=
    +
    1348 
    +
    1349 template< class CharT, class Traits nssv_MSVC_ORDER(1) >
    +
    1350 nssv_constexpr bool operator>= (
    +
    1351  basic_string_view < CharT, Traits > lhs,
    +
    1352  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept
    +
    1353 { return lhs.compare( rhs ) >= 0; }
    +
    1354 
    +
    1355 template< class CharT, class Traits nssv_MSVC_ORDER(2) >
    +
    1356 nssv_constexpr bool operator>= (
    +
    1357  nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs,
    +
    1358  basic_string_view < CharT, Traits > rhs ) nssv_noexcept
    +
    1359 { return lhs.compare( rhs ) >= 0; }
    +
    1360 
    +
    1361 #undef nssv_MSVC_ORDER
    +
    1362 #undef nssv_BASIC_STRING_VIEW_I
    +
    1363 
    +
    1364 #endif // compiler-dependent approach to comparisons
    +
    1365 
    +
    1366 // 24.4.4 Inserters and extractors:
    +
    1367 
    +
    1368 #if ! nssv_CONFIG_NO_STREAM_INSERTION
    +
    1369 
    +
    1370 namespace detail {
    +
    1371 
    +
    1372 template< class Stream >
    +
    1373 void write_padding( Stream & os, std::streamsize n )
    +
    1374 {
    +
    1375  for ( std::streamsize i = 0; i < n; ++i )
    +
    1376  os.rdbuf()->sputc( os.fill() );
    +
    1377 }
    +
    1378 
    +
    1379 template< class Stream, class View >
    +
    1380 Stream & write_to_stream( Stream & os, View const & sv )
    +
    1381 {
    +
    1382  typename Stream::sentry sentry( os );
    +
    1383 
    +
    1384  if ( !os )
    +
    1385  return os;
    +
    1386 
    +
    1387  const std::streamsize length = static_cast<std::streamsize>( sv.length() );
    +
    1388 
    +
    1389  // Whether, and how, to pad:
    +
    1390  const bool pad = ( length < os.width() );
    +
    1391  const bool left_pad = pad && ( os.flags() & std::ios_base::adjustfield ) == std::ios_base::right;
    +
    1392 
    +
    1393  if ( left_pad )
    +
    1394  write_padding( os, os.width() - length );
    +
    1395 
    +
    1396  // Write span characters:
    +
    1397  os.rdbuf()->sputn( sv.begin(), length );
    +
    1398 
    +
    1399  if ( pad && !left_pad )
    +
    1400  write_padding( os, os.width() - length );
    +
    1401 
    +
    1402  // Reset output stream width:
    +
    1403  os.width( 0 );
    +
    1404 
    +
    1405  return os;
    +
    1406 }
    +
    1407 
    +
    1408 } // namespace detail
    +
    1409 
    +
    1410 template< class CharT, class Traits >
    +
    1411 std::basic_ostream<CharT, Traits> &
    +
    1412 operator<<(
    +
    1413  std::basic_ostream<CharT, Traits>& os,
    +
    1414  basic_string_view <CharT, Traits> sv )
    +
    1415 {
    +
    1416  return detail::write_to_stream( os, sv );
    +
    1417 }
    +
    1418 
    +
    1419 #endif // nssv_CONFIG_NO_STREAM_INSERTION
    +
    1420 
    +
    1421 // Several typedefs for common character types are provided:
    +
    1422 
    +
    1423 typedef basic_string_view<char> string_view;
    +
    1424 typedef basic_string_view<wchar_t> wstring_view;
    +
    1425 #if nssv_HAVE_WCHAR16_T
    +
    1426 typedef basic_string_view<char16_t> u16string_view;
    +
    1427 typedef basic_string_view<char32_t> u32string_view;
    +
    1428 #endif
    +
    1429 
    +
    1430 }} // namespace nonstd::sv_lite
    +
    1431 
    +
    1432 //
    +
    1433 // 24.4.6 Suffix for basic_string_view literals:
    +
    1434 //
    +
    1435 
    +
    1436 #if nssv_HAVE_USER_DEFINED_LITERALS
    +
    1437 
    +
    1438 namespace nonstd {
    +
    1439 nssv_inline_ns namespace literals {
    +
    1440 nssv_inline_ns namespace string_view_literals {
    +
    1441 
    +
    1442 #if nssv_CONFIG_STD_SV_OPERATOR && nssv_HAVE_STD_DEFINED_LITERALS
    +
    1443 
    +
    1444 nssv_constexpr nonstd::sv_lite::string_view operator "" sv( const char* str, size_t len ) nssv_noexcept // (1)
    +
    1445 {
    +
    1446  return nonstd::sv_lite::string_view{ str, len };
    +
    1447 }
    +
    1448 
    +
    1449 nssv_constexpr nonstd::sv_lite::u16string_view operator "" sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
    +
    1450 {
    +
    1451  return nonstd::sv_lite::u16string_view{ str, len };
    +
    1452 }
    +
    1453 
    +
    1454 nssv_constexpr nonstd::sv_lite::u32string_view operator "" sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
    +
    1455 {
    +
    1456  return nonstd::sv_lite::u32string_view{ str, len };
    +
    1457 }
    +
    1458 
    +
    1459 nssv_constexpr nonstd::sv_lite::wstring_view operator "" sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
    +
    1460 {
    +
    1461  return nonstd::sv_lite::wstring_view{ str, len };
    +
    1462 }
    +
    1463 
    +
    1464 #endif // nssv_CONFIG_STD_SV_OPERATOR && nssv_HAVE_STD_DEFINED_LITERALS
    +
    1465 
    +
    1466 #if nssv_CONFIG_USR_SV_OPERATOR
    +
    1467 
    +
    1468 nssv_constexpr nonstd::sv_lite::string_view operator "" _sv( const char* str, size_t len ) nssv_noexcept // (1)
    +
    1469 {
    +
    1470  return nonstd::sv_lite::string_view{ str, len };
    +
    1471 }
    +
    1472 
    +
    1473 nssv_constexpr nonstd::sv_lite::u16string_view operator "" _sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
    +
    1474 {
    +
    1475  return nonstd::sv_lite::u16string_view{ str, len };
    +
    1476 }
    +
    1477 
    +
    1478 nssv_constexpr nonstd::sv_lite::u32string_view operator "" _sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
    +
    1479 {
    +
    1480  return nonstd::sv_lite::u32string_view{ str, len };
    +
    1481 }
    +
    1482 
    +
    1483 nssv_constexpr nonstd::sv_lite::wstring_view operator "" _sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
    +
    1484 {
    +
    1485  return nonstd::sv_lite::wstring_view{ str, len };
    +
    1486 }
    +
    1487 
    +
    1488 #endif // nssv_CONFIG_USR_SV_OPERATOR
    +
    1489 
    +
    1490 }}} // namespace nonstd::literals::string_view_literals
    +
    1491 
    +
    1492 #endif
    +
    1493 
    +
    1494 //
    +
    1495 // Extensions for std::string:
    +
    1496 //
    +
    1497 
    +
    1498 #if nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    1499 
    +
    1500 namespace nonstd {
    +
    1501 namespace sv_lite {
    +
    1502 
    +
    1503 // Exclude MSVC 14 (19.00): it yields ambiguous to_string():
    +
    1504 
    +
    1505 #if nssv_CPP11_OR_GREATER && nssv_COMPILER_MSVC_VERSION != 140
    +
    1506 
    +
    1507 template< class CharT, class Traits, class Allocator = std::allocator<CharT> >
    +
    1508 std::basic_string<CharT, Traits, Allocator>
    +
    1509 to_string( basic_string_view<CharT, Traits> v, Allocator const & a = Allocator() )
    +
    1510 {
    +
    1511  return std::basic_string<CharT,Traits, Allocator>( v.begin(), v.end(), a );
    +
    1512 }
    +
    1513 
    +
    1514 #else
    +
    1515 
    +
    1516 template< class CharT, class Traits >
    +
    1517 std::basic_string<CharT, Traits>
    +
    1518 to_string( basic_string_view<CharT, Traits> v )
    +
    1519 {
    +
    1520  return std::basic_string<CharT, Traits>( v.begin(), v.end() );
    +
    1521 }
    +
    1522 
    +
    1523 template< class CharT, class Traits, class Allocator >
    +
    1524 std::basic_string<CharT, Traits, Allocator>
    +
    1525 to_string( basic_string_view<CharT, Traits> v, Allocator const & a )
    +
    1526 {
    +
    1527  return std::basic_string<CharT, Traits, Allocator>( v.begin(), v.end(), a );
    +
    1528 }
    +
    1529 
    +
    1530 #endif // nssv_CPP11_OR_GREATER
    +
    1531 
    +
    1532 template< class CharT, class Traits, class Allocator >
    +
    1533 basic_string_view<CharT, Traits>
    +
    1534 to_string_view( std::basic_string<CharT, Traits, Allocator> const & s )
    +
    1535 {
    +
    1536  return basic_string_view<CharT, Traits>( s.data(), s.size() );
    +
    1537 }
    +
    1538 
    +
    1539 }} // namespace nonstd::sv_lite
    +
    1540 
    +
    1541 #endif // nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    1542 
    +
    1543 //
    +
    1544 // make types and algorithms available in namespace nonstd:
    +
    1545 //
    +
    1546 
    +
    1547 namespace nonstd {
    +
    1548 
    +
    1549 using sv_lite::basic_string_view;
    +
    1550 using sv_lite::string_view;
    +
    1551 using sv_lite::wstring_view;
    +
    1552 
    +
    1553 #if nssv_HAVE_WCHAR16_T
    +
    1554 using sv_lite::u16string_view;
    +
    1555 #endif
    +
    1556 #if nssv_HAVE_WCHAR32_T
    +
    1557 using sv_lite::u32string_view;
    +
    1558 #endif
    +
    1559 
    +
    1560 // literal "sv"
    +
    1561 
    +
    1562 using sv_lite::operator==;
    +
    1563 using sv_lite::operator!=;
    +
    1564 using sv_lite::operator<;
    +
    1565 using sv_lite::operator<=;
    +
    1566 using sv_lite::operator>;
    +
    1567 using sv_lite::operator>=;
    +
    1568 
    +
    1569 #if ! nssv_CONFIG_NO_STREAM_INSERTION
    +
    1570 using sv_lite::operator<<;
    +
    1571 #endif
    +
    1572 
    +
    1573 #if nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS
    +
    1574 using sv_lite::to_string;
    +
    1575 using sv_lite::to_string_view;
    +
    1576 #endif
    +
    1577 
    +
    1578 } // namespace nonstd
    +
    1579 
    +
    1580 // 24.4.5 Hash support (C++11):
    +
    1581 
    +
    1582 // Note: The hash value of a string view object is equal to the hash value of
    +
    1583 // the corresponding string object.
    +
    1584 
    +
    1585 #if nssv_HAVE_STD_HASH
    +
    1586 
    +
    1587 #include <functional>
    +
    1588 
    +
    1589 namespace std {
    +
    1590 
    +
    1591 template<>
    +
    1592 struct hash< nonstd::string_view >
    +
    1593 {
    +
    1594 public:
    +
    1595  std::size_t operator()( nonstd::string_view v ) const nssv_noexcept
    +
    1596  {
    +
    1597  return std::hash<std::string>()( std::string( v.data(), v.size() ) );
    +
    1598  }
    +
    1599 };
    +
    1600 
    +
    1601 template<>
    +
    1602 struct hash< nonstd::wstring_view >
    +
    1603 {
    +
    1604 public:
    +
    1605  std::size_t operator()( nonstd::wstring_view v ) const nssv_noexcept
    +
    1606  {
    +
    1607  return std::hash<std::wstring>()( std::wstring( v.data(), v.size() ) );
    +
    1608  }
    +
    1609 };
    +
    1610 
    +
    1611 template<>
    +
    1612 struct hash< nonstd::u16string_view >
    +
    1613 {
    +
    1614 public:
    +
    1615  std::size_t operator()( nonstd::u16string_view v ) const nssv_noexcept
    +
    1616  {
    +
    1617  return std::hash<std::u16string>()( std::u16string( v.data(), v.size() ) );
    +
    1618  }
    +
    1619 };
    +
    1620 
    +
    1621 template<>
    +
    1622 struct hash< nonstd::u32string_view >
    +
    1623 {
    +
    1624 public:
    +
    1625  std::size_t operator()( nonstd::u32string_view v ) const nssv_noexcept
    +
    1626  {
    +
    1627  return std::hash<std::u32string>()( std::u32string( v.data(), v.size() ) );
    +
    1628  }
    +
    1629 };
    +
    1630 
    +
    1631 } // namespace std
    +
    1632 
    +
    1633 #endif // nssv_HAVE_STD_HASH
    +
    1634 
    +
    1635 nssv_RESTORE_WARNINGS()
    +
    1636 
    +
    1637 #endif // nssv_HAVE_STD_STRING_VIEW
    +
    1638 #endif // NONSTD_SV_LITE_H_INCLUDED
    +
    simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
    +
    std::string to_string(T x)
    Converts JSON to a string.
    +
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base-members.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base-members.html new file mode 100644 index 000000000..11ce846a2 --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base-members.html @@ -0,0 +1,121 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >protected
    get(T &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    implementation_simdjson_result_base(T &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    implementation_simdjson_result_base(T &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    operator T&&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >protected
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    tie(T &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html new file mode 100644 index 000000000..84efedaae --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html @@ -0,0 +1,510 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T > Struct Template Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T > Struct Template Reference
    +
    +
    + +

    The result of a simdjson operation that could fail. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (T &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (T &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (T &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (T &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline T & value () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline T && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline T && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator T&& () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const T & value_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline T & value_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline T && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + +

    +Protected Attributes

    +T first {}
     users should never directly access first and second.
     
    +error_code second {UNINITIALIZED}
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +

    template<typename T>
    +struct simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >

    + +

    The result of a simdjson operation that could fail.

    +

    Gives the option of reading error codes, or throwing an exception by casting to the desired result.

    +

    This is a base class for implementations that want to add functions to the result type for chaining.

    +

    Override like:

    +

    struct simdjson_result<T> : public internal::implementation_simdjson_result_base<T> { simdjson_result() noexcept : internal::implementation_simdjson_result_base<T>() {} simdjson_result(error_code error) noexcept : internal::implementation_simdjson_result_base<T>(error) {} simdjson_result(T &&value) noexcept : internal::implementation_simdjson_result_base<T>(std::forward(value)) {} simdjson_result(T &&value, error_code error) noexcept : internal::implementation_simdjson_result_base<T>(value, error) {} // Your extra methods here }

    +

    Then any method returning simdjson_result<T> will be chainable with your methods.

    + +

    Definition at line 28 of file implementation_simdjson_result_base.h.

    +

    Member Function Documentation

    + +

    ◆ get()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::get (T & value) &&
    +
    +noexcept
    +
    + +

    Move the value to the provided variable.

    +
    Parameters
    + + +
    valueThe variable to assign the value to. May not be set if there is an error.
    +
    +
    + +

    Definition at line 17 of file implementation_simdjson_result_base-inl.h.

    + +
    +
    + +

    ◆ operator T&&()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::operator T&& () &&
    +
    +noexcept
    +
    + +

    Cast to the value (will throw on error).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +

    Definition at line 48 of file implementation_simdjson_result_base-inl.h.

    + +
    +
    + +

    ◆ take_value()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T && simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::take_value () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +

    Definition at line 42 of file implementation_simdjson_result_base-inl.h.

    + +
    +
    + +

    ◆ tie()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    simdjson_inline void simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::tie (T & value,
    error_codeerror 
    ) &&
    +
    +noexcept
    +
    + +

    Move the value and the error to the provided variables.

    +
    Parameters
    + + + +
    valueThe variable to assign the value to. May not be set if there is an error.
    errorThe variable to assign the error to. Set to SUCCESS if there is no error.
    +
    +
    + +

    Definition at line 9 of file implementation_simdjson_result_base-inl.h.

    + +
    +
    + +

    ◆ value() [1/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T&& simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::value () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +
    +
    + +

    ◆ value() [2/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T& simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::value () &
    +
    +noexcept
    +
    + +

    Get the result value.

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +
    +
    + +

    ◆ value_unsafe() [1/3]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T&& simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::value_unsafe () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +

    This function is safe if and only the error() method returns a value that evaluates to false.

    + +
    +
    + +

    ◆ value_unsafe() [2/3]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T& simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::value_unsafe () &
    +
    +noexcept
    +
    + +

    Get the result value.

    +

    This function is safe if and only the error() method returns a value that evaluates to false.

    + +
    +
    + +

    ◆ value_unsafe() [3/3]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline const T& simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< T >::value_unsafe () const &
    +
    +noexcept
    +
    + +

    Get the result value.

    +

    This function is safe if and only the error() method returns a value that evaluates to false.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.js b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.js new file mode 100644 index 000000000..ae150322b --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.js @@ -0,0 +1,19 @@ +var structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base = +[ + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a108dd35fd49314820106a21afa0fb2ea", null ], + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a4f59b204f1eddcdc2b36e6df0639a516", null ], + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#af8a436d40886a295f618311d3849d7e5", null ], + [ "implementation_simdjson_result_base", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a44ff65b6194c7c1cb74180b43e438619", null ], + [ "error", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a20a01e401b72125b9b1acef9cfb5b9ea", null ], + [ "get", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a96c905c44f3c53cb6cdb23b760d323b8", null ], + [ "operator T&&", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a11133790f4386ea4d11567a3a0806096", null ], + [ "take_value", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#affadf1e1f762248d60950e333b739820", null ], + [ "tie", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#acd950d432e76a0bc1a7f3236cc7a1894", null ], + [ "value", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a934c09eb8db55277d2d7190f1bbc1a84", null ], + [ "value", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a78c5842bded486846c816eb01ff439fc", null ], + [ "value_unsafe", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ad06c8e25c44d091eb3757a65ccd9f57f", null ], + [ "value_unsafe", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a5d412981bc3cee0f0bcf3bfb53ae83e1", null ], + [ "value_unsafe", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a92e1c9ffc7a854b4b33fa48fe2d95709", null ], + [ "first", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#ae51247dce4e77f1e6067cfd4654cca30", null ], + [ "second", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1implementation__simdjson__result__base.html#a25289df3eaabd14f029e9872a6db3dfb", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number-members.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number-members.html new file mode 100644 index 000000000..f7b2c0f1a --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number-members.html @@ -0,0 +1,128 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number Member List
    +
    +
    + +

    This is the complete list of members for simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + +
    append_double(double value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    append_s64(int64_t value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    append_u64(uint64_t value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    as_double() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    floating_point_number (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    get_double() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    get_int64() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    get_number_type() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    get_uint64() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    is_double() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    is_int64() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    is_uint64() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    numberparsing::parse_number (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberfriend
    numberparsing::slow_float_parsing (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberfriend
    numberparsing::write_float (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberfriend
    operator double() const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    operator int64_t() const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    operator uint64_t() const noexcept (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    payloadsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    signed_integer (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    skip_double() noexceptsimdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    type (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::numberprotected
    unsigned_integer (defined in simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number)simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html new file mode 100644 index 000000000..c75260fd1 --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html @@ -0,0 +1,280 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number Struct Reference
    +
    +
    + +

    A type representing a JSON number. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    simdjson_inline number_type get_number_type () const noexcept
     return the automatically determined type of the number: number_type::floating_point_number, number_type::signed_integer or number_type::unsigned_integer. More...
     
    +simdjson_inline bool is_uint64 () const noexcept
     return true if the automatically determined type of the number is number_type::unsigned_integer.
     
    +simdjson_inline uint64_t get_uint64 () const noexcept
     return the value as a uint64_t, only valid if is_uint64() is true.
     
    +simdjson_inline operator uint64_t () const noexcept
     
    +simdjson_inline bool is_int64 () const noexcept
     return true if the automatically determined type of the number is number_type::signed_integer.
     
    +simdjson_inline int64_t get_int64 () const noexcept
     return the value as a int64_t, only valid if is_int64() is true.
     
    +simdjson_inline operator int64_t () const noexcept
     
    +simdjson_inline bool is_double () const noexcept
     return true if the automatically determined type of the number is number_type::floating_point_number.
     
    +simdjson_inline double get_double () const noexcept
     return the value as a double, only valid if is_double() is true.
     
    +simdjson_inline operator double () const noexcept
     
    simdjson_inline double as_double () const noexcept
     Convert the number to a double. More...
     
    + + + + + + + + + + + + + +

    +Protected Member Functions

    +simdjson_inline void append_s64 (int64_t value) noexcept
     Store a signed 64-bit value to the number.
     
    +simdjson_inline void append_u64 (uint64_t value) noexcept
     Store an unsigned 64-bit value to the number.
     
    +simdjson_inline void append_double (double value) noexcept
     Store a double value to the number.
     
    +simdjson_inline void skip_double () noexcept
     Specifies that the value is a double, but leave it undefined.
     
    + + + + + + + + + + + + + +

    +Protected Attributes

    union {
    +   double   floating_point_number
     
    +   int64_t   signed_integer
     
    +   uint64_t   unsigned_integer
     
    payload
     End of friend declarations. More...
     
    +number_type type {number_type::signed_integer}
     
    +

    Detailed Description

    +

    A type representing a JSON number.

    +

    The design of the struct is deliberately straight-forward. All functions return standard values with no error check.

    + +

    Definition at line 24 of file json_type.h.

    +

    Member Function Documentation

    + +

    ◆ as_double()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline double simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::as_double () const
    +
    +noexcept
    +
    + +

    Convert the number to a double.

    +

    Though it always succeed, the conversion may be lossy if the number cannot be represented exactly.

    + +

    Definition at line 76 of file json_type-inl.h.

    + +
    +
    + +

    ◆ get_number_type()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline number_type simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::get_number_type () const
    +
    +noexcept
    +
    + +

    return the automatically determined type of the number: number_type::floating_point_number, number_type::signed_integer or number_type::unsigned_integer.

    +

    enum class number_type { floating_point_number=1, /// a binary64 number signed_integer, /// a signed integer that fits in a 64-bit word using two's complement unsigned_integer /// a positive integer larger or equal to 1<<63 };

    + +

    Definition at line 35 of file json_type-inl.h.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ 

    + +
    +
    + + + + +
    union { ... } simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::payload
    +
    + +

    End of friend declarations.

    +

    Our attributes are a union type (size = 64 bits) followed by a type indicator.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.js b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.js new file mode 100644 index 000000000..136fddf6f --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.js @@ -0,0 +1,27 @@ +var structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number = +[ + [ "append_double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ae5b327f855878cba9b026059a1fc8a1b", null ], + [ "append_s64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#adb931b17ba9d4d41dd8111ad9288256c", null ], + [ "append_u64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa3481ec0d0726a732688b7fc64372049", null ], + [ "as_double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a41dc1bfd660e0b9c86cb5a5171fd7c02", null ], + [ "get_double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ab261642a30f5e26b0769ce701cd5b9f8", null ], + [ "get_int64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a92b12b32ee177c2a818618d0595d2584", null ], + [ "get_number_type", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a8c8d29d831635c958e87de0cc2dab8b4", null ], + [ "get_uint64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aff5939efdcb41c9d2b9a1997816f093f", null ], + [ "is_double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a48f9e54ebd40e1c060be0a4b1d4ff823", null ], + [ "is_int64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a38d6b4b4e91f30c8def71997d23454c2", null ], + [ "is_uint64", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#af0e89976b80a7a7dedaf8c1a7cfd64a2", null ], + [ "operator double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aad531f215d835148bc5bcd49c5cae844", null ], + [ "operator int64_t", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a5d3e0d03bfe425c824dff96329c2f168", null ], + [ "operator uint64_t", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#abb713c2347a676fe6514e2eae97c4f5d", null ], + [ "skip_double", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ac6b75b1d1af73c9ef8958e573c367e1c", null ], + [ "numberparsing::parse_number", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a31e829fc9dac6ebac9dca7af20898b53", null ], + [ "numberparsing::slow_float_parsing", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a5053e80f5724f8e1ce7dc513b2c93463", null ], + [ "numberparsing::write_float", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a4963fde41cc9ccb03339a4594c005e04", null ], + [ "value_iterator", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a2b56b11b68e621bbd8ce2051ed10ab60", null ], + [ "floating_point_number", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a0902647d571633bcaf937831430df3ba", null ], + [ "payload", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#aa17e81138859bcef934d9502a9852049", null ], + [ "signed_integer", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#adb07d931b15145b11886aede86da4295", null ], + [ "type", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#a73da034f579d79dc2803063e7178a899", null ], + [ "unsigned_integer", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1number.html#ad4f5dee3c5d0c1f3b545d894ec331309", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container-members.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container-members.html new file mode 100644 index 000000000..cbcccb681 --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container-members.html @@ -0,0 +1,107 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::open_container Member List
    +
    + +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html new file mode 100644 index 000000000..0cf31890a --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: simdjson::SIMDJSON_IMPLEMENTATION::open_container Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::SIMDJSON_IMPLEMENTATION::open_container Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +uint32_t tape_index
     
    +uint32_t count
     
    +

    Detailed Description

    +
    +

    Definition at line 8 of file dom_parser_implementation.h.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.js b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.js new file mode 100644 index 000000000..a0ef874ab --- /dev/null +++ b/structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.js @@ -0,0 +1,5 @@ +var structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container = +[ + [ "count", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html#a1db1fbc4a98e64f2b5b1481d082a899e", null ], + [ "tape_index", "structsimdjson_1_1_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1open__container.html#a4a4ca80115baf091980e29306b26530b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1padded__string-members.html b/structsimdjson_1_1padded__string-members.html new file mode 100644 index 000000000..b59250108 --- /dev/null +++ b/structsimdjson_1_1padded__string-members.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::padded_string Member List
    +
    +
    + +

    This is the complete list of members for simdjson::padded_string, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    data() const noexceptsimdjson::padded_stringinline
    data() noexceptsimdjson::padded_stringinline
    length() const noexceptsimdjson::padded_stringinline
    load(std::string_view path) noexceptsimdjson::padded_stringinlinestatic
    operator padded_string_view() const noexceptsimdjson::padded_stringinline
    operator std::string_view() constsimdjson::padded_stringinline
    operator=(padded_string &&o) noexceptsimdjson::padded_stringinline
    padded_string() noexceptsimdjson::padded_stringinlineexplicit
    padded_string(size_t length) noexceptsimdjson::padded_stringinlineexplicit
    padded_string(const char *data, size_t length) noexceptsimdjson::padded_stringinlineexplicit
    padded_string(const std::string &str_) noexceptsimdjson::padded_stringinline
    padded_string(std::string_view sv_) noexceptsimdjson::padded_stringinline
    padded_string(padded_string &&o) noexceptsimdjson::padded_stringinline
    size() const noexceptsimdjson::padded_stringinline
    swap(padded_string &o) noexcept (defined in simdjson::padded_string)simdjson::padded_stringinline
    u8data() const noexcept (defined in simdjson::padded_string)simdjson::padded_stringinline
    ~padded_string() noexcept (defined in simdjson::padded_string)simdjson::padded_stringinline
    +
    + + + + diff --git a/structsimdjson_1_1padded__string.html b/structsimdjson_1_1padded__string.html new file mode 100644 index 000000000..1dc1cc3f5 --- /dev/null +++ b/structsimdjson_1_1padded__string.html @@ -0,0 +1,507 @@ + + + + + + + +simdjson: simdjson::padded_string Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::padded_string Struct Referencefinal
    +
    +
    + +

    String with extra allocation for ease of use with parser::parse() + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    padded_string () noexcept
     Create a new, empty padded string.
     
     padded_string (size_t length) noexcept
     Create a new padded string buffer. More...
     
     padded_string (const char *data, size_t length) noexcept
     Create a new padded string by copying the given input. More...
     
     padded_string (const std::string &str_) noexcept
     Create a new padded string by copying the given input. More...
     
     padded_string (std::string_view sv_) noexcept
     Create a new padded string by copying the given input. More...
     
     padded_string (padded_string &&o) noexcept
     Move one padded string into another. More...
     
    padded_stringoperator= (padded_string &&o) noexcept
     Move one padded string into another. More...
     
    +void swap (padded_string &o) noexcept
     
    size_t size () const noexcept
     The length of the string. More...
     
    size_t length () const noexcept
     The length of the string. More...
     
    +const char * data () const noexcept
     The string data.
     
    +const uint8_t * u8data () const noexcept
     
    +char * data () noexcept
     The string data.
     
    operator std::string_view () const
     Create a std::string_view with the same content.
     
    operator padded_string_view () const noexcept
     Create a padded_string_view with the same content.
     
    + + + + +

    +Static Public Member Functions

    static simdjson_result< padded_stringload (std::string_view path) noexcept
     Load this padded string from a file. More...
     
    +

    Detailed Description

    +

    String with extra allocation for ease of use with parser::parse()

    +

    This is a move-only class, it cannot be copied.

    + +

    Definition at line 21 of file padded_string.h.

    +

    Constructor & Destructor Documentation

    + +

    ◆ padded_string() [1/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson::padded_string::padded_string (size_t length)
    +
    +inlineexplicitnoexcept
    +
    + +

    Create a new padded string buffer.

    +
    Parameters
    + + +
    lengththe size of the string.
    +
    +
    + +

    Definition at line 49 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ padded_string() [2/5]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    simdjson::padded_string::padded_string (const char * data,
    size_t length 
    )
    +
    +inlineexplicitnoexcept
    +
    + +

    Create a new padded string by copying the given input.

    +
    Parameters
    + + + +
    datathe buffer to copy
    lengththe number of bytes to copy
    +
    +
    + +

    Definition at line 52 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ padded_string() [3/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson::padded_string::padded_string (const std::string & str_)
    +
    +inlinenoexcept
    +
    + +

    Create a new padded string by copying the given input.

    +
    Parameters
    + + +
    str_the string to copy
    +
    +
    + +

    Definition at line 59 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ padded_string() [4/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson::padded_string::padded_string (std::string_view sv_)
    +
    +inlinenoexcept
    +
    + +

    Create a new padded string by copying the given input.

    +
    Parameters
    + + +
    sv_the string to copy
    +
    +
    + +

    Definition at line 66 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ padded_string() [5/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson::padded_string::padded_string (padded_string && o)
    +
    +inlinenoexcept
    +
    + +

    Move one padded string into another.

    +

    The original padded string will be reduced to zero capacity.

    +
    Parameters
    + + +
    othe string to move.
    +
    +
    + +

    Definition at line 77 of file padded_string-inl.h.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ length()

    + +
    +
    + + + + + +
    + + + + + + + +
    size_t simdjson::padded_string::length () const
    +
    +inlinenoexcept
    +
    + +

    The length of the string.

    +

    Does not include padding.

    + +

    Definition at line 106 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ load()

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_result< padded_string > simdjson::padded_string::load (std::string_view path)
    +
    +inlinestaticnoexcept
    +
    + +

    Load this padded string from a file.

    +
    Returns
    IO_ERROR on error. Be mindful that on some 32-bit systems, the file size might be limited to 2 GB.
    +
    Parameters
    + + +
    paththe path to the file.
    +
    +
    + +

    Definition at line 118 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + +
    + + + + + + + + +
    padded_string & simdjson::padded_string::operator= (padded_string && o)
    +
    +inlinenoexcept
    +
    + +

    Move one padded string into another.

    +

    The original padded string will be reduced to zero capacity.

    +
    Parameters
    + + +
    othe string to move.
    +
    +
    + +

    Definition at line 82 of file padded_string-inl.h.

    + +
    +
    + +

    ◆ size()

    + +
    +
    + + + + + +
    + + + + + + + +
    size_t simdjson::padded_string::size () const
    +
    +inlinenoexcept
    +
    + +

    The length of the string.

    +

    Does not include padding.

    + +

    Definition at line 104 of file padded_string-inl.h.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1padded__string.js b/structsimdjson_1_1padded__string.js new file mode 100644 index 000000000..20dfc3ab0 --- /dev/null +++ b/structsimdjson_1_1padded__string.js @@ -0,0 +1,19 @@ +var structsimdjson_1_1padded__string = +[ + [ "padded_string", "structsimdjson_1_1padded__string.html#a8e10a3a5a46a4d58459b052975b0bf66", null ], + [ "padded_string", "structsimdjson_1_1padded__string.html#ac06ec74c78934565cdf50df163d35476", null ], + [ "padded_string", "structsimdjson_1_1padded__string.html#a1b15f9345c0215e7548df1aa0105de98", null ], + [ "padded_string", "structsimdjson_1_1padded__string.html#a44fb0f219f05528e606f79dab7c32482", null ], + [ "padded_string", "structsimdjson_1_1padded__string.html#a6199f5bf259fcac114addeef569cf5a5", null ], + [ "padded_string", "structsimdjson_1_1padded__string.html#a952eaf7ff8ddf252d9c00a693978a4da", null ], + [ "~padded_string", "structsimdjson_1_1padded__string.html#aaf47c9ce732d92bd6e43c035f41338da", null ], + [ "data", "structsimdjson_1_1padded__string.html#aadd3bb268cbba43012c5d17a8c1ab7ef", null ], + [ "data", "structsimdjson_1_1padded__string.html#aa833ecdbe40c220c5baf7a29c472c972", null ], + [ "length", "structsimdjson_1_1padded__string.html#a863fded7b347718299190ad3f501d38c", null ], + [ "operator padded_string_view", "structsimdjson_1_1padded__string.html#a0e5b8e8917478af4e82e023c2efa40e9", null ], + [ "operator std::string_view", "structsimdjson_1_1padded__string.html#a4bf80c11155b8067a87bd76762bee23b", null ], + [ "operator=", "structsimdjson_1_1padded__string.html#aa43b3a8e0df4edcf960f04441dd9b930", null ], + [ "size", "structsimdjson_1_1padded__string.html#a07d50795f042119ab848c37cb8911db4", null ], + [ "swap", "structsimdjson_1_1padded__string.html#a34caaf522743a93b12c44b72c3de8925", null ], + [ "u8data", "structsimdjson_1_1padded__string.html#a3bff43c7bd96860d3da985cfeafd5bcf", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__error-members.html b/structsimdjson_1_1simdjson__error-members.html new file mode 100644 index 000000000..ad760561e --- /dev/null +++ b/structsimdjson_1_1simdjson__error-members.html @@ -0,0 +1,108 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_error Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_error, including all inherited members.

    + + + + +
    error() const noexceptsimdjson::simdjson_errorinline
    simdjson_error(error_code error) noexceptsimdjson::simdjson_errorinline
    what() const noexceptsimdjson::simdjson_errorinline
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__error.html b/structsimdjson_1_1simdjson__error.html new file mode 100644 index 000000000..b34a62759 --- /dev/null +++ b/structsimdjson_1_1simdjson__error.html @@ -0,0 +1,174 @@ + + + + + + + +simdjson: simdjson::simdjson_error Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_error Struct Reference
    +
    +
    + +

    Exception thrown when an exception-supporting simdjson method is called. + More...

    +
    +Inheritance diagram for simdjson::simdjson_error:
    +
    +
    + +
    + + + + + + + + + + + +

    +Public Member Functions

     simdjson_error (error_code error) noexcept
     Create an exception from a simdjson error code. More...
     
    +const char * what () const noexcept
     The error message.
     
    +error_code error () const noexcept
     The error code.
     
    +

    Detailed Description

    +

    Exception thrown when an exception-supporting simdjson method is called.

    + +

    Definition at line 72 of file error.h.

    +

    Constructor & Destructor Documentation

    + +

    ◆ simdjson_error()

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson::simdjson_error::simdjson_error (error_code error)
    +
    +inlinenoexcept
    +
    + +

    Create an exception from a simdjson error code.

    +
    Parameters
    + + +
    errorThe error code
    +
    +
    + +

    Definition at line 77 of file error.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__error.js b/structsimdjson_1_1simdjson__error.js new file mode 100644 index 000000000..53ce621eb --- /dev/null +++ b/structsimdjson_1_1simdjson__error.js @@ -0,0 +1,6 @@ +var structsimdjson_1_1simdjson__error = +[ + [ "simdjson_error", "structsimdjson_1_1simdjson__error.html#af5355b65f85b897251b3665086075f39", null ], + [ "error", "structsimdjson_1_1simdjson__error.html#aa8143615e5f6f02474f6ab165682ab6e", null ], + [ "what", "structsimdjson_1_1simdjson__error.html#a73b15aae33a4eef105d0735e03d83a49", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__error.png b/structsimdjson_1_1simdjson__error.png new file mode 100644 index 0000000000000000000000000000000000000000..77c9ca6f6ebed364b5fccad3e9428879da78a4da GIT binary patch literal 584 zcmeAS@N?(olHy`uVBq!ia0vp^(||aDgBeJk$*ZXZQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;hgXd>-EU6NbpM$gB-uYKcYlBWNkqH%CuKWH*^n9&HHA0tFtkn(Y z-k$Q?K~VMN`K`y>rm0l^6#l2jthhRLe>YWTNw7Vh&4>V!1O^ViXqO4`+#=_V+E%!gFcdE{Q{sdauN>NP?bTM zSNmdbFRaZIIbd9N@7m7g@%j$eUhNaTY;`&5`1<1$=G{u3zOgj*$`qf)zq}`EY(3`A zEBk5k?|rE`Px*Sa;-2fw%X>OiXRBDz&&H#Bm1i_Lp(eZ>QH?$Tx%Ce>I+1}xQKIAI!_*7+ ziEv&I|EE2FUG>(swflZFFy?Gn{dMm9Kkt8p^Il*AdS+>?uJPt)KN#OcL@vD^*M1%t O?F^o-elF{r5}E*PK@p(< literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result-members.html b/structsimdjson_1_1simdjson__result-members.html new file mode 100644 index 000000000..cd9f94d8f --- /dev/null +++ b/structsimdjson_1_1simdjson__result-members.html @@ -0,0 +1,114 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< T > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< T >, including all inherited members.

    + + + + + + + + + + +
    error() const noexceptsimdjson::simdjson_result< T >
    get(T &value) &&noexceptsimdjson::simdjson_result< T >
    operator T&&() &&noexcept(false)simdjson::simdjson_result< T >
    take_value() &&noexcept(false)simdjson::simdjson_result< T >
    tie(T &value, error_code &error) &&noexceptsimdjson::simdjson_result< T >
    value() &noexcept(false)simdjson::simdjson_result< T >
    value() &&noexcept(false)simdjson::simdjson_result< T >
    value_unsafe() const &noexceptsimdjson::simdjson_result< T >
    value_unsafe() &&noexceptsimdjson::simdjson_result< T >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result.html b/structsimdjson_1_1simdjson__result.html new file mode 100644 index 000000000..7f5c18eaf --- /dev/null +++ b/structsimdjson_1_1simdjson__result.html @@ -0,0 +1,452 @@ + + + + + + + +simdjson: simdjson::simdjson_result< T > Struct Template Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< T > Struct Template Reference
    +
    +
    + +

    The result of a simdjson operation that could fail. + More...

    +
    +Inheritance diagram for simdjson::simdjson_result< T >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    simdjson_inline void tie (T &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_warn_unused simdjson_inline error_code get (T &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline T & value () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline T && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline T && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator T&& () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const T & value_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline T && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    +

    Detailed Description

    +

    template<typename T>
    +struct simdjson::simdjson_result< T >

    + +

    The result of a simdjson operation that could fail.

    +

    Gives the option of reading error codes, or throwing an exception by casting to the desired result.

    + +

    Definition at line 205 of file error.h.

    +

    Member Function Documentation

    + +

    ◆ get()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    simdjson_warn_unused simdjson_inline error_code simdjson::simdjson_result< T >::get (T & value) &&
    +
    +noexcept
    +
    + +

    Move the value to the provided variable.

    +
    Parameters
    + + +
    valueThe variable to assign the value to. May not be set if there is an error.
    +
    +
    + +

    Definition at line 127 of file error-inl.h.

    + +
    +
    + +

    ◆ operator T&&()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson::simdjson_result< T >::operator T&& () &&
    +
    +noexcept
    +
    + +

    Cast to the value (will throw on error).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +

    Definition at line 154 of file error-inl.h.

    + +
    +
    + +

    ◆ take_value()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T && simdjson::simdjson_result< T >::take_value () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +

    Definition at line 149 of file error-inl.h.

    + +
    +
    + +

    ◆ tie()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    simdjson_inline void simdjson::simdjson_result< T >::tie (T & value,
    error_codeerror 
    ) &&
    +
    +noexcept
    +
    + +

    Move the value and the error to the provided variables.

    +

    simdjson_result<T> inline implementation

    +
    Parameters
    + + + +
    valueThe variable to assign the value to. May not be set if there is an error.
    errorThe variable to assign the error to. Set to SUCCESS if there is no error.
    +
    +
    + +

    Definition at line 122 of file error-inl.h.

    + +
    +
    + +

    ◆ value() [1/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T&& simdjson::simdjson_result< T >::value () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +
    +
    + +

    ◆ value() [2/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T& simdjson::simdjson_result< T >::value () &
    +
    +noexcept
    +
    + +

    Get the result value.

    +
    Exceptions
    + + +
    simdjson_errorif there was an error.
    +
    +
    + +
    +
    + +

    ◆ value_unsafe() [1/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline T&& simdjson::simdjson_result< T >::value_unsafe () &&
    +
    +noexcept
    +
    + +

    Take the result value (move it).

    +

    This function is safe if and only the error() method returns a value that evaluates to false.

    + +
    +
    + +

    ◆ value_unsafe() [2/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    simdjson_inline const T& simdjson::simdjson_result< T >::value_unsafe () const &
    +
    +noexcept
    +
    + +

    Get the result value.

    +

    This function is safe if and only the error() method returns a value that evaluates to false.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result.js b/structsimdjson_1_1simdjson__result.js new file mode 100644 index 000000000..9a9068b79 --- /dev/null +++ b/structsimdjson_1_1simdjson__result.js @@ -0,0 +1,12 @@ +var structsimdjson_1_1simdjson__result = +[ + [ "error", "structsimdjson_1_1simdjson__result.html#a23470fcc7f01262019e96d3f3010b4a1", null ], + [ "get", "structsimdjson_1_1simdjson__result.html#ab0fafc6d63a14891788a9edaedff4b05", null ], + [ "operator T&&", "structsimdjson_1_1simdjson__result.html#afcce23c64894ec135fe8c2d255d2121b", null ], + [ "take_value", "structsimdjson_1_1simdjson__result.html#a815368a9e09fa675d0b6672595f5ad19", null ], + [ "tie", "structsimdjson_1_1simdjson__result.html#a86dbcba063713c0e284dbde9fae17568", null ], + [ "value", "structsimdjson_1_1simdjson__result.html#ae52c2cc66e62e47b05f29e342ad5078a", null ], + [ "value", "structsimdjson_1_1simdjson__result.html#af7f6d5a5e979b60d5231449d53dcd9be", null ], + [ "value_unsafe", "structsimdjson_1_1simdjson__result.html#a67ac8535dcf368fed604549a07e423e2", null ], + [ "value_unsafe", "structsimdjson_1_1simdjson__result.html#a3c25e74570144de48ef71ae490def85f", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result.png b/structsimdjson_1_1simdjson__result.png new file mode 100644 index 0000000000000000000000000000000000000000..53506a257dc02dc8d69e2fcb1d0446927a0ddb8c GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0y~yVB`d{J2;quqiHx}vB1{g0ygu8)cnpI@E3=eu$2x$CDl>F2R$zPrvd^YOI$tIcX@zay*m z&5PPTfn(*0;;sL6l0!D1YkqfRTm4JNE=~K=n9I9W_P$xIa_P^fa?|yfeB>u&vP+Eu2l+Tkj*f3N03XO&r}s#}jd)EHX@bkEI`-l952}|NLCL3^ida5M~O`4=8Bq&(Ma-jb=^8vF? zt|RS%Ggtyl8V$H6Gi1$d_GGxhVCHcCo~#;U0`m<9+v@TeEDgK~%wOKzO%!49Y#VQ<*y)o0sw+QzO1W`CW73uKtjcx$Uzbc+@jDViX^7hORPwVQoFZ!3W%{4doR2NUrrq+DM z?Ecpes$=Ag?|W$dnsvlzcI6(Uoj*ToeVw=T_uuYQ!L3zR=3cxT-mc!|<+yi;tk3S{ zt50_wDZG}sp(uWrRm;{qql%m?*>8~D95*-5?~Q)d?#Bkl)fD9?MQ8_p+LUXx z`*CZaSNPlw%AF$S_f4#q?2MinDr&sMt@G{5IWKe)ij7*Xym+bc_U+=k7tPi_FR@d1 zdZn=>O82xdhm`8YZL{9_mzZ4RTJUw@(=rAIo}cUH>}Xd%VEJ7l z?)M}{A>$vFYPUb5CFKt5EOOsKeVEz7|i<v4y{ujP{)(`^s9dx7b{qSSN9L-A;wLA{uuFWdRjI4= qx-(OlVgC(yNSRFR=-8nAkIC$iF;75m<}_eI!{F)a=d#Wzp$PzQfiZCa literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman0b124547aa99491b95d3b709cc8ba113.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman0b124547aa99491b95d3b709cc8ba113.html new file mode 100644 index 000000000..08994bb4b --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman0b124547aa99491b95d3b709cc8ba113.html @@ -0,0 +1,124 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    raw() const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    unescape(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &iter) const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman18ec6e334ea49309508401878c544161.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman18ec6e334ea49309508401878c544161.html new file mode 100644 index 000000000..e1602f03c --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman18ec6e334ea49309508401878c544161.html @@ -0,0 +1,126 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    operator SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    operator!=(const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > &) const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    operator*() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    operator++() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    operator==(const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > &) const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman5f311c30a735cab74da62d82024b9198.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman5f311c30a735cab74da62d82024b9198.html new file mode 100644 index 000000000..a501a2834 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman5f311c30a735cab74da62d82024b9198.html @@ -0,0 +1,126 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    operator SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    operator!=(const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > &) const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    operator*() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    operator++() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    operator==(const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > &) const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman663397d8034fdf0054210fe0a2553fd5.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman663397d8034fdf0054210fe0a2553fd5.html new file mode 100644 index 000000000..ba816f087 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman663397d8034fdf0054210fe0a2553fd5.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    operator SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman73f6105c02baf0bea5c887e614f5b224.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman73f6105c02baf0bea5c887e614f5b224.html new file mode 100644 index 000000000..e997aa051 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman73f6105c02baf0bea5c887e614f5b224.html @@ -0,0 +1,167 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    at(size_t index) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    begin() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    count_elements() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    count_fields() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    current_depth() const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    current_location() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    end() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    find_field(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    find_field(const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    find_field_unordered(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    find_field_unordered(const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::document_reference &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_array() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_bool() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_double() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_double_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_int64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_int64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_number() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_number_type() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_object() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_raw_json_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_uint64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_uint64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    get_value() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document_reference &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document_reference &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    is_integer() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    is_negative() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    is_null() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    is_scalar() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator bool() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator double() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator int64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator SIMDJSON_IMPLEMENTATION::ondemand::array() &noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator SIMDJSON_IMPLEMENTATION::ondemand::document_reference &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator SIMDJSON_IMPLEMENTATION::ondemand::object() &noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator std::string_view() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator uint64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator[](std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    operator[](const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    raw_json_token() noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    rewind() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >protected
    simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::document_reference value, error_code error) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::document_reference &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    type() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman8d5f87b59eed7747952fa5b22ffa7abe.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman8d5f87b59eed7747952fa5b22ffa7abe.html new file mode 100644 index 000000000..6fea5a83b --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondeman8d5f87b59eed7747952fa5b22ffa7abe.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    operator SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemanc727a1699918daa2a31e62be31f36420.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemanc727a1699918daa2a31e62be31f36420.html new file mode 100644 index 000000000..0eec81b0c --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemanc727a1699918daa2a31e62be31f36420.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    operator SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4-members.html new file mode 100644 index 000000000..be6f7e55c --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4-members.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    at(size_t index) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
    at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
    begin() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
    count_elements() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >inline
    end() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::array &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::array &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::array &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    is_empty() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >inline
    operator SIMDJSON_IMPLEMENTATION::ondemand::array &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    reset() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >inline
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::array &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html new file mode 100644 index 000000000..13434931e --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html @@ -0,0 +1,207 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorbegin () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorend () noexcept
     
    +simdjson_result< size_t > count_elements () &noexcept
     
    +simdjson_result< bool > is_empty () &noexcept
     
    +simdjson_result< bool > reset () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat (size_t index) noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat_pointer (std::string_view json_pointer) noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::array &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::array &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::array &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::array &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::arrayvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::arrayvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::arrayvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array >
    +SIMDJSON_IMPLEMENTATION::ondemand::array first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 176 of file array.h.

    +

    The documentation for this struct was generated from the following files:
      +
    • include/simdjson/generic/ondemand/array.h
    • +
    • include/simdjson/generic/ondemand/array-inl.h
    • +
    +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.js new file mode 100644 index 000000000..510108ebf --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.js @@ -0,0 +1,11 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#a7193907a54632951e337fc41febf75a4", null ], + [ "at", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#a3dcaff6844a8dbec6d9a21806f786031", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#aac43b7e80c89bf9ec7742c7889d4eaec", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#a81e6dce45f02badff382827d3e947cfe", null ], + [ "count_elements", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#af2fdfe4a3e6f617e07e213f0d50a3cc4", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#a55fa3af64867de8be0cabdaf3cce16a4", null ], + [ "is_empty", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#a0c552667913d1becbb25a270409cfb6b", null ], + [ "reset", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.html#aabb4bb3d53dbd6343f2a590b8f02824b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..63fff8b050e7d01fc8533fdb8dbb860b5f835e08 GIT binary patch literal 1896 zcmchYX;hO}8pq!(EqQX>dXEMmAYwDAYu;pq2!thy)Y?nPE!9 zA|Z$v2`PmD6$K=KY!XGJ2!v(WOjrVF28Dna$RbPTmCw_!bI-Z=dG2}s|MT1r&+ptc zA20WvI)Bjt0AMFbI^_!h2so7cY)3$6LHCh4D46(o_`7MfS}2{JUx~?jaR<YQYVSC4#Jp5iMjR(u=}FLZg7-oiXx?+B9YV07j-Y3O}3Z@FhOvV)$--ex?VZr7bK zC44n@#^H$~RwDCn?X*q4e;Cb_?;AQ<>y%OZZ&fss>vYbNiE#EGZA3lhRF+=~0(*IS0hG}|CIoRT{zbjh>$tq!QCMBM-v6RfkzP8^cY7i?f3aTvTl;~+<`3jNbxS_wrpL^JD6zf$CD+U| z3n!$9cTM?RJ&iKS+A`uYmU+lB>=mO|fgg2~y?kGw|HwXgFh;rWQGmTtFfJg~)n1ye ztWq^O6tV32(MAo*f7qzn5j8<@(Za+M{Hd}XSxsz6Xf&SD;s!gi@?Ao5a+Cb|va!AL zuuQ`^F>c9@tMs}B!v9Wp#u>VUWu&@<53hN5ACQFDAzmY8?c%fV5=(j43}(~gUV}W+ zaT^w`kVIXM7{%-LCluar7BDKJ-@b42WDW+~rlvSo6iwX5U~(IbI_nHkd&=uUcn9Tz zckB|=)JEZ;`h-Q@vrrzi4_M674{jm8?tGvp;U$bP&vV{%O-ZvIyhq@}OrGR4x4 zsNAoFi!}%Jr@jF{d*1BbpBGhvX|Y+fN_HPmYx>ldl#lN(Ob7OAq#VKu&e#IfrmK$@ zlBpTpD|V&bUz>x(j$|#d^2^9WOtfbHPZWxg80+j}w+4_Zsk3`iM>_*SbQfU`Q(JEU z7yu=VFGd0eNsbzYr6UBbEl38;VSmfvzJ>{yl=D0cG*dolv{9S+)v#7I+)v4oxch56br!SnOpVHPfl^)#G<12hu? z@3?vjvRp`LL63*4d#=nC&cBy_+=MKh=^Y)}xI8ry zcN$LjOH{s}JnHx{$F%BQl$9e8DKf%P;WQl?`h2x^$EZ?M@wqYeSA0{ryU?lTvsL9^ zkItv2AX7C zl`ku%_};%KrPYw&*P9}yy8Ur;0|T}7Zg6yDe<6fC4zXC6E9?qXiot2wtQo z&z-z{unmap#bSWnOX5WwK<+y4bC{dMyI literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html new file mode 100644 index 000000000..a2b0af20e --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html @@ -0,0 +1,198 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator* () noexcept
     
    +simdjson_inline bool operator== (const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > &) const noexcept
     
    +simdjson_inline bool operator!= (const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > &) const noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator > & operator++ () noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array_iterator && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array_iterator && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array_iterator && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::array_iterator && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::array_iterator >
    +SIMDJSON_IMPLEMENTATION::ondemand::array_iterator first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 74 of file array_iterator.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.js new file mode 100644 index 000000000..1f8bf36f5 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.js @@ -0,0 +1,8 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html#a1c7c269b4567376cdd0e1406a2b43f1d", null ], + [ "operator!=", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html#a62db081f4d22ed0434cf997b3bd3f2c1", null ], + [ "operator*", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html#ade4fad54d7e78d06501c053dbb2fc704", null ], + [ "operator++", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html#a80d1a491f89534a7474f7a6ff6ab236d", null ], + [ "operator==", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.html#a197bf2b7db2dc1d4fa59a1d12ee42526", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1array__iterator_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6f412cbfa939d2e288fa2937d5bbfc266b8d8ded GIT binary patch literal 2074 zcmc(fdpOkF8pnrnXLoYnZIqflXigXma^1>pay@dt`>By#lv~DKR31ZQ#%0hbca=+> zVI*YGm@tv;I>x0#VTQ~unjwb$Q|J7<|2^w@)>`j(z3;o8wbrvfZ>F=Ojgw= zg|fADfj|x+K-*dL5ICxcO1uLnMQ3|gtNs0b&|F#j8k5^|AGE%A3WXw+IddG8qR}pn z7a?HKK^q@%)qy}n9-}NRTrmQlh@T=qo|ZgZ8ZrKA|J3}oY>UJx!w>_8VXVt$X18E= zl|>4J9Hz@8hoPC|x7V0tKMD+Gjmw7qj54BP^Ps0d;qHmRU4r)8{vi(k;qeZl+Tsp; za3d-d^}O@zjw-6Wy0vR!ofoWf#;$Ph^Zf);QqQi*<{Z&8zdU~@hE*A0gm+LAX*XMC zDA@h+Cc{qyb+M#4b`oGzM7jCO>?r1+6JBG4aStVtWS$!rP!4-lkBQG6QzS&} z9VOrnH(0ehB63KY1_f1xxf<5E^^FQ&e^>gjI6XvtDY`F=ItG9IqQ+$D)Mb3ULrbgO zGMW7-(9OEX?W@|YP(O1CI;-Y${kHS=v}xhbj-3GyX->h){9PRU$VTs@n(-Y6WC&6u-_i0|85wj&zF6d1Cxd_vB{ORr=L={M1^0iBF(F)R8TMRF5nmfKITK4&VD=V0@?#HM%CPU)6l?D zhJ`~1uU)CGp^e*~*jW5a{eW$qYDxvcT}GGcdu{rGsYjKL=hN{kvdhQG)XV&SE}$4T z_?watM$~C*F7X~m)wrklVr?^HDg$j*E|+IXI(ZjJycF@4mI&hnb(u)5jF~2e;oa40 zukDzj>4`P|x)31ol=r(*lt#GWl3VE*NzOW}W2l_YCppQ=7!d8MJpk5lhfhrB{_VEe z{$tE5`q)3kc)U};2cdj9h-@wC;CSReoTxfhMn>`JCOO@fsmZe!!CIcK zI1NNr5Q6r?sL^!U4be`Msy-!TXB(^3xT}!gcx>k3xO-0TiG8kERHDaJLou hz^e1@zkhV2W%D9rm9KPws}BThC@V+H#&dybe*yRH+ROj| literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4-members.html new file mode 100644 index 000000000..910f568e4 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4-members.html @@ -0,0 +1,177 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    at(size_t index) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    begin() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    count_elements() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    count_fields() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    current_depth() const noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    current_location() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    end() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    find_field(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    find_field(const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    find_field_unordered(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    find_field_unordered(const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >protected
    get() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get() &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(T &out) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(T &out) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get() &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(T &out) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(T &out) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get() &noexcept=delete (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get() &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(SIMDJSON_IMPLEMENTATION::ondemand::document &out) &noexcept=delete (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get(SIMDJSON_IMPLEMENTATION::ondemand::document &out) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_array() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_bool() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_double() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_double_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_int64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_int64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_number() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_number_type() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_object() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_raw_json_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_uint64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_uint64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    get_value() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    is_integer() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    is_negative() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    is_null() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    is_scalar() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator bool() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator double() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator int64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator SIMDJSON_IMPLEMENTATION::ondemand::array() &noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator SIMDJSON_IMPLEMENTATION::ondemand::document &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator SIMDJSON_IMPLEMENTATION::ondemand::object() &noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator std::string_view() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator uint64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator[](std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    operator[](const char *key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    raw_json_token() noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    rewind() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::document &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    type() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html new file mode 100644 index 000000000..9dcd6e9cb --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html @@ -0,0 +1,397 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline error_code rewind () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::arrayget_array () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::objectget_object () &noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
     
    +simdjson_inline simdjson_result< double > get_double () noexcept
     
    +simdjson_inline simdjson_result< double > get_double_in_string () noexcept
     
    +simdjson_inline simdjson_result< std::string_view > get_string () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringget_raw_json_string () noexcept
     
    +simdjson_inline simdjson_result< bool > get_bool () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueget_value () noexcept
     
    +simdjson_inline simdjson_result< bool > is_null () noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () &noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () &&noexcept
     
    +template<typename T >
    simdjson_inline error_code get (T &out) &noexcept
     
    +template<typename T >
    simdjson_inline error_code get (T &out) &&noexcept
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array () &noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object () &noexcept(false)
     
    +simdjson_inline operator uint64_t () noexcept(false)
     
    +simdjson_inline operator int64_t () noexcept(false)
     
    +simdjson_inline operator double () noexcept(false)
     
    +simdjson_inline operator std::string_view () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () noexcept(false)
     
    +simdjson_inline operator bool () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value () noexcept(false)
     
    +simdjson_inline simdjson_result< size_t > count_elements () &noexcept
     
    +simdjson_inline simdjson_result< size_t > count_fields () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat (size_t index) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorbegin () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorend () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_typetype () noexcept
     
    +simdjson_inline simdjson_result< bool > is_scalar () noexcept
     
    +simdjson_inline simdjson_result< const char * > current_location () noexcept
     
    +simdjson_inline int32_t current_depth () const noexcept
     
    +simdjson_inline bool is_negative () noexcept
     
    +simdjson_inline simdjson_result< bool > is_integer () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::number_typeget_number_type () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::numberget_number () noexcept
     
    simdjson_inline simdjson_result< std::string_view > raw_json_token () noexcept
     std::string_view document::raw_json_token() const noexcept More...
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat_pointer (std::string_view json_pointer) noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () &noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () &&noexcept
     
    +template<typename T >
    simdjson_inline error_code get (T &out) &noexcept
     
    +template<typename T >
    simdjson_inline error_code get (T &out) &&noexcept
     
    +template<>
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::documentget () &noexcept=delete
     
    +template<>
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::documentget () &&noexcept
     
    +template<>
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::document &out) &noexcept=delete
     
    +template<>
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::document &out) &&noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::document &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::document &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::documentvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::document && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::documentvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::documentvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document >
    +SIMDJSON_IMPLEMENTATION::ondemand::document first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 655 of file document.h.

    +

    Member Function Documentation

    + +

    ◆ raw_json_token()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson_result< std::string_view > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document >::raw_json_token ()
    +
    +noexcept
    +
    + +

    std::string_view document::raw_json_token() const noexcept

    +

    std::string_view document::raw_json_token() const noexcept

    + +

    Definition at line 498 of file document-inl.h.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.js new file mode 100644 index 000000000..427792cc6 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.js @@ -0,0 +1,60 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#aee14d172c38cccaebd412e89b9ddb6fd", null ], + [ "at", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a78feffa1a15a0ae2f244e87d89bbe372", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a17135304a51a3cf08cc802630f5cc1d0", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a9a751f7a061bc6e8d3159556466edbf0", null ], + [ "count_elements", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ac4c6cfbf267a75a8448b7353cb1f53f5", null ], + [ "count_fields", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#aad912138afff908ddd2f1ceacc51fb86", null ], + [ "current_depth", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#abee12ce61b43c3b7c89e0af14fd81f12", null ], + [ "current_location", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ad93b76ab3636d40ce75059e0f8653c6f", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#aecc254ac74f3ccd0704813be27c98470", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#af581e06e3dae820014483271ba7eb935", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a21068ca112785dcf71ac9832250e1740", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a88d370115d7ac1708b0127fc64ce9b2d", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a567b835f20e2f854f4303e83f4d3bd74", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#adb70072b98e8c3c650ce695f3e928e66", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a50f16db4f51e54d5d1a04af5c0dfefe0", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#adb70072b98e8c3c650ce695f3e928e66", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a429242515e1139a04142c3f1aa5cbe68", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a429242515e1139a04142c3f1aa5cbe68", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ab50c666f3261dc9793bdef557f731f05", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ac1bc5849809d087f4d4b78482ef0424b", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a87b78dd9ad9dd5fc8f5f1368ef004928", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a6024d17789cc49d3147445b3def018f6", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a6024d17789cc49d3147445b3def018f6", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ada47799dcb5e64e43851d78d346b1d47", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ada47799dcb5e64e43851d78d346b1d47", null ], + [ "get_array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a89e365ab71c3c1e6c52c2bbc914069ef", null ], + [ "get_bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a084c9ea1aaf3848f34ec75c776dd660a", null ], + [ "get_double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a696390da51f64f6955aa43484b2e8c41", null ], + [ "get_double_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a9fbe143e7d0e23f9c62cbae279c30790", null ], + [ "get_int64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a1c2749aea938f6f00eec37d098b4a102", null ], + [ "get_int64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#abcb0825900ad9b8ed77b5e8c11b553b1", null ], + [ "get_number", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ac0e966ea81b5a86485e82bcadbad4903", null ], + [ "get_number_type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a2d53b6aa5b0316e08cbc16e6f970d3c8", null ], + [ "get_object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a52332b6ab6b8098fca5d73c575b8f3e7", null ], + [ "get_raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a458029a37b519f4594dc78812fee8657", null ], + [ "get_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a4da9f9206bcbc12a8bfb88fdf3473b9f", null ], + [ "get_uint64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ac3cf80b50922d31e34a069b45c4e125b", null ], + [ "get_uint64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a61c56912d76a1a730e4cf9b5aea5d69f", null ], + [ "get_value", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a24f63365bd58c9f0c6ec1aae438e008d", null ], + [ "is_integer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a59a47cbdb4c226a7d33e0315cce62984", null ], + [ "is_negative", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a662ec28f78a9fcba046eaa4509efa6a3", null ], + [ "is_null", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a55eeb1baf095500e8cf3d97f67e362bd", null ], + [ "is_scalar", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#aeda745db35d2b64a7956a70872242fcb", null ], + [ "operator bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a371fb9d9879782009c11e547ff79e869", null ], + [ "operator double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ad2c7498f364cf7803f83408a8629a5ac", null ], + [ "operator int64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a4762f6c497ac46d5c7a130b2f389156d", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a5a4d779ce258cac95b1799f16b49695b", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a50bddd1e9bc10caaabff8ff4d7eb903d", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a10a199e7230688e0177a870dfd34ee99", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::value", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#aae2f837578cabf883f3050a88146cbb0", null ], + [ "operator std::string_view", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ac994a43ba5e7fbde29d82c8d437c5fb7", null ], + [ "operator uint64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a09cb25b160c9db3f5279ef513db3deac", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#abfee745b54cd29f70a7564e8fade64f9", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#ae69c9218f418dab3b1aafeb2b6504fab", null ], + [ "raw_json_token", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a0bcbee63db869ac122bed75000b54d46", null ], + [ "rewind", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#af317ba3fe69d41d114b2a2320d03dc8f", null ], + [ "type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.html#a32e9d2b26e7c85c77dc3cef0f812ca1b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..47ab1c1ec032744745f1668d74e7d4a72dc821c6 GIT binary patch literal 1914 zcmc(f`8V5HAIHCz(y?~vlxU}Aq^*64q7&P6iYB%YI)eyOQrb{eN;URV6j2&Hgpzp( zO05kVEfO`2igXNO&8T%y)!L&7c~Z`qGylQ!Ip@Ca`@YZp;eO8fyl<+r(-m1M6)6A! zWZ^JtBmjtkgxdM2n2pySf1ME?kA@?i zTmj*wuQkYWg8+c!H*o7qZudk!74_Yj)snH6|5UXnK(u!&i;0es*qIE3gA?lzD8B^eBYLk>yI!C+y;$6&t$s>4CqkTgm|+vdC) z{IYfkJ#cH^{R)>@6KBrxZtgXp%UQfkwK=KPG?8byQ1KYFkr~p%FB|ah?h`9!Ee{28#_YlQxH`zb^=#|*B4GdHU>WO)dAg+z8`7_2wfg| zg?7l_sJRrRXWJ>&ko{oiQ39#e2oFuQH@Z17 z5OAUMEZEiSY(|Y{>0DmSs9&rF4%g!zW@qKC5Z|%*12Dh`1M6~dVCT7#2<(r7CwFM? zNSCIwvk2tKzcrqQZ{EW>(M!yBcnKtPo|{)12X(v8HMEGYlw;^qsHqp4Zhom)-1lt) zRk|N&6-exkk#(n`z2d4to|J|nFa98Xdpsj0sykP$$%ab%@?-iBC(1skixjN}+zgpkaR=nfTQn5XtDYY~#3151=i|D?f^+A#5*r-T~-(=q)*^M8V` z`Qzzk>e{MdYrnb#B4}&w=7y-;Z*^yOWJ)@-Mz=eUnmV|jZ#>fF6*KoZ8h9f zp6%5|PPIR}M0%6-ygYlWAe6J*;4O>5?|D)KPM(_BWQ|_u6+nMn)B>8O->`-wl(Q#o zfFZ~9#>Uv@g@+$FyYFA^t(nXg&7(mBY>cy@7PG9~sFZ^5s=7PDaClF$uuvW}?QmTu zbda9bh)yr=CB`Wlo&!jQ?i2mT?!*j7zHZu7e!ZZj#E zYeE$OG7R}irFanofXM<3014H#k9lPxz5pRt2pPufLIWLHK+LyVMhHNmTKXRiIj|1> z|F@1O!!*nCk#>e){@ODDk<&JzN$CMC42eSRGG;23~+?Wu7?HDZy@|%vX*K7VG*Le+p_GnNzC9%02ZTM(eg%|j0xDWIAJvn407ZS1FMfXo>fTA`0#v7x2&39vex4if@ znexJ9`eb)@28jKYjM5NOooPbQR}(~J7=p}P!}5hXN8CjH*?5sJS!UXuXT=x*Kk63R yNH}^TUrOCUfCS?Jfd9XBt7d5q(&2DccbBc6^^>D3FbI7>Sa2IB>)M}v6aNQS#)7s0 literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html new file mode 100644 index 000000000..bfa71b87f --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html @@ -0,0 +1,352 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result (SIMDJSON_IMPLEMENTATION::ondemand::document_reference value, error_code error) noexcept
     
    +simdjson_inline error_code rewind () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::arrayget_array () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::objectget_object () &noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
     
    +simdjson_inline simdjson_result< double > get_double () noexcept
     
    +simdjson_inline simdjson_result< double > get_double_in_string () noexcept
     
    +simdjson_inline simdjson_result< std::string_view > get_string () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringget_raw_json_string () noexcept
     
    +simdjson_inline simdjson_result< bool > get_bool () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueget_value () noexcept
     
    +simdjson_inline simdjson_result< bool > is_null () noexcept
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array () &noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object () &noexcept(false)
     
    +simdjson_inline operator uint64_t () noexcept(false)
     
    +simdjson_inline operator int64_t () noexcept(false)
     
    +simdjson_inline operator double () noexcept(false)
     
    +simdjson_inline operator std::string_view () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () noexcept(false)
     
    +simdjson_inline operator bool () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value () noexcept(false)
     
    +simdjson_inline simdjson_result< size_t > count_elements () &noexcept
     
    +simdjson_inline simdjson_result< size_t > count_fields () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat (size_t index) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorbegin () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorend () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (const char *key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_typetype () noexcept
     
    +simdjson_inline simdjson_result< bool > is_scalar () noexcept
     
    +simdjson_inline simdjson_result< const char * > current_location () noexcept
     
    +simdjson_inline simdjson_result< int32_t > current_depth () const noexcept
     
    +simdjson_inline simdjson_result< bool > is_negative () noexcept
     
    +simdjson_inline simdjson_result< bool > is_integer () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::number_typeget_number_type () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::numberget_number () noexcept
     
    simdjson_inline simdjson_result< std::string_view > raw_json_token () noexcept
     std::string_view document_reference::raw_json_token() const noexcept More...
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat_pointer (std::string_view json_pointer) noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document_reference &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document_reference &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::document_reference &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::document_reference &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_referencevalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_reference && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_reference && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::document_reference && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::document_referencevalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_referencevalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_reference && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >
    +SIMDJSON_IMPLEMENTATION::ondemand::document_reference first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 726 of file document.h.

    +

    Member Function Documentation

    + +

    ◆ raw_json_token()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson_result< std::string_view > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_reference >::raw_json_token ()
    +
    +noexcept
    +
    + +

    std::string_view document_reference::raw_json_token() const noexcept

    +

    std::string_view document_reference::raw_json_token() const noexcept

    + +

    Definition at line 761 of file document-inl.h.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.js new file mode 100644 index 000000000..818d67502 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.js @@ -0,0 +1,49 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#aa53af9357f3c3aa144ccda80ed709d4c", null ], + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a68051e56ba7cbc7951bdc49d02bb62fa", null ], + [ "at", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ae1557f700923c9f18b75f2d320e434c7", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a02a7afea763acd3b79a77198c26aa947", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a32724251c423c33cd1fb095d6f8faa40", null ], + [ "count_elements", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a84d35046d2328c1b52052b60abdfff5f", null ], + [ "count_fields", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a940c313d530e0254342235d441e334b0", null ], + [ "current_depth", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a4367c0cab418bbe455a4b49acc274e89", null ], + [ "current_location", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#af76e3ed42262a4fa24d0452c81e6fcc7", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ab68d719e9d7079f61481d13d37fc615a", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ad30a48ed641b349206b8fdb6b400ac36", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a66a5f8fb052b7d2b5a786f6fc666d2e6", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#aa924317778c6f7d8e3941c7aadf1854d", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ace03cdf56314cb0b5cbe2a7d45e0cf2f", null ], + [ "get_array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#aa6ef30cb4fec233a33a0e0a8caf90e0b", null ], + [ "get_bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a2543c2174565f1dfee02b6b0bac4ff7d", null ], + [ "get_double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a50ae30ff13deb16a82ca945f536624eb", null ], + [ "get_double_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ae34bac01f275a64170b1e9773a8723d0", null ], + [ "get_int64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a65c07706275a3f7c5518afbfd30ce394", null ], + [ "get_int64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a51ffc1d04fedd7493820f1d5371f2cca", null ], + [ "get_number", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#aca433867baaffeff86367c88bf192572", null ], + [ "get_number_type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a0eec4670ea5b5a698b75f8ed05d6a0f9", null ], + [ "get_object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a6cdc33399794644363a720d6f271dd8d", null ], + [ "get_raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a90ecb32d9f0c497568d4de9b9affcb04", null ], + [ "get_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ae24e30225c73597e585032bae8a8b0df", null ], + [ "get_uint64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ad65311d0d524203aeb76a4ecb25e8a71", null ], + [ "get_uint64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ace8e77df3989649fdeb84110a37521db", null ], + [ "get_value", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ac2d22c558afdcbac2d66e2d333526202", null ], + [ "is_integer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#af95dc38aa04430734b691ff4ba1326f7", null ], + [ "is_negative", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a24eb1bccb3246b65ba607c838fc1af0b", null ], + [ "is_null", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a956a0b0a4f8f910c45be61370ae96586", null ], + [ "is_scalar", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a6aae812b1929c086b593c0b3bad9d333", null ], + [ "operator bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a0f4f729f5e2296ac62d5bc7481f6a445", null ], + [ "operator double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a20982b10f89ac3ec1f07acf11e5a9d5a", null ], + [ "operator int64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ae13d3f823d9ac6a763cc3c5beae1c4e3", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a096cb746c1e63523c55b0180884e4462", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a5843e97c0982f79bc79edba6e8eee2b6", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#acc2ab79d219fc8cd814c8cf656ca00c0", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::value", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a858f380c29315521e43dd6025785e7a4", null ], + [ "operator std::string_view", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a9d15caa939a40325a3dabbe3224ddbbf", null ], + [ "operator uint64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ab10a7c98d14d3a40aef1a8b1e9cd29d2", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#aa2873ff8fc330dd1138bba61e7487287", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ad99c6aa33f3728d6a3163b56db1ea969", null ], + [ "raw_json_token", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ac1bcd8afb10742d6f18b8f2f07ba0392", null ], + [ "rewind", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#a9e474f04cbd9cf41a1e698ba6bfbf701", null ], + [ "type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.html#ad8d508768cb4c8bdf6c169395e888c34", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__reference_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2531c1ad451429581f30719a6714924e618b4b GIT binary patch literal 2125 zcmc(ec{JPU8pnT_+LcliRjn;mMzz*jr?pgSsVd3O(ncy=WNb5tK~NKnrb8Q3Yw5VQ zYJUi|4HYJq+NLeF#uBt+OJhrs3UM=f&$;)nIrqQ&ob$Zz_g%ivd7pFMPnwJKRS8i= zQ2+oW;Py7I03ZPJw2QC+Z`9va58_QHTpZnO4-O7^a_Qq%WCryCPaS4^d;5{JDHYyQ zIKtKWCcwM&SB&(zT?7E3DY(sLw`e|Q!Q6MObK*9Vj9d;kBW|*@TNnd#%4t|_RB*xT+!q2lw+yX|qfEOmUEkSt@6nvV+6t)ve{VLbaIK-4Bx2z`?5X5}2*w1Pe7QbYzytn-4ftiOXXRh{PR@atSV7*m3pq%%{`9)iXD51Qg$pPFAf@ zyVaD9kVVL(Vi=glbuBN(3z#?dN2_iJ%VrZVbR9T0v59#;5V%KkA`UmijCFO6b6WIk zH%Cx0=R}zz$PgmTznGjfT`A)i$!y1zmf<*3+0`Q094ossUzI4OH##Idsi%_q-d@p5 ze;p>>7L^v7h7zB4p!Tf|z9(hfHnLrzStB(g*KEKdz%4Ywoz;Bz5~Kx_U1Z2=)6#DQ zAeB?iU?<%nRgFsf;8>aHP45%C{;+6 z87wurfvhWUiS}t$vy{!28doFApchiLNT%tA(e9ZglTSAk#*okU= zY}*dYV{ddw$sugIs5R;OyfLqIQT-Oh3f;1XpY^wTDKR$6s=D7e>`&$@zwk#DQO2i~ zs$TaCma&}Imb(M+GUg+10?cX2B}B%FWIepNmp96FG71fMwKH-cagWo#?@6FOB4Oe^ z!5y*HMVXL3d2@3|?#d;VxEJN|4nFG3UOD*LRO+sA9Ovuuh~G&i34~X&Ul6-U`Xu!~ z(8iV;{ST@B9$9||1LEyR*pltQ2|!@oQcfy=J8?#@kBN0zp8q9T=FiMj{T6 z^vPsEJdrOa#qWp@&#A7X0|@v4Jev7E7q`y?n{I`{m{QtEk z5?!uomHp!Cs8yQddhG`l(Z5<2oW1q8t<0NJSK3&`2c6|@MqJ2-B`nxFx&qsX!crXeDl_`eyQp$r> zq3#tMaC*-M+&`K|-uAmri2P8aH|~8oZO}xGYxejFCmL4p?u6}*z@8`Xg}Sg5Z%v~~;#)Ow1})Q_-%RF>#15v!=&J|8ppbY9HK3;Ig$SEFAw&%_wm558 z;DbG|MN6=*stDn59UD>0GW@eU--)0vD|q(Id8;1Z-R^{(3t+O(duJR$W)xi&dRl=b zJQ{AqX(Q^C@l#c%M{&+!UHmzAcS~dgyySNI@!D@2WYDtXUT+=k_sMSBC3SRj%)Es> zA}AcSXb-05AEo}}H~$TY=7IySmE)FtML(Uy?n>7-+jlj8zLIJJIquRn_aHFU z=*O+lC&)>hVeIhq*r5NzR=U`%BZy;7wqa5mj0%OZQ*|+?OExVeX{>Mex183kt%^60 zi|gwXxfvawE}RX=ClbR%(0rJe+spEndWn4OEf5U8%btnd5Nh~}eTiEtfbsx!d0@_t pg)iSbgemmzQL`kt|M!>AKj0INfb8|^ + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::document_stream &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::document_stream &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_streamvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_stream && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_stream && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::document_stream && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::document_streamvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_streamvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::document_stream && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    +SIMDJSON_IMPLEMENTATION::ondemand::document_stream first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 323 of file document_stream.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.js new file mode 100644 index 000000000..d9a1515b6 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.html#af4e7bdd41efefaaa285662fd9393c8dc", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1document__stream_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..50f36b847b4fd239b3e21e98a045df7e36a1f7f4 GIT binary patch literal 2088 zcmd5+c{JPG7XB$!JX5tAr6{6^Yb;SbwB=W#l^P$xZYjwzqj6>Z?ARE{?51eIct4uoo_$1MOumoNecl0 zAcC;6um=EMkc({vc)9yznWio`N!i{&fgBEp3+Ij;ix?KC=h0k zbO5+bhcWOwihJ)w9m3)YDw1aKN^|IZ8=9E>u~WbLz^EKDb+oUL0Th{Xr4uI z8)q#Olmln6PS*C;nB7G=1JP6{=w2VD9ZerVR6!RU^S_b&8)T6?-^N#mx8NNwqB$p< z3^7c$5=LK#1df(SZ&NhI9v6Oyfe{NoJ7@nv!sF1Mt1n6D`m%<_X;o}-i62B9? zBpl7Maq9aH#ps-Ku0o2ftkru2Y4yNi^XJgO zJG55eFK12iI*OzR)&kYbCQlO;D#m=bB1Te_@3vS__p`b*0 z_o5=EoejlI3nHpUsE{`6)n7)dKkk1zzkyKQtZdNj&|;YQ4J|n7S&o}(C(_*U*E2^1 zG^5ojZm(CHq`gb5OvJxGE#ob9@6+Gb5LNXfM)m3z((R+NjWLgHPTUlSta`cV=Ek zdBZ8HLvct_@~Z5U@`tG*1yh^(_+pm%dh#9NB85eAsTGVakZ-m(LGWa`#3HJ^pXZ>m zo${G}kI^}bBGaYnS!oe3NVX#sgJfd#cOO~rzIW3`MO*4uB3@<)v0Q4mQM~4 zMjEZjRcHTG6dklNH1`9hB;`!$BiEbGwfU5z9!(Ug5MKQuFBXh%cy_|?&D8a~f_d6?h(?YLJltNd6^wZ2lX#iq$)3H4{`Dw3Ri67FO4!F{d@d=>)rDU-2ois$RO9= zs4#&}@z3Iox4ff&N|)5I%Y^zu3D5=q4gK7G6<0L`M|!-RWVyipzRbSaJh9-rS>VoW zgTyTUB$x_~6O0d=EP=5N&h0AKg{cz@3qCO2kL+_6f&U+@6-y3aP`iQ|)TdYmyavnI zk^}fBDrX=GJlb4fQ?3Z`dID#5SRZwd9TIVW5#pJ?e4c=CD+2=p{H;K_mk5s(z*}|S z@lRF=ee&=D^?w&VCI4@W>-QY2)rzz2Z>SYLvA2#oC3GZQ<47mE3J(Y;@L<|thw43# zQv_N8sRT*x9M~{6o7IYCkH8W#eSEnysbwEGIzBkPv>!R-KioaWJ{XwOdrhu1Rg7#L z@{na3b&4JrX#ASv`K?$f%NE$@TV)Uin_~{BHTbmU{Ts_BGYm!*`S&RWiZjS$n}d$8 zdlgq59_=~irX1rdS4_|kc|k&N{FpO9Gck_H8a$46TA59`a{YbJFJiSPN7^%{HJ%w$ z*u_iw@gx#C>jnr(Np4unqcjJ*Vc})tbTq2Ha}pc3)?}34otDBo`oNeRptYU;LDu~X zy)Zdl@_CBS({aEn@dX0(S8DC)Q z{5mX0n`-+E#A_JX^=1GL-YJ*&JImlUpNwpL4puEdx9c*@OOCz&nJ%c)qFr<|ojjb0 zi&->mEKa~?qQmgsAHA}u{+S?&e1)YG9LPM4>A2SubHTEvM_2IMOGX?jU>@p#?k+OC zU`uTee!Uh-W^D|sz!t?!0u>XDmSXKdI$J?6u_mSOj=b#HRnWHhqy+pkZ_?eys-TQ1 zP;1d%-@z_^G?%O@6aaz<%N@GAUc^>sr9WYe0DLzVg1)?LR(%N~W%)DCl}x@YbLG53 zPdmCPs4r?eLydI{EPZ#o;G$%noKfj{_@h&jNvzOk^%3i?@M0GmSbb7*NFPB?Bz|7t zg+X?^&$4u7C0=%xYjoMH`JIZ@)M)m1Dx`gfiZ=WwY*rUS|4{!qkA}uPe HdfxvRSJBmD literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4-members.html new file mode 100644 index 000000000..08e17feaf --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4-members.html @@ -0,0 +1,125 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::field &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::field &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::field &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    key() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
    operator SIMDJSON_IMPLEMENTATION::ondemand::field &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::field &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    unescaped_key() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
    value() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >::value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >::value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html new file mode 100644 index 000000000..13d49eb19 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html @@ -0,0 +1,195 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::field >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< std::string_view > unescaped_key () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringkey () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuevalue () noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::field &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::field &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::field &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::field &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::fieldvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::field && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::field && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::field && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::fieldvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::fieldvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::field && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::field >
    +SIMDJSON_IMPLEMENTATION::ondemand::field first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 61 of file field.h.

    +

    The documentation for this struct was generated from the following files:
      +
    • include/simdjson/generic/ondemand/field.h
    • +
    • include/simdjson/generic/ondemand/field-inl.h
    • +
    +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.js new file mode 100644 index 000000000..1d6563096 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.js @@ -0,0 +1,7 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html#a6695a8029809bfab31032f0be7844ac7", null ], + [ "key", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html#aac77e0603e92469678c4df491bbfdfb0", null ], + [ "unescaped_key", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html#ad3ba1ce637014dcdf5e983cd0f5191b5", null ], + [ "value", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.html#a9f89064d5c15ade4c610381264844ae1", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1field_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4db302e5dd5fc5d6446e21ca799c18947abc37d2 GIT binary patch literal 1863 zcmcgtdo1fq|{xCcNW>Ix8_-o6c78_m6vz-`xQpFoeTtt}AFe3U2V{+S1&&y&q&Yf|39 z!Q=KD0e(0L==5pu{|Y<=foKh4-Q5C{)Fh>npC)Ye+@X>>($*>FOFb=}%e_4!-|;fz zNWlShpMgSEGhSF2Eo?&y+weO&t*{gXlG>^_OTu~~qK@<{s0En*AFBYQO@0+0BlQm0 zi+y}BiG^vFRHAoc57nn^u0QMTL5&nfE0yJ|6(sH^>c+g50shfjayU`i?$;O<*SOqb z!DvFfrhi+F$b5FMw;}$0c0QsPm*r?5CTQ>KG=wgxDt&=qRw+^3o`aI#ze;!=Nts^n zx}Ix5E;WgcERC_nJ`~XHvAxSRGVzK^+EFZ^ODkzIvcHiePtwE;)t{~HN|j|mNH`YMjNCqdmZR2HF? z=vkeS9AC@im!7W--BZj6PvE%5h|3%LM-C7EHVXX$6J6nlu$a;|%yrQ)1g`iacJjw>x;`yMWL+Zzv`NAq+`hBnT8?|Ex52 zc)ozN0lG69hZXx524y_fYPUuW?J{lQN=a-acXosrZi`DG?#3tVZ3-LrMy$>;CzVId zcbnci05^`h2Cdes>!AQ)X8LpM-S$)bUy}=fuIBG1m3uYoF>S7ks&Ar(oS<(!Xx?9W zz7sf8*Ww2D%1u%=wUNOd49#(`D={9;5{|-S4!@+5of{em+l+V-vdLwXaNGY}X_3>> zu(@7?bC1y3|1MDzmMQB6?T#(MOt)VhDA)OO{8y5(?6q>va*fCR5cC7nh@*0nGB zpLA@Hvt}tRfHZ1c;VNU%JG;6#XxHC6P4~%h`#q^D7?i>CY}laUu8tH{(Yii>B>Tkw zmE`|XJzrE*x>@s~M*Kfst-QK(b{Qm50%w*?5+erg6cwe;uO31{DQ5fPw-Y9_Nd+F%a+$XddK= zClL~jF9!T(zTGbg|c>t%zqsV>MY1MAXZANsq8zDT5_nbW7XD8Z?*CTz@s z7VswsKL($_CS=NitdZ;>$L0CHdUN;I@?7(G+H-xP*wSk_NDr>LxTuXcEQXDtLY<^6 zKqRHzTvaX9KG;n-+4{Xx?Y(u?L9U244JDgdZldglc&Jfhw(LGYx(&9yG3x{aDOBJ%{AQFR=FW|N%{}T|XQwT4n!I!)d`8)eHVRi< z`bYTmm(u6H)>59|&Aa;o2-LShurxRise6WSHZM`@>CO$)Mv3eRgDSR689KlDq2e$p zc>i_(^Ja83H#fN0at@_%x|u53CKdW#8pss~&clgfUR+Q|n!^4)=^I>vV|JL&#b|%7 z*|D-a^jJNUpT#i%QUtW6_9)!$CY1ot<(+K*DP58M7p>}T9__db(VEdNGV(8?lKN5? z(xAh6sA6i*29w8te-iJK>V3_fdQv)A^Ki;OE^=x1$dbzURrxN(cPUThZnwzf!rrOm z<4OX3L&@M;-~rT+CbP;nm60M=mRPmpW+QBhqgbx-RZCt~7%0kg>R3m2f8<=$Nz0D= zm#KxWIy*abjSUiM%Z(_m8GdRvC~ia^U)n*ZMS(<5%JQBDMFE2RzhnH`BH5-IQC&bS e2>1)NseNbW-ev3JbX&0NL9iZv?hPj{r2hx6_OP%3 literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html new file mode 100644 index 000000000..1a32e3572 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_iterator & value () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_iterator && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_iterator && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::json_iterator && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::json_iterator & value_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_iterator & value_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_iterator && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_iterator >
    +SIMDJSON_IMPLEMENTATION::ondemand::json_iterator first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 305 of file json_iterator.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.js new file mode 100644 index 000000000..7932172d2 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.html#a4dcd331b3571160d5bcca3a61ef6437b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__iterator_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9233728f35a869b8ff9d9928e8a1b38440d710c1 GIT binary patch literal 2050 zcmc(ec{JPU8pnSqRb@J3uNq8+5vsAYWrCs=B#8P|?ORd1xIt#2&AOMI!1@?`;w5`$1fS0rm`kf$xUA>d0_)4A)9Ioa?^Fe@cr1v% z3W8 z60b3v2P2rxpDsxW6pmu z&YR*!2%1_$AyMq0^Rz$GMAVUHj^4Yc>W6w}x;2l5^*>NoQRvtS;rg6dL%WzIWeqE5 zC+vTht@L@S%(qgh&%Lq`1rF^IPa=ml%Itld`@7`wxljZFy;BOlm2vh4&AE?PHP_si zeeZXB59)VU-MdxERu^J>7mEhAhPJQ#{D?<3%OhiwQ%+~4z*m+QNnQ#0s$#kn3@k=Z zLT8f#S#^~hn5MjDAib)bwDNR}I8)X05fb61;T1$4ua%Qf6x@Z6WVqo#8b&(X4=0^{ z^=Ij9Y&t|Oa^ij}B+dbIyurlKHfh9cbckjkamu@6sB9iu@BpTo-yPuCOSO$L$w1>Q zI1AHxOG9XAfRYq8jEBZfinNK_#;e@C_H?#ePRi1TV1do@ei zm-}loH-mVr0H=K6q#gQPv8scDka65bX$Ir<5~GSZJq|f~TkX?R=zt>QD%>uvduO|2 zs6j61ZZbvvJzi)~MA}FfjMxfYR-fD*Jnnvj-0oREUi`QDC-MI0bf}FqTq4EGL@&ci zv&9k1=51R*oi?!SpSrjKMpWBtVU#%6bodclFP5F~NFPgsItQCu?+$n0 zc+`>+A6%Wne|(|^h9mB*SwRtDkzoI>?1$?L#|GRMOET<~#to^Gfv6+JA!p~cte%`j*?Om zca6WQEVkDbqtqm~d@LOwaD|5P6XRqSe`CD|qg1N2{$!=U`+0qA-GXo-9Fd`jZzxHb;n_D@Gw96W;*F*O5&@-zN?Q)q!p2gFjZ_LWZu-dpA&z$ zYcB6Jl(5N8A{45Q$qJwegs@xusRE1yni_NW3Pet@LK&0JxD&~KWjoRT|;L|4lmh~{D~O;yl$sBs zkfjHE`2m{$Yikx9b$n=NG=;TPHz=%#49aWi+9!3D?1fBre#*+~Ak`=@a4xoB{GHOL zPR2{FUbN}D-ryhvFOIg0(@!m;l3<@t`LBph4xWV$>)?hkj#Am}bcx@rw((W0PDb+M; zwsBFVB~!`;2YHj3r9~aPP(i%!K%;Tw9)8ojeC9-&e`_o+xhb!47Oy1wOx)F&vmf!# zi?~}@NAlZ-Cvk&!gdekh4Z3nj*Skvlo~b=ix*AP17;q#StY>Rcb@64y+`hK%_Z1Lp zQU5~9IPVPpOq<58%yeJ$cT`EsVnWM2g1clOBW3o@0PRP#@);~VQLe_TOsqMnD7y37jB+h0Xw956@wRYs%0sQW ze)r*XD6(y!aHGm`AtG(U-*@rS9B=$6wZ|bQBU7T9xA{FBo9u-#w|7g7-O*@@K0>u1 zdyt3;uP!SxWf~ju7td;x2UHNBO_H>z3NLj~NbTVaa1=f8id`W5zE#%Nu|kN?|HTsj(Z5MaJPQD=2CBB_gcf z=>?6{fuHpxtNQR4gST>7dgJ`>W#)}t#~-YBX5B`3qzo(>Qr`_m@ik0(mT_go1jh1> z(;1wEZ#glWTwl1kX*BEicCFbx@P!r~@$41|82Fg%roklN8*V3~n?RP#d3mYSq1hA7 zhqisU_0fm6rE9BYNwTR?GYaqzBWJ$==J+q{{yRNWMDRcUHF@XQNqAYi(+OBUAUH?_ L+N$<~-_5@OZ1=mf literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4-members.html new file mode 100644 index 000000000..977a9f4d6 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4-members.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::json_type &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    operator SIMDJSON_IMPLEMENTATION::ondemand::json_type &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::json_type &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html new file mode 100644 index 000000000..8113fc801 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_type >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::json_type &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::json_type &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_typevalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_type && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_type && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::json_type && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::json_typevalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_typevalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::json_type && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::json_type >
    +SIMDJSON_IMPLEMENTATION::ondemand::json_type first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 145 of file json_type.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.js new file mode 100644 index 000000000..119490d78 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.html#a27b28956d82c082e23efdf9f2977fa12", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1json__type_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6989c711347ace6ca5344109289e24f6c0a7f0cd GIT binary patch literal 1965 zcmc(g`#042AICqDk^3StO2iOZa@~pCYTTw646&0innoDontOv~ku^$V7?H6tw8_2P za+|`m4YQ(^EOKk5V_d?7!Pvp~e82l2eBbB19`EPtb>6=`&v`x1JHr`aCn2gR3IKov z+};`q0D@q?c0MA==f!0EHU6dG?BHgzySvMmb8JrJy;s?MwO@2PT_|Hrncp6{g+#al z{6~9di0Nhk0K#T)>kDo%hZc$!!ato6x0YI{Ane+8yb%W-uK$c#*Z3OTdM?BFutG*2 zuO2_@*N7kOYs42mkt&3M;Rd7|!S`}c!EH&z146Jrf=M?ZZw_dWWYCDJ0YS<;vG#*+ znXhFREPUquJ?lB^l)rkvfoF#wc|z;_VP)U82ID&;Nsc)wMa7)CO!a`ju^yL@m-08+ zipM005F4uL8Vc>>H6O-`dES>$Tj*5L#Pwgsug;mP;(+&?@xayEQk!d!!S|japt-c) zam;Mm=U7+ykTWw&qJ4WE#@oZzNuMRO(2x*k{3YPDU*;S0ap{yR$HB<{rNb&O&WX{d z%4bmXj{+6PDJTTNDSfLLZEm`)*{JxAF)33q+UYubE~C zjq(W&E2GsJWB=R^pTJCXQX3kul_q7%XGQ4fNSUO71ev7RbO=Bg$pIiY9T6sDvwbRG z;r5LF*6^clFXGya(|rb%2%B_=lksPCZLW^G+?pn$W}X?$;tYGr)?qfHA}cBYO!A>u zHfVAc%*G`)-kCR(O{xvJ&xi{BI`iaNk9=|4JkwdD1a<8;g4;fpS|2t=|3oczloAMC zoGs10i8sQE-*qUl5Yllk_GO&lJ*jq@Xe=L@D-B8=Dye=Z99NSS05BXgjT-afuHT67 zJg=s$60zdp;_uWP?qjC!nJdi>F8VDKC#=!ZnK?>nwzi~dW42oesJFHrX>NJ)ZLw?8 zrw=JmHb{W=L}wY%EJx{Bu94@_fIum)*n&}c?9WHX+VqF2=0USVf$iSRcfWKTYkAWY z%hE&+{$kW9%*2`{`hLpw>XMI$dgT2$?ZFQSvJ35_ zJoZFlPt1!!uvSQtQqN?)UTktp?=}#((8`b$#^kw`4C$v@F&C^q|c! zK2A?DeAoH;ALC;YX(wQ63l`+c0L3J337k#p|j0GbqD7NY|S00zs4;CGvx-a$YQU@-Xrp{HO9 zd7z|2dhUAwMBWSiSA+LQ2lM~8raRHdNC&O5eB>p4&Z9jW=ta4%JqHIiR9^l|&zLgv zJ6B70yB~K##n2iLP!`mU-p@EC{Ad%8hm0R#c5R#9n%9uWJESt2QAQ(9WdhF=tUIEW^efHD27y;Q(*2}7+f}Qun6oTJp`ll%1r3)c zYV2HJCdkTQ#obRc^Jn=LZBHJcn7c6UzkW5D4U;Jqz<3trvxd ziT2|JU;kljwNh6}6QgOqI_{ABbyNIXgQaJ8B-O?CgAtXm33Xz%#ZPya=GM@%v^6o! ziM>ioO}gueKh>F2uOwDC85WF(Yw0!ma!`?{X3j$K9d=;}9j^jihDYRLcG-ehV&N<) zUv8Ki@X;iUpm6+C!YTZ3{N$2 zVZdGd3wv_C3<2H=A(A^fNSM=MN8Tle zHGc{Jf(bk4Y@44r-F*Q(U`ZM1u?b{&H^OEmO}4$C=CFC&l|PC^rEsG=6tRhYj>#&PI~g&K;Qjvg%T>o`MbFf nz~JB7g6wihtNdVzw^o%U!i#T9r_g@m|E&Pr24P)&5uN-GP + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    begin() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    count_fields() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >inline
    end() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    find_field(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    find_field(std::string_view key) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    find_field_unordered(std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    find_field_unordered(std::string_view key) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::object &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::object &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::object &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    is_empty() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >inline
    operator SIMDJSON_IMPLEMENTATION::ondemand::object &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    operator[](std::string_view key) &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    operator[](std::string_view key) &&noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    reset() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >inline
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::object &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html new file mode 100644 index 000000000..0653767c8 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html @@ -0,0 +1,222 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iteratorbegin () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iteratorend () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (std::string_view key) &&noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (std::string_view key) &&noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (std::string_view key) &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (std::string_view key) &&noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat_pointer (std::string_view json_pointer) noexcept
     
    +simdjson_result< bool > reset () noexcept
     
    +simdjson_result< bool > is_empty () noexcept
     
    +simdjson_result< size_t > count_fields () &noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::object &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::object &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::object &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::object &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::objectvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::objectvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::objectvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object >
    +SIMDJSON_IMPLEMENTATION::ondemand::object first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 208 of file object.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.js new file mode 100644 index 000000000..77d74a4a9 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.js @@ -0,0 +1,16 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#abdd158d04a924752c33bb54af46608e4", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a47262b644851a75f6079f8be740d9974", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a86945d1c1c36bc51dd8a18e8ee9c0c18", null ], + [ "count_fields", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#af882bb9212c81253b2f52ae763f1fab6", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a718b4882e8ee1d9d314446cd47b0efe7", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#afd9f79244804cad8a3c12053c2e5da6f", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#ad40a8df1162007a8db15ff061fd0e083", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a99b1f71b33c2977afe8de124f2f662b6", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#ae44a332b47352441d29290237942bee4", null ], + [ "is_empty", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a2246c3beb618a9aec6249a236fa33d17", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#ad88110fe0070d8e28e680cbdbff198cf", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a9a5596c92c725e98767e76733fa704ac", null ], + [ "reset", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.html#a859a70452db187eaaca4ff018f959175", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..93e8ccf3e572ee0be2771efa507a9707cb9a91af GIT binary patch literal 1891 zcmchYdpy+H8^^z7sIjVT8<*H9Grbx%LP^9B6JOUchG|J7mm&A-x{hINN!ZyYW#v}L zWn9bMy3D9nmq|%v8h0VLW)w4ovETarz5o8s>vhg~&hvbp^Ev;#UndP`Zz%^q00#g- z4z#ks1HcX#6ytX8fL7{WGy~ccakd2P_VzXueq3CQqIdrZMc*fj#e$^`t3t<}k$8J2 z01|y01J4P%03iJtv@j#YNG#>|g@4fa0hT+(+}d{NeD;I%F7KY4MY~C?Q>14dpdML5 zYzpErf_P2dyrv*<2#LN?V!@C{I;(+c$Z8v=DPte#noUSXq8JTY6_TJe^0K=$Vn5i_ zvD$M8EWOoS*c?x-Dh_%!IHu~a{l14&YfcaL=(}pYB)Tt3T#(9@mNCLC^eNc9;gq?f z!9&3_11EzMbQm96BR{exCWbv8?D1z?^7yGSd0la(bVH0j-?#%~6kmYJ^J)+*obWPQ zh;#x!C)mRnk@*TJK@nVBoxXk@j(irzq!k#x594`las1!(r@fL)(foQZ(^**uJ+0X* z{FISLX{j&{Fecd1H+1_e3NHt5PgPZikiw^fJC#>(vEBqPZx=!SIFlcvlM;Q-K}Pf@ zgSJkoX*B_xP9om6FJA~5t1PH&yj*qqt|}_D>49OG@Hi$^*kV4u*twWipHeSfcH)Mz zl9WjpC~VWLj_Dqt{H~ISjb2&OCJTn{$FHm5MlgKMGMbLXRU<*blQceyd!#wDM=pO$ ztS4;5xUNOj81RBzk-XisGb`h4x9nfjy?HQV+Y0~X=A@S{AN}f9iZaP|alLP4T(U?h z`M1ojJMfHtn({%dr|oQ zsiQAA%OW)KQ@RYf9-cQ+tVjI1anW|K_$IF`{R)2*SCDi^GEX4!*WaJL}|pd1x%|^`lNV9;R{z|Gwj%3U4~2;7Vdf@aKjW<9Py|# z_FB#6F!$b*hQBPx){oaUG{nUsXG#4b#o`5SEJ%Ui7UNIhdsZHig6F>Rf zp%(o$k<}q@>$6FDe0y2ct?TK8ii+~=I02jjMTiNi!c?cYRgu2f#SQoCNrXaV6 z5KM=GT`c;tjGBZMa2x3i@%qb)LJWFGl9Y!t9tPDOwx_B2d`nw10X2#9Id1_|$vTKH zNZ|fm0GR;$k{}NN2|yNr6)=eUc2AYf_l9hO#Q&|K@O~Dafwu;&(LUf&U>D@8_FoST zS4Cuutq*ny=4xL`D()iRZZ4#L5udl@39Gv>Z!b1H%ps*79AOp7b&QOg;8KN&3l_PO z23oDCP+tQPxni}malDbAxYbY(7k-SBBFk}2=8rViB|i6bVV|Mytn2Hp?ax@M>bH|n zAvsDUsXGIL=sBfkEEr$a>}D4ypBUwGa!fAnxN*4F>s*^x<{3i26D~oIKYXn%XZ6IE z&~Dm|a090OQaYHNbL>qM(R#?repblLZjJIeVXWK+Vj$G-*ny3=zi1Z7uMJkgV)RDU z>wC`MmGp`#qFqY7OAAXig;BUaAyi^Ha(5DbRQx$6VQrQI69lxT!LQ2ZN%p(5iR9H_ z53;8r^OTInag0%@d=%9+rrz=osX)C-Iy@pL;X2a{_GmNaJK&W|>s%R)y4-&zFwDwT?ee?4 zIO?dGOfya*tD-e2eJZDWNQ-lzBoZ%cTaMMJ<5AM#?Z8DxGu&wtC)t_WUROXsJi50* zvI#39cm%=%jU3IAM=vD(Z4hO{E#I>-a|r*w6@E5-*3eSJVEDw-Y4!tkb9y6%`+Tt%VWekJ(ZY|BWREp{i<4=P55lS)KAe#TDh{>^3WA+}5YPY6z~ z{+^+F41Gu@(~&Z@>0!H}+gm2OCU&a;)FvApx|WkA64j%lFEd%CqkOwdm^u_|+ms26 z`#!}30@;=hn-F(dhykf_pZ_8PV(xwxBMWbhw?=DzR#m!|8#n?+-GqKb0L0o`)SUI8 F{R^SReir}$ literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html new file mode 100644 index 000000000..88f3d891e --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html @@ -0,0 +1,198 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::fieldoperator* () noexcept
     
    +simdjson_inline bool operator== (const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > &) const noexcept
     
    +simdjson_inline bool operator!= (const simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > &) const noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator > & operator++ () noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object_iteratorvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object_iterator && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object_iterator && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object_iterator && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::object_iteratorvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object_iteratorvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::object_iterator && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::object_iterator >
    +SIMDJSON_IMPLEMENTATION::ondemand::object_iterator first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 53 of file object_iterator.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.js new file mode 100644 index 000000000..8fe375556 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.js @@ -0,0 +1,8 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html#a8362f620df4f825553c777ded202b97d", null ], + [ "operator!=", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html#a7ca63da97cf96188a9041d6f27d9fe51", null ], + [ "operator*", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html#aaa161d4006fe118c8a2125f861ac0f51", null ], + [ "operator++", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html#acc81dc7722804c9fb5ec8d7020700d61", null ], + [ "operator==", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.html#ada1a67291efb7a0ef2ea45d86d17ec60", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1object__iterator_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..42a840e5a514676033e4c8ac86718f4919b15266 GIT binary patch literal 2084 zcmd6ndpO%!8pnTFbd_dFU8fVHB3*T<5;di0H7TJ4rBzhYxYwaXP^CN{@(X_&N=V*yx%|0InVn!1baJ687UPh z003lARtQG`5Q7VI`y*n)d0UNqn7WoU0%YpEyHAX*S(QFAm`VuGWG>TFGL^Jj zp@#fkdJuVx9%S%=9^~_Z&QUps(kFRAd#r}!71E%}LQ(q=sgAlrN`>lRSyrSBs5do`s{m0JkV2n}qv&-JR`VwM12TF!1 zHn%Q~5j6bgJ1Vn^vx4UrRg8|MLN~N;8HYw0N2)zWZ^k(K7f?1E)|#8|ThduvueW1F zEc5rm1<*T)4nN{~XnsUv8FVA|Dx6f?pOPHy08hAqHB(nXEq>}Y*Ua10bLRcKYPaHk z=BCR=NZ(ZBd=b{!vOQ_z>F7Fp02kim|8gn5Ot5O2{WMq*g&>+!BG%VzDlhbblCp2| zcoBM1TI&?(a-?+M6ooa6a)0ii-^P^r7|<%MTg5HBqS197S<_}sg0Bx;TSAG|qsV-bvGmktNSo_UK%u`brScO{Zcfo;U=2UW~J#6j0CeHxrdF(2wVw zBD@!TC+Zx>in$Q=_a-`+nd@-*HNRrbcLRFvcqi;D5pI5$B-nD#8o6^-3x%oeEHqD9l0R>fvLGhy(i`efMlk0`uaL0p%V zL3dwn|IkE)Sv;>b@X;6!v+z2xXpdG+AS-Cn`Phw1A%gkT8lynFcc8{EE*H*{k;7vx zkq>&tP4oz^uzGapc}3eACIXE4si8N2aaShKuUNmXpXIyIjJI{4cEb(-b54Ub%bSeW zv{ogZl;MMMoBnV4TgYuRRyt{0CM;C)h&??IT~ zq#J*>y|e1Fpna~CtWZ|xZg%r-K?=3in}t_YbwudTQ!dF)w$&d{Y>7GDmAbA1`Vm&Pe>OjqgY;BSiQ4iHm>`uz(@%6Baen#;xcy9h4CRVq&YwNz#p(mqywN;?7`h1k6~4bKz2V!Q8uS!Px`^2mh(Sw9ea8 zHBY|odW0PFImFe%De;8nQ#{P&7Tzbf5bratCTr`qX#w|zEJ<{%k(4M=vD-#}sp3<& zd{^x6=`e_MFskyj>0GE{^+2CgMn1C%7Vzy{YF#UvyqjvaVc8y3Czm} zme(**kEgxs)uN&nhb&JsV;8I2(}?L>GK?GcKlqE|dfQ#Gf#SI4zu6{^7@OYnH+|Fw z3mO4o^ly8l!0Mu2gv0WNZ8NPi+)WG?7cfTxk25dA^4zTEVNd3tEl`cekambl I3+zvS09(V>k^lez literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4-members.html new file mode 100644 index 000000000..fa7734e75 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4-members.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::parser &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::parser &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::parser &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    operator SIMDJSON_IMPLEMENTATION::ondemand::parser &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::parser &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html new file mode 100644 index 000000000..53c35bbdd --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::parser >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::parser &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::parser &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::parser &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::parser &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::parservalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::parser && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::parser && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::parser && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::parservalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::parservalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::parser && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::parser >
    +SIMDJSON_IMPLEMENTATION::ondemand::parser first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 307 of file parser.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.js new file mode 100644 index 000000000..c6009a9ca --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.html#ae42db86bd32544ab81e4996ae96da060", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1parser_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a245438fc74561d46384240f23f305d77c411322 GIT binary patch literal 1892 zcmchYX;hO}8pmG{(ts>sEjt7g5fv5L1dD-}Eg=XPHphZRttizT3PK2FNyv$15GTPv zL6I11K}SGhSuIP9BB3xW6?Fgugq^S^8p0L`eYIbwU+124?|q(gp8s?2hyU;1+|b|v zZA~*x006XcSYHAF?1DpaD0~;R-dKKM3vDK$LE(NoJ3CM)UX-UWU*<#6=gH^u)pLif zp%k7>2o3|FqEF*pSNKr?fXQ&a-r;1GCH8pI)IKdb=6!@h$;{}~f@yr)aYuM^;=a9y z<7w(U0-iF|K*V1aHlQ1b!btVIC^X6*iMwKZ-3F(DJ7Z?Ah6}{@_hXS*0>~=z*YsxT zv+A5-NJAW{rKbapiz{s8G^SIkDwlqD6M)inGis8_sL~XJ=gK zWcDGG{8(P^5s^2Q)jcJz9bBT6)@!%n!A z8%+izKbGZ5c>NDwF^9R8)%A`~Ty&b;R78S#y5t;%zee`qr(#y=68-=mU(j;Po1c52 ze&BK4rbfsbE@|C}Ef#(e7rRJ^rahXOY&rVJH2p|iC*sEwskEeN2{j>X+@I;g6Hx@b z-hkbdUL)Q}xnIqsO<(K4>vINnT*6!l)lHVeL}zMBmv$LAVM?sj`038WUnTJ{Zb*|+ znvJgGM|S(7$uFMHbK{Cx+j;xk;M)%K?&;B26nPsB#m1eC$lwecMN5HReNOI(?NDNN z*S3^@)tFYB9@L_>Y2ovob7-ne?0K|k_#XG1p02rY{>>}2TDk9;)m?eQ^`U*q}Y z&AJCS;>J0&hylwjp2sNBDw1zX%*%!O%kLMDXk7o<{4bfR64H?`$o)5vxRXvshFil zjSSI3_+~|o`P=7Vg*_Te?ZMoI^+xS(e(&#fjuinYU9<*J^$M#?PkU)RxZ=}#aTnqW^c?V`5 z&MM3=qocM7Wl$$14!`Gr;vl$-fS}PAHV|`(!UjK;d|=&wO9cy{fJi@06&sbON0nPR zG?W_q|CNp==LZ5hkyZS<`#D&Q6f+<|yAEqUycq{kSSi z7`0ybu9?@fmgA8Z?5bGkzhHK{uDlVxygMbH(}+v9r?#QbWF@?7NeCb>HGi{4GJbh4 zmN{JY4`I~E!=j;(i{0SuH3@k6fy`K08h167eO7ZU9|YEi#3_yF!1OAW>byU*&Mm}#_i@4(=oeAW6P>X!oq&f&WD9r#Hh@eg4cIF_oHKT+%paDRL+K- z*9J{iJM6lR<)ty-_w}7X&{~}%`TL%_Vhm{!#PaUBbyvc(>xlb7ZPU@E{f2_Xa|8Du z7BFIK9Q0|e%Xs>ji}VJ9rc69U|5@3`;aIAS9sb$th~}W)^$Pwm&A~)lx@zV#i_~99 z0Yk5JXJ?T5!ru_!Cz`=yEy-Pp-)!pAV^>46`hteBFt<5)IyWU{C_+5S$a$ZcS5xl1!dDxu@ds z$f+;B-!lxt0ll+|74zd-QYYyGHV8SWx>ZlyGOt!!KL8Q1h4|J7ShxD@bq%VB_P5q2 j8-Sm^i9Qu*pErT2;FQAunPgJ~eTe|hFW9#ljHUev4h3S5 literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html new file mode 100644 index 000000000..7b865fcf7 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html @@ -0,0 +1,192 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< const char * > raw () const noexcept
     
    +simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > unescape (SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &iter) const noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringvalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringvalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringvalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string >
    +SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 177 of file raw_json_string.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.js new file mode 100644 index 000000000..8ac1537a5 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.js @@ -0,0 +1,6 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html#a8f2b2692aa9a494d63d17acc818023d5", null ], + [ "raw", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html#af320d3d4d980f92005c56a48be336339", null ], + [ "unescape", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.html#ab025cd6b344dc3dd6673b42663976de3", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1raw__json__string_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c686451172841f2d64186f258837221327a625e9 GIT binary patch literal 2107 zcmd5+`CHQI7XPZ_mKh_K<%XrGk(#-bsVFU);^cpYVwz@_8xf(UsiAnoZc->Z znxf@sw{p#bTNvq-OSoJY(r_VCQp8=7i#0v>xzGIv?s=Z~eLrXU<(&8PIXOOFZt7cf zwg3R2j&yfH0e}KrhJ92NWcTz^8d~=3@;T}6DwRrQ@Z-#4QvQp-$sjiR<5ej5C5{NeosqXPENq& z8fDx}>@gc|h{Fswyp0`hxDz+raP}dRd=qMfJVCBSi`>6LwNr3%1hn1#oxD~)R2ykc zev;O7+xe%~ZE=~>sG z5sw5DXnvH_S~ybYmu(eLPgS$JwWfq{DC~lu8-eN7b0d?mJ=oAcM!Pmtg0`K(>%IuP zx^Z%dQl9XIR*nMo7_Pxy3GZ_}jbV>WAjp zH!_;%JHE$js*x`Qb6n~93sB3pDo})GTLTwDFWvvf(Q_o9*WTF6IVWYc60~1F1vl!X zBS|_B3iOhuP3=FWP$sHcoZ5RPY6|=gDI#nrENHM`;JCK6ofx7vJ!ckE8ec-$A6_^Q zCO*2{Gx6$jaWl`NY4(^Ni}Q0}VT%K3-`0VdqoljkCkUpk+bAIqPg~aN>H51~re{Gf zNg!bCrbj&9s??EC-I?OoF$8m7bhr~N zwcMjh0jm7DxL1XzNS@n@4)_y z3n|W4x^0>>kb=F%I8#j7-90nML(7zuG}y^FTC<;M`>MalJ$l!kF&j6}-5C3r5QzsV z{L*`Hm*kzpIZuw7F_N3A-GNjr$~Fz2FxJ6;898M2z=^Qko0I%hT+~s9PkAPWMq876 zNjrIhi`K<+v&!bLm<@5ba4W8c zkix*-u#`S|k8yJ0BA%Xo<+_rghx8}wE+xp38>fROT zOsS z4sR;;LOqneXV(ftHAU|4a@!4&Yw;q-EJ;`fitJpt>^FzyVMF~1jH)XWYM~I!2B&_P zfRP*=TG)OU&8BZ?KlYUv%L`&%plTL z4*u$bXln{dYJnXYa4?O zEy_yFc&gM_k3rJKpV)`%<5H4oF9Ei?3&+k;2vm~Rf z!B0+S6Rx(qcat%`9{7T|ybBG-zEq|N~jLt%ullYq)9c%n1)bEs) o`)@w4fW5!+-5ORAf$|W5rGU!WN(!)&lm*BP>FVWDdklT`-ycHYl>h($ literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html new file mode 100644 index 000000000..5ad352420 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::token_iterator & value () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::token_iterator && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::token_iterator && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::token_iterator && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::token_iterator & value_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::token_iterator & value_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::token_iterator && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::token_iterator >
    +SIMDJSON_IMPLEMENTATION::ondemand::token_iterator first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 130 of file token_iterator.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.js new file mode 100644 index 000000000..a88e38dd5 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.html#a4d5c1002a553306a95c86d28e9f511fa", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1token__iterator_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1e893abdc5425deffd0139a006bded349bb72e13 GIT binary patch literal 2054 zcmc(gXH*l&7RN&gVgOMT3tUl`7F)*>?BWeKBilTN1tlgA*!qjb1E z+5sR;5{-{tj>Z7Mf!~qvUmc^xxP{zDW4f|%qgmY7z05{Zu!<(VtZ(>nGU>@|fQo*z zrlNpZ6O=z(6J#=46BIC7!&Nm!8Wa6BI}yFgN@<$P!ozDiK3nq# z(%k+!ScXX97Ej6}L6rEN>kVYsMo+yz7Xn+KxJ`!Mg~W#IC`CNu?AEOIPzyWDNU5Ha zYn)c%>95SHoDw}O`$gc`Stv0lW}%lv_cA)SUq2Lh)yG-KVtG6C<8rI%6STA1u53Rz zH*D`n?h}b&4XQ)>OeOP@mL5M4pItH-<6sa1V)H;O9clLJ5)+S=w_ii;)=l0t!)7`r zx|>ta>`T5dS2+26GTCl@N8hkKzrA5OcLXx-_xRJmhYtRxj_XAjZMLgr2YSv zRTuRrZ6BH+#+qV&c7L`Rj*(9(}cmH_TZLgTpDCU}a)_0CWWzTkjopy?;1-tpHVCelw#v0b`!obSzh+ z?NJEsWXWO@hdWg`KcJasnO`4j)A`h*Tv*O1fcF^dk+=ukZklxe9O0F0H}V=$T{y2k z8Cx?nMT+u#oMLOrOx@7(mHxt&FxiL?iB-6#U(WxR4b~&$!k{xlavx3nPwMq5N1qF1 z#TM6ILi@~(!ER@;!Foi-CT}+UWNs}s+xLaM)1m04B=Nfjc~PD*`j$Vb07;yah5EU1 z2Lg(67+h-)G?0Yiw@u3&jso|^!xE0BIsW@mLHr%liq`{eT81lHVV&wRc2Is4uTk<6 zBwHgQXrU_x{y~y-lCzjz)irJgrMZoMknB_Zj3p?iZrdrAAxO?8LrVCC87Mai@`_WN z!R#+moN)C(n;F;#;ucuquar>P+7v{!r*s*DB8NW*vuPafmgu{-du`fSk!6msFkwh0 zy$0cO%3N08QEzmf7^K`^aX&?)=nlLa+v5Fb7?;htb<3>3!)IPTUkQ7Y8$5huoI;L+ zag(T>G-`t}%`%Cx$IFuoA_zW(hE#@a$f4#6C;AxAoU+&zN+r?Hu!IWolO^)m-?2LmM%JHO0*R^V@f$`1gYU7b6{l&@0WexBaO!$JbVGRuv@bU2019 zpIWNT#0YSStKMe?ajyWe+9u2n@4c`5IZL;<)ZLkmiF}GGn`fQ5+*))f0saL%l$4Rk zWtjpIjh`QdSI;&&+?d?VZVn;D@WyzPk!gF`4>MIKUNxkbA)Ul71Jm)!a}a#RG)pO_ z@RsTg&tOp2rX-^v@eKxGnYo@Z_~1Eg13q+VWOQ%2a$NXy#B4-&{x;BCJXwmf8^btV zv;uCaG5nD%NnACye%mW^5%a>S`08%f;?imH9>cSdU|{XRsI$Dihp-{lFB zQtU29=+J=`Gt@ZrK-9 znDC_13pW2Cwa?CbYT{B;z_xeE0t4la(55qi`;9t5rg4ppzufj&^GdTOmY`JlKhCY* zCiM7v&mCs-hjj4C`R{-4m8o7I#3ReLd{=-E&#ykE5&VPI!MfIVb>}W8fD+<-2K3o{ z(9u8cXy?_A=Sph_&Z;p`i#=}8l@?cmvfbNLvh=wtm|jq8q(ZNFh2lf56%^=Z=Z4U; zctF$UR6-J2@EC)fC*O5&3DWzE-H_*Y}%yE zN4=R^bFB+jmD;8yG^@^m;`+xodR`)yHj)#x^2)bn?vm7e4H^!!YO!m-*iJX0{mB*r z3jQ>VBd|r2H;sqSbR_N!ri+g~aF>?Cw8veftq{ay>2G})tp}Qn)B)rUv)c#1Z0)=` z-cX0}5Mh=ZwgeJ_B}>2dk1#>-dZou4Z1u`=>`{891z#bCiY2-^MaM-yJ^*QhhF4i( G@P7kfuer+r literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4-members.html new file mode 100644 index 000000000..ada53d764 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4-members.html @@ -0,0 +1,167 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    at(size_t index) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    at_pointer(std::string_view json_pointer) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    begin() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    count_elements() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    count_fields() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    current_depth() const noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    current_location() noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    end() &noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    find_field(std::string_view key) noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    find_field(const char *key) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    find_field_unordered(std::string_view key) noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    find_field_unordered(const char *key) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >protected
    get() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get(T &out) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get(SIMDJSON_IMPLEMENTATION::ondemand::value &out) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >::get(SIMDJSON_IMPLEMENTATION::ondemand::value &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_array() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_bool() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_double() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_double_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_int64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_int64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_number() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_number_type() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_object() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_raw_json_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_uint64() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    get_uint64_in_string() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::value &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::value &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    is_integer() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    is_negative() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    is_null() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    is_scalar() noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator bool() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator double() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator int64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator SIMDJSON_IMPLEMENTATION::ondemand::array() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator SIMDJSON_IMPLEMENTATION::ondemand::object() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator SIMDJSON_IMPLEMENTATION::ondemand::value &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator std::string_view() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator uint64_t() noexcept(false) (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator[](std::string_view key) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    operator[](const char *key) noexcept (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    raw_json_token() noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::value &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    type() noexceptsimdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html new file mode 100644 index 000000000..e5802f917 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html @@ -0,0 +1,533 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::arrayget_array () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::objectget_object () noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
     
    +simdjson_inline simdjson_result< double > get_double () noexcept
     
    +simdjson_inline simdjson_result< double > get_double_in_string () noexcept
     
    +simdjson_inline simdjson_result< std::string_view > get_string () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::raw_json_stringget_raw_json_string () noexcept
     
    +simdjson_inline simdjson_result< bool > get_bool () noexcept
     
    +simdjson_inline simdjson_result< bool > is_null () noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () noexcept
     
    +template<typename T >
    simdjson_inline error_code get (T &out) noexcept
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object () noexcept(false)
     
    +simdjson_inline operator uint64_t () noexcept(false)
     
    +simdjson_inline operator int64_t () noexcept(false)
     
    +simdjson_inline operator double () noexcept(false)
     
    +simdjson_inline operator std::string_view () noexcept(false)
     
    +simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () noexcept(false)
     
    +simdjson_inline operator bool () noexcept(false)
     
    +simdjson_inline simdjson_result< size_t > count_elements () &noexcept
     
    +simdjson_inline simdjson_result< size_t > count_fields () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat (size_t index) noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorbegin () &noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::array_iteratorend () &noexcept
     
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (std::string_view key) noexcept
     Look up a field by name on an object (order-sensitive). More...
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field (const char *key) noexcept
     
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (std::string_view key) noexcept
     Look up a field by name on an object, without regard to key order. More...
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valuefind_field_unordered (const char *key) noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (std::string_view key) noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueoperator[] (const char *key) noexcept
     
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::json_typetype () noexcept
     Get the type of this JSON value. More...
     
    +simdjson_inline simdjson_result< bool > is_scalar () noexcept
     
    +simdjson_inline simdjson_result< bool > is_negative () noexcept
     
    +simdjson_inline simdjson_result< bool > is_integer () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::number_typeget_number_type () noexcept
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::numberget_number () noexcept
     
    simdjson_inline simdjson_result< std::string_view > raw_json_token () noexcept
     std::string_view value::raw_json_token() const noexcept More...
     
    simdjson_inline simdjson_result< const char * > current_location () noexcept
     simdjson_result<const char *> current_location() noexcept More...
     
    simdjson_inline simdjson_result< int32_t > current_depth () const noexcept
     int32_t current_depth() const noexcept More...
     
    +simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueat_pointer (std::string_view json_pointer) noexcept
     
    +template<>
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::valueget () noexcept
     
    +template<>
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::value &out) noexcept
     
    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::value &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::value &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::value &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::value &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::valuevalue () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::valuevalue_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::valuevalue_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    + + + + + + + + +

    +Additional Inherited Members

    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value >
    +SIMDJSON_IMPLEMENTATION::ondemand::value first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 573 of file value.h.

    +

    Member Function Documentation

    + +

    ◆ current_depth()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson_result< int32_t > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_depth () const
    +
    +noexcept
    +
    + +

    int32_t current_depth() const noexcept

    +

    int32_t current_depth() const noexcept

    + +

    Definition at line 406 of file value-inl.h.

    + +
    +
    + +

    ◆ current_location()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson_result< const char * > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::current_location ()
    +
    +noexcept
    +
    + +

    simdjson_result<const char *> current_location() noexcept

    +

    simdjson_result<const char *> current_location() noexcept

    + +

    Definition at line 401 of file value-inl.h.

    + +
    +
    + +

    ◆ find_field()

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field (std::string_view key)
    +
    +noexcept
    +
    + +

    Look up a field by name on an object (order-sensitive).

    +

    The following code reads z, then y, then x, and thus will not retrieve x or y if fed the JSON { "x": 1, "y": 2, "z": 3 }:

    +
    {c++}
    +
    simdjson::ondemand::parser parser;
    +
    auto obj = parser.parse(R"( { "x": 1, "y": 2, "z": 3 } )"_padded);
    +
    double z = obj.find_field("z");
    +
    double y = obj.find_field("y");
    +
    double x = obj.find_field("x");
    +

    Raw Keys: The lookup will be done against the raw key, and will not unescape keys. e.g. object["a"] will match { "a": 1 }, but will not match { "\u0061": 1 }.

    +
    Parameters
    + + +
    keyThe key to look up.
    +
    +
    +
    Returns
    The value of the field, or NO_SUCH_FIELD if the field is not in the object.
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    + +

    Definition at line 242 of file value-inl.h.

    + +
    +
    + +

    ◆ find_field_unordered()

    + +
    +
    + + + + + +
    + + + + + + + + +
    simdjson_inline simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::find_field_unordered (std::string_view key)
    +
    +noexcept
    +
    + +

    Look up a field by name on an object, without regard to key order.

    +

    Performance Notes: This is a bit less performant than find_field(), though its effect varies and often appears negligible. It starts out normally, starting out at the last field; but if the field is not found, it scans from the beginning of the object to see if it missed it. That missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object in question is large. The fact that the extra code is there also bumps the executable size.

    +

    It is the default, however, because it would be highly surprising (and hard to debug) if the default behavior failed to look up a field just because it was in the wrong order–and many APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.

    +

    Use find_field() if you are sure fields will be in order (or are willing to treat it as if the field wasn't there when they aren't).

    +
    Parameters
    + + +
    keyThe key to look up.
    +
    +
    +
    Returns
    The value of the field, or NO_SUCH_FIELD if the field is not in the object.
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    + +

    Definition at line 251 of file value-inl.h.

    + +
    +
    + +

    ◆ raw_json_token()

    + +
    +
    + + + + + +
    + + + + + + + +
    simdjson_inline simdjson_result< std::string_view > simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value >::raw_json_token ()
    +
    +noexcept
    +
    + +

    std::string_view value::raw_json_token() const noexcept

    +

    std::string_view value::raw_json_token() const noexcept

    + +

    Definition at line 396 of file value-inl.h.

    + +
    +
    + +

    ◆ type()

    + +
    +
    + +

    Get the type of this JSON value.

    +

    NOTE: If you're only expecting a value to be one type (a typical case), it's generally better to just call .get_double, .get_string, etc. and check for INCORRECT_TYPE (or just let it throw an exception).

    + +

    Definition at line 337 of file value-inl.h.

    + +
    +
    +
    The documentation for this struct was generated from the following files:
      +
    • include/simdjson/generic/ondemand/value.h
    • +
    • include/simdjson/generic/ondemand/value-inl.h
    • +
    +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.js new file mode 100644 index 000000000..c2212a471 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.js @@ -0,0 +1,49 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a862809692781f445bd41c93c9ba884aa", null ], + [ "at", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a2133bb3e3ca52ee35803cdcbae374d88", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a6d591c53c2d0e8a4ad71e171dafa45f8", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a4fcb1a87bdcdd717b09af375280dcd34", null ], + [ "count_elements", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a04ed905c5d3108cdbb3e9801d1e30486", null ], + [ "count_fields", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a2ff162e268f5b778aec7547a653a76f9", null ], + [ "current_depth", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a3bfd36dafc82c212f165b434ab5378b3", null ], + [ "current_location", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a78b9e4e22a89050c9f911f1878165e88", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a77651d0e781ff7c537990e564cd617ab", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a6775bf7c2da1da154677ec3b54272ccc", null ], + [ "find_field", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a4ff908713e1eb6d6294706a235be8101", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a44054cd968715e09f5db03b3b1cec59b", null ], + [ "find_field_unordered", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a423064962ffe48495948c98afb0e556c", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a99d406c62d87e406e93ffe95515739ae", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a96adec398f13538b121979da4e0fcca9", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a5d54ff87e39ccbf114061605f6d81c28", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#ae13b5a733402eecd82098eea79d4ec6b", null ], + [ "get_array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a059e76f9a15e0b3360b575530c20781b", null ], + [ "get_bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a284506fefda0c9a4d7cc0907ff5d542c", null ], + [ "get_double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a841370a15d55a3d69894d03dc192c85d", null ], + [ "get_double_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#aa65f795ad9790a988a45cdb14323d3cc", null ], + [ "get_int64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#aebb4d644ca41465a53c315bb8ef232f5", null ], + [ "get_int64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a3d5eaab352993f6e864956e5c2b82fe3", null ], + [ "get_number", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a4db54bcbf1e10848c60c395a1cb5ab9b", null ], + [ "get_number_type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#aba88c6ad5572d416b7f24f8a74782d99", null ], + [ "get_object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#af7ff134d2ada5aae0a95f12bbfd7f088", null ], + [ "get_raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#ad496791bbbd9af86d1998d474e2d9298", null ], + [ "get_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a917d384192b2376c35edb592ad7971c7", null ], + [ "get_uint64", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a578f245708437fd332e5bc24a7e12ca8", null ], + [ "get_uint64_in_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a91b6b30ac6e4f38ecae22280ec85f9ec", null ], + [ "is_integer", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#aeffc73bee92f56bd2d7a00b2b7bb20cd", null ], + [ "is_negative", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a07c7e0c3076b3882e4b146a008955772", null ], + [ "is_null", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a55e9130ee895592cdcf7a2fe6767d95c", null ], + [ "is_scalar", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a0f74a50a24a204f69f00ffb7915f576f", null ], + [ "operator bool", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a6424c3b72245f414d3e5a979c5433cf3", null ], + [ "operator double", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#abc2e6abf0904478370170018bb0f1bdd", null ], + [ "operator int64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a66eb505dd50314b206960b9ab4ea0a65", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::array", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a2a0f2a56381fce725bbf19f292d36e5b", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::object", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a06233595fa9a434aff2fb3a3bdc76a11", null ], + [ "operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a3a5998868865b8d9767c462281631d5e", null ], + [ "operator std::string_view", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#aadd184bbf226ca3cedbeaec4bc96cb81", null ], + [ "operator uint64_t", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#adb031e554665e5dd97ae88a58fb4cd99", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#ad176b26e845d13c778eb9b8cb94260ba", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a899707b51050635713fd4aa697a5067b", null ], + [ "raw_json_token", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#a442b2e5803e69d4845b5b7f7bd51a0ed", null ], + [ "type", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.html#af3d0d03752d5e96d7ee5b83f29136b1b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f41d308effb3ab7fed39320f49e04ed71e6a8e GIT binary patch literal 1879 zcmcgtYc!kL8vYV-iK*2Qb(v~0d~Ty5=!Iq~ri0{5dxS8?LDZO*Iz6O1mBck#$C#o; zWF4v7!ErfLgBpYpmvr>78Z>BWMwEm~8`Ndoh30(izxgqL&t7Zq{qFrf@3Z&X`+4`i zR zfp(3XK+j4@>Kt>B@?)RyV?%$AmGaI0&f$`%mQZ~GCcoN?V`Ob@0o?(yWU?m*1BGz8 z>7X^I)h+{-4dOi%a~#lBG(ezl@3u7Zt)%-q{?Vi7qS&;giyArnz=baJ)FCO@agrt3 z3>EhTbE0~d$dGP4{?fU*{#ym0_(GnCb5iFvWX$5LS&!z{#<8j6?#;i%F%OoMiE6ph z=qtKh9MjKuF<--ZwOfn=l?l^B>ND1>bWKGGIFjR&d`w6`?8H%J@CQm!s{6hh)t~vzQKSn8~qu5T_XUI9*oprDZjtIDS1`Mq$zcK&#Y(VUFrJT{e@24F`i`o-%1Fm zGS>7zn|2y)lBa2!^=2n6l93y47V`V*{CDz=r$6}eunX=)ue>F8xg^mlZfrUIa~)R0tk1w*n~QBBPk2 z2eH%oef8S{rb^k=DC}A$n|Jh8ykq9l561Qkm))S$DK}gO(}!Ye6|hV*U7&xyRcr;{ zCahomQAcR6Zl|2+C?`XmhJ+Khy07l1{B6I$iM7Yup)~EvO3rPzqkK5;qRYt(h<#ivcrSM@X^cSpqyFs?5E+c|ry}1wt5Qf2Qa<)Ke(VK)tn{B67Kk1DGz18s zg-O*Y0F!=dchlh%oUtb$GGKuSE1q zL^>)0UION+`oQD;As~l?`M(9M7ILX%D%l>gulY$^(*i*Pf~@{*qsvye*6;*{Q_5bl z0Pwk8Hb3_-_26r9=VT*&eU4b>ZCi4Xpmf$dF*!y=gkOfvBf>RKsBdl@&1Xfb zIjvgWzJ$LZBQ+3%CQ{zk#{~>3X$CDQ#X%OTc&aOtQ1^+HR#b#^gO7ym&^^IF5<|Fl zwH|8fU0Hsh$ofKDO>EQLyPlay8Y$22f6&1DOpV8^LS~R`mb$$)={gy?V%y?Rr}sw& z105eR^F6Vx$%pRkJP*5S6`~q*tS>d2h#xB)t-eBe=!xuKIFIam=ZT!tyM@|oHpaNE z^FmMl*AjQb7j3LXMC`Xsc_F{tsQsz*K&@~LcpBweIO1RDUXUJR^DX9k%+7xF(qc;M z>gz5`1XIcVwJ;;aJf{n9=7C=~vh2t}U98f4XGUeLvJv?5m9w3@aq?laas7vVr5>We z@m2d8E%YJPoIzAh($i1d4q7N+gwx&c*xaBJ?db+4?|6{#4CWCQ1g;!)l+IqR#oaSz z+%51}LE4Bd(UQd;Z={E6roeN=wb2^4(=Q+h0HJxMCr($Q-?o69vx^wWMCoqGf0kPR zh!@qSxSb(b-ltu#XqAZF3x&#>0EX%Y+Y(VSw)IN+gGxtcLzBq|E5B4d=wi-Pg!lFg zW^LjAqb_r;2+?y%G8rE}$oDW0*d!wbyL0SEdiHDC>w!=;LD>}!_|6^}SEj_AX`AOLy$dNrPpxcxs_+*uI- literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html new file mode 100644 index 000000000..6b48b43c6 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html @@ -0,0 +1,182 @@ + + + + + + + +simdjson: simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >:
    +
    +
    + + +simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator > + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    +simdjson_inline implementation_simdjson_result_base () noexcept=default
     Create a new empty result with error = UNINITIALIZED.
     
    +simdjson_inline implementation_simdjson_result_base (error_code error) noexcept
     Create a new error result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexcept
     Create a new successful result.
     
    +simdjson_inline implementation_simdjson_result_base (SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value, error_code error) noexcept
     Create a new result with both things (use if you don't want to branch when creating the result).
     
    simdjson_inline void tie (SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &value, error_code &error) &&noexcept
     Move the value and the error to the provided variables. More...
     
    simdjson_inline error_code get (SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &value) &&noexcept
     Move the value to the provided variable. More...
     
    +simdjson_inline error_code error () const noexcept
     The error.
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value_iterator & value () &noexcept(false)
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value_iterator && value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value_iterator && take_value () &&noexcept(false)
     Take the result value (move it). More...
     
    simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::value_iterator && () &&noexcept(false)
     Cast to the value (will throw on error). More...
     
    simdjson_inline const SIMDJSON_IMPLEMENTATION::ondemand::value_iterator & value_unsafe () const &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value_iterator & value_unsafe () &noexcept
     Get the result value. More...
     
    simdjson_inline SIMDJSON_IMPLEMENTATION::ondemand::value_iterator && value_unsafe () &&noexcept
     Take the result value (move it). More...
     
    - Protected Attributes inherited from simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::value_iterator >
    +SIMDJSON_IMPLEMENTATION::ondemand::value_iterator first
     users should never directly access first and second.
     
    +error_code second
     Users should never directly access 'first'.
     
    +

    Detailed Description

    +
    +

    Definition at line 460 of file value_iterator.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.js b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.js new file mode 100644 index 000000000..2b541bd5d --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.js @@ -0,0 +1,4 @@ +var structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4 = +[ + [ "simdjson_result", "structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.html#a0fcb12cc4db7c75e02207eccb576aa6a", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.png b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemand_1_1value__iterator_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2c621e43c47f68af806cb8f4126c4783608fee4b GIT binary patch literal 2067 zcmc(fdo;30l>-_ufwf5f6v!Cy?*IsL{&o{}@ z95ey3TNg%ho-dt0Yw{=!{KaB z8r6ohk85>&t^QT2%g~B;`w$NXe8=hlx7Oo`?e+v^*&}i@zF!Ikt^X( z+6MTxJ@JfbQT!>|pS3eXr>GNU-Dh=6rYT@*;ZP*uDEaV|NRfA5e`={XLv%io{Oah=(z{#*H6Xoa`V?k*m?UJi!gd>?{5>MOw^Cj*02MTfZ9A z+y8zMzonqkQiyGh>Eyu1G*0KVPa6AiO;)I@%l`CJz^xAzrNNs6ore*F;Rv z@N~ub%pOH)H!okTX$^218dml&YV`GZ%d`gPBOZ!x)y7adhAAhe-xs^p8Rcg7fU|S^ za@>uUm2d~|cFhyqTJ!UwZfZD*1U+wmFt(rh)bJt@Onv?mWt7*odeAsHiL8Lrrq`;_ zo1>?#^>0{%$E%7EpUf6;NCEvugy#dw@^+q2X%sW_h}VT%G_eGK#{l0Cs*G47J@@y= ztUT+VKpB^CDLL!k;#&ABWZoun{1^eMbt4DRS!(eNGsFIuuLajJ zu-cf9YgKtM^WVO*5noS=adB8zt*B!B4gmqX--yMXNU?fuOvZq(NYUl|A((=eTcxGfRP$T;K&J9 z;7FKKoXkqwii`&Ui<5cE0cDHT<6pf06Vabx*q!f6?tiYxoo46@= zcb2LNU#LoX!1}N0$e@}mk;N7lkiaEOR96ZWh4w$>O#i}eHZRQ*$r~>2BcJMZU7p*q zI(p2^MN23D_irHS`dKfq?ysu)sB+s*k5VGb36a}EQoo`Xy*DD`gXHub+0mQk*|q2i z{vY$>WhIoVfH?x|ey{5uYEF9nf!jZ$4}p-mfRMR>kh!Qp=Hkd>bh29(YT!0Gg#LJB zNTLo?p(m#;YSV&Vh%y(}l1n?OFcihIg!{0LawuBnPB{H@o-df->Z;nDe{9vvP^2|d zz$A1yD7`QBni2#r7Lkr(ME4m#zifA0onC-x>}&n}s!UAjc|A6__(k?{!XU=f9@~HU zP4@X4cpn6BPiW3X2H!JJ|4>kt-DT&uef;)?Q61i`>!P4N!nk0|yjZhdo}r4|WxtCd zQ*{o%1Q_w2yLUBo+^piMDA#`7!(AdpVvtyCHj(${-T~>rCw2!AZMd06++SnB+}O5p zRj!mPpUD^?tfWwT#N#@I$!Ze*_B6@|JSDic`^+Vry^1mcRq+o)q=EN-0?%+Mgs#aN zTKZTd8v924lIXV}E<-Da{U#P=8xQ(93fdmn2i>lcWDcJPBeN_d8FM>JhZ9IsXLszl zhIO;E5wS29D)fqH)#e{5ZM(<4`Eud8Yb#{+%}*6-9by0Mh{7~4Cdj}zqBbzeLF{4$ zG$jiwbvb4W%VTq6U~m$|p|G>ue*-+>uYX5Xv_3Npk25IB#Q%gWN(*@r8}~z@TTa@O QZU7osYkR8-OOIdw4FosD+5i9m literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemane3bc1d6e1f7ab3457d0e05e7c958ddde.html b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemane3bc1d6e1f7ab3457d0e05e7c958ddde.html new file mode 100644 index 000000000..22fb51e70 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01_s_i_m_d_j_s_o_n___i_m_p_l_e_m_e_n_t_a_t_i_o_n_1_1ondemane3bc1d6e1f7ab3457d0e05e7c958ddde.html @@ -0,0 +1,122 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    error() const noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    firstsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >protected
    get(SIMDJSON_IMPLEMENTATION::ondemand::document_stream &value) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    implementation_simdjson_result_base() noexcept=defaultsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    implementation_simdjson_result_base(error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    implementation_simdjson_result_base(SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&value, error_code error) noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    operator SIMDJSON_IMPLEMENTATION::ondemand::document_stream &&() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    secondsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >protected
    simdjson_result() noexcept=default (defined in simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >)simdjson::simdjson_result< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    take_value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    tie(SIMDJSON_IMPLEMENTATION::ondemand::document_stream &value, error_code &error) &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    value() &noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    value() &&noexcept(false)simdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    value_unsafe() const &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    value_unsafe() &noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    value_unsafe() &&noexceptsimdjson::SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base< SIMDJSON_IMPLEMENTATION::ondemand::document_stream >
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4-members.html new file mode 100644 index 000000000..3fa8f7dee --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4-members.html @@ -0,0 +1,110 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< dom::array > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< dom::array >, including all inherited members.

    + + + + + + +
    at(size_t index) const noexcept (defined in simdjson::simdjson_result< dom::array >)simdjson::simdjson_result< dom::array >inline
    at_pointer(std::string_view json_pointer) const noexcept (defined in simdjson::simdjson_result< dom::array >)simdjson::simdjson_result< dom::array >inline
    begin() const noexcept(false) (defined in simdjson::simdjson_result< dom::array >)simdjson::simdjson_result< dom::array >inline
    end() const noexcept(false) (defined in simdjson::simdjson_result< dom::array >)simdjson::simdjson_result< dom::array >inline
    size() const noexcept(false) (defined in simdjson::simdjson_result< dom::array >)simdjson::simdjson_result< dom::array >inline
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html new file mode 100644 index 000000000..717338e8f --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html @@ -0,0 +1,142 @@ + + + + + + + +simdjson: simdjson::simdjson_result< dom::array > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< dom::array > Struct Reference
    +
    +
    + +

    The result of a JSON conversion that may fail. + More...

    +
    +Inheritance diagram for simdjson::simdjson_result< dom::array >:
    +
    +
    + +
    + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_result< dom::elementat_pointer (std::string_view json_pointer) const noexcept
     
    +simdjson_result< dom::elementat (size_t index) const noexcept
     
    +dom::array::iterator begin () const noexcept(false)
     
    +dom::array::iterator end () const noexcept(false)
     
    +size_t size () const noexcept(false)
     
    +

    Detailed Description

    +

    The result of a JSON conversion that may fail.

    + +

    Definition at line 149 of file array.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.js b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.js new file mode 100644 index 000000000..9c5e425bd --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.js @@ -0,0 +1,8 @@ +var structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4 = +[ + [ "at", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html#a95a94ac651531fd43415d2e2ef3fe494", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html#a13b7d1e27c91bc086c711dade44bdf36", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html#a1f9c05b3fe3f41af29a90909a31d39d3", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html#a874a1e89ed18e71e5f936af1a1b3e228", null ], + [ "size", "structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.html#aae467c72be8644ad0cec91b01f4b850b", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.png b/structsimdjson_1_1simdjson__result_3_01dom_1_1array_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a6c6a95025d575f47083d89857c9929ee7d68b GIT binary patch literal 1498 zcmbu9eN@s{7{`BTrh;jlRyLjKah7E-EVH?EQu&UGS)iz)WSZt1ScaPVGkaO3L@6sR z-*Snm`0_JfFhhYfsVv({#TkZW9bY1>L=+KXwC(J)KX-P|x%YnWeeQYwc%IMq<^=eA zErXlE0RUKr@pj(_05G&xpEuCet{9zEv36S>;D`6nXf#?m`A$x~)Rm`Ie@;H1ua`4o zsXZDT+vkr1w2wZI!Ct&Q0O-YH+;`*CVA4`iL9x?vy;{rYIgRFH#O=2_?AQnQ(8D3D z99WI{%DAa3=M7dM^H1j4e2ba5g~s?qf{e=orOgJq9J8;;e6|l}Joe2`8efuhyyXP( zx{Wjf?4FEB@;kvcHP5=pyRZLRI`+zm+_7_BVHkieIlHH=&?vdw?g5!+CpsFx0C{i3 z6t*)_%zCLRR8xGkj?zgjI^i#439y}y$aHQ+*8ZZD!=>!3wHTkIz|kiIxwM(5-65@r zcndsO4T4gS_B@lBKnae~L_~?*KsP$xx2|~MBsZ4$3uW1Wko@BPAyCG5UJ~x&^!8N7 zY&|IqGzki9b9L;tC5*bvkj0C+vM30DagN);B?OHwPJ=z{FsWK}#L<$q=PY#oWY-FGMMu(PtTS%I+hvF*KfrsA6=4jcz!>rD8- z>THv)9z>o%2^eL=6jsEJ|9UMBBe|c+IsagnHzS`Z3%+hs`DN#@6%cg?apwTXCG*yP zJDQCYNB4G>$w| zIbt6iATu@x zE^QrZx-1k0_du-vaNc0FMJJe_Zj2Rf$F*m|K{dYCal~*SH9i);sjw10oKj0`>kFBx zzC$fo{Gsv#_w2>ow&GwM>YOs`Q!BiRCEg%j5yB2|evu9a@;=@eHdr&YalA2MOAm{z zSK#I4jjiR5`PNcmY8|ao^p?B|3KG*oST4;w_9AHNha7ZT){I?C zD>dng{N+eJjlf7Rb17s>RQ{_ly)!430y>X`X7tX5qA+*(cM<6RiJtjMz3UJfW6x+g ztu@X+T-5DhJTp>STl=}Y>tv^noAZIFMs)V3(NQfD_mn`B(cC)|t8;P~kv{`G(^6w5 z(e;i5Kl5Nkm&2I1(Af?`{m-QQk6;If`nM<;V6h!djwu71KL&n{u3loY2g){Y9L&Jq44$30h4R@6_YDPiehKa5TP=Ked z_mS|?+0fUBgr!;H%7l!0f4W^gBC1j`ZnuG}Cfh(@FL$VECy}Dd@MxVS$+2 zSI5wxWxJx`Chv$Gri%Y}clydv)?M!IHVTuMXUQr|S7@a6BL*-Y{_YK~2TuI~kW1-O literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4-members.html new file mode 100644 index 000000000..b19bbc79d --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4-members.html @@ -0,0 +1,107 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< dom::document_stream > Member List
    +
    + +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html new file mode 100644 index 000000000..08c764f44 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: simdjson::simdjson_result< dom::document_stream > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< dom::document_stream > Struct Reference
    +
    +
    +
    +Inheritance diagram for simdjson::simdjson_result< dom::document_stream >:
    +
    +
    + +
    + + + + + + +

    +Public Member Functions

    +simdjson_inline dom::document_stream::iterator begin () noexcept(false)
     
    +simdjson_inline dom::document_stream::iterator end () noexcept(false)
     
    +

    Detailed Description

    +
    +

    Definition at line 303 of file document_stream.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.js b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.js new file mode 100644 index 000000000..ecede981b --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.js @@ -0,0 +1,5 @@ +var structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4 = +[ + [ "begin", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html#ac7fa875d880cf6f7e581d01bc1f0abdc", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.html#a1aa922079a1cf123e68ab8d18d20e10e", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.png b/structsimdjson_1_1simdjson__result_3_01dom_1_1document__stream_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3c58b2bb9b0f84ecae8f76e053d778b40a44c4c2 GIT binary patch literal 1734 zcmcJQdpOez7{`B>kr^t6R@BMVK`p5fa;b;IZ%k;cT;@90%5B>r#Sl^ylQWl2x-3FV z*CY3xA_p6#A;QS5XQMeLj_c0yJg2Ag|2gmTeBbx;KF|Bt`+lG2&2V0kS(WBPF0D(#w1iR4epkt7=O2=n@!o4Pq^8*W1L&&vg; z{DahGcY_(I)NGi&E2@l!vZen6(J7E{ntYUYYGUEMFOIdikbpO_lTe|kP#gWoD-dJT z53`kO#@-#h;--}sg#)V-lNHSbntU!AORA|oiy$MoC6;NOC&qt#Tp^#uoj;+m2P9N8 zX&?#yaK2c#g-AKzv7fOJrt{3DE;P5iEJQ6JhUz0G`iwj4Yw=t@R9DfNs$OpF?n!<{ z!MP>(`uH!S+Viursso$s~}3t+P5Owl+Txjr#1&3c#=B^$X80 z5-dVa3(S5q2W#58(I`-Hjn?wVJ%iGBVY^PPG2*T132^=`8cLTw zr~a>Pudh895)_nCa0(7I7Fq!c)|<)z>z#>fOj#g`2?3HEAyV>_(&MqE4K{QbfRfHY zW==g(l=+Xk*=2;`K?e>enT^uRVQzAj0WYHv*-ZOyfP{LOmMoXT@>)%}PNW>>fex{C zrcO7u>!4hO4k()SSE<`Ejm;N-m??H;H=rj>`ibG^o)9}?-btDRs|^fhC{~^Ol_`QcNx}W~ zr-E8O;mMJ_&_hG*ABn6CH*eFsIfLj+*M`))a7)E)yxwW*Sc7apuumr8me0Ngy5$`q zBnyJTl^$j^r=I4X*9eR0@kuoiUPKQqj^!;QXr6j#mv27)8pHcOrIxHb2fez)$wj75vK8;y zO>C{ozly=51VV5{xyx8@CxyRch0# zE({!J4HVU42Ha~dyX;S5p5uAj)6WsP4qX(>Tw8hq(#kVw(NJjR4}OX5#L^ow9H4dh zomDi{1)a);b>~?yA#^oRe6F;U8)x1&h%6xj3O$d%?%A|gNOMK{2S-a+`ny!o4)FIQx)kYIF`~@gb2qT zyx$UD$)fC4A9^4pFc2qa$*>nqZkV%*#XZA3@bnw_Le|yZEqApdVlhSu%i1ATUW~tT z#PSQY-+eWC0lZXrzn}BEbK;|w$uM|l(jJ5~X + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< dom::element > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< dom::element >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    at(const std::string_view json_pointer) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    at(size_t index) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    at_key(std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    at_key_case_insensitive(std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    at_pointer(const std::string_view json_pointer) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    begin() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    end() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get(T &value) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_array() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_bool() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_c_str() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_double() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_int64() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_object() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_string() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_string_length() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    get_uint64() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_array() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_bool() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_double() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_int64() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_null() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_number() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_object() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_string() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    is_uint64() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator bool() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator const char *() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >explicit
    operator dom::array() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator dom::object() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator double() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator int64_t() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator std::string_view() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator uint64_t() const noexcept(false) (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator[](std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    operator[](const char *key) const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >
    type() const noexcept (defined in simdjson::simdjson_result< dom::element >)simdjson::simdjson_result< dom::element >inline
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html new file mode 100644 index 000000000..aea538cb6 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html @@ -0,0 +1,247 @@ + + + + + + + +simdjson: simdjson::simdjson_result< dom::element > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< dom::element > Struct Reference
    +
    +
    + +

    The result of a JSON navigation that may fail. + More...

    +
    +Inheritance diagram for simdjson::simdjson_result< dom::element >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_inline simdjson_result< dom::element_type > type () const noexcept
     
    +template<typename T >
    simdjson_inline bool is () const noexcept
     
    +template<typename T >
    simdjson_inline simdjson_result< T > get () const noexcept
     
    +template<typename T >
    simdjson_warn_unused simdjson_inline error_code get (T &value) const noexcept
     
    +simdjson_inline simdjson_result< dom::arrayget_array () const noexcept
     
    +simdjson_inline simdjson_result< dom::objectget_object () const noexcept
     
    +simdjson_inline simdjson_result< const char * > get_c_str () const noexcept
     
    +simdjson_inline simdjson_result< size_t > get_string_length () const noexcept
     
    +simdjson_inline simdjson_result< std::string_view > get_string () const noexcept
     
    +simdjson_inline simdjson_result< int64_t > get_int64 () const noexcept
     
    +simdjson_inline simdjson_result< uint64_t > get_uint64 () const noexcept
     
    +simdjson_inline simdjson_result< double > get_double () const noexcept
     
    +simdjson_inline simdjson_result< bool > get_bool () const noexcept
     
    +simdjson_inline bool is_array () const noexcept
     
    +simdjson_inline bool is_object () const noexcept
     
    +simdjson_inline bool is_string () const noexcept
     
    +simdjson_inline bool is_int64 () const noexcept
     
    +simdjson_inline bool is_uint64 () const noexcept
     
    +simdjson_inline bool is_double () const noexcept
     
    +simdjson_inline bool is_number () const noexcept
     
    +simdjson_inline bool is_bool () const noexcept
     
    +simdjson_inline bool is_null () const noexcept
     
    +simdjson_inline simdjson_result< dom::elementoperator[] (std::string_view key) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementoperator[] (const char *key) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementat_pointer (const std::string_view json_pointer) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementat (const std::string_view json_pointer) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementat (size_t index) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementat_key (std::string_view key) const noexcept
     
    +simdjson_inline simdjson_result< dom::elementat_key_case_insensitive (std::string_view key) const noexcept
     
    +simdjson_inline operator bool () const noexcept(false)
     
    +simdjson_inline operator const char * () const noexcept(false)
     
    +simdjson_inline operator std::string_view () const noexcept(false)
     
    +simdjson_inline operator uint64_t () const noexcept(false)
     
    +simdjson_inline operator int64_t () const noexcept(false)
     
    +simdjson_inline operator double () const noexcept(false)
     
    +simdjson_inline operator dom::array () const noexcept(false)
     
    +simdjson_inline operator dom::object () const noexcept(false)
     
    +simdjson_inline dom::array::iterator begin () const noexcept(false)
     
    +simdjson_inline dom::array::iterator end () const noexcept(false)
     
    +

    Detailed Description

    +

    The result of a JSON navigation that may fail.

    + +

    Definition at line 482 of file element.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.js b/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.js new file mode 100644 index 000000000..ad50dbc9b --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.js @@ -0,0 +1,42 @@ +var structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4 = +[ + [ "at", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a75e13d079118b2e532b872026debf1aa", null ], + [ "at", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#aa5fc1f2ba212d675892d7769f886a961", null ], + [ "at_key", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a007b43b1f5a5eb29c71cc8f80fce25ae", null ], + [ "at_key_case_insensitive", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ae07877e1a2d4555e6226cfbfcbd52989", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a49a8f308fee51108430db6612da292da", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a7c3dcc6e3cf1c8640bd484fe0ab21979", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a758ca9e0d3c830bd6cd9275c9697b18b", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#af42fb63b4e0f3d5190c5a7a47b454130", null ], + [ "get", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#abd3a4c98b732cb2be0ca15c3007a6680", null ], + [ "get_array", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a0db815bf9c04c69fdde04c4b31dd4b4b", null ], + [ "get_bool", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a3bc1170409a675625791ea32e9814463", null ], + [ "get_c_str", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#acef2c56d1d4fcf1cf25fe1677b83c5a4", null ], + [ "get_double", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ad3e6c5c3efc7f15c88d16ea02f7fd02a", null ], + [ "get_int64", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a299b861723abfb3adcf347b72d30035c", null ], + [ "get_object", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ab67de75468b45c42778f55bcd955c9a1", null ], + [ "get_string", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a48760539a35aca31d02866a9d26e4c9e", null ], + [ "get_string_length", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#aebd20e7065e906b4cd6766d37112dbea", null ], + [ "get_uint64", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a3c2db7eae42eb4016ac55e2043dabedf", null ], + [ "is", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a99a9fc35b7026d644f5612b08a957279", null ], + [ "is_array", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a8258ad298130670219228d07115c1c67", null ], + [ "is_bool", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a205ceddc638190fb4f484cd45b15553c", null ], + [ "is_double", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#aa371ab95cee4d1f754dfef5a60072cdd", null ], + [ "is_int64", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ad982688fe778d80ae8770a7579d87399", null ], + [ "is_null", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a89df70a4681110234eeb3625effea19d", null ], + [ "is_number", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a9d16172b494e6d23d018f30e5749581c", null ], + [ "is_object", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#aa3415f1f1d25b0cf73016663f954671e", null ], + [ "is_string", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ae40253ef7014f88056e74fbfd8f33e75", null ], + [ "is_uint64", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a3df3c734f49ce63bc3dd8ae7283e6720", null ], + [ "operator bool", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a3873323e2ec0895010e48882ca2bc513", null ], + [ "operator const char *", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a272ed060b11c94ab3576c4d2d670f8a7", null ], + [ "operator dom::array", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ae2d081fd9e57e1b2d379e6aba32c290b", null ], + [ "operator dom::object", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ac8f4f526b37908cf58430a34125743f3", null ], + [ "operator double", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a02b072a5db37266e8bc48f796bca3a82", null ], + [ "operator int64_t", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ab2cfb006061914677fcb93d49e8283cf", null ], + [ "operator std::string_view", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#adf99d7c2a96f5f2da265aceef4b47986", null ], + [ "operator uint64_t", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#adaf461aa2908f3d8cf8ac931334755d3", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#ac98e4007887019f8dcf2dac07a8a3a3b", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a44ea6742d136192ac67eb1c73fe1edbf", null ], + [ "type", "structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.html#a324bb5d94ca6c176f5cc7635998c71a9", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.png b/structsimdjson_1_1simdjson__result_3_01dom_1_1element_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd11910b4d5c184da7b9566a255c85878cbbe5b5 GIT binary patch literal 1527 zcmbu9X;70#9Eaav&=9L4tp@^fB|0XYg1`_Dih#TU5{ZcvLB)f3(2#&40)mWE5z37* zTmcypF1ZZK6_6mdNFY#A%aH`qYCx`#7GuI8G|aF3_M@Ie*X8A9b$mai2uppIrcSG!$Kz=xhz!+B z*i{1V7@$71(%$fidjUZ64(ReN@j7Ih`7*M|NZYN~|MBud>mMhQHB1xSip93fPY!-t z*2>Sj1zX#Aba%V8A@-!RtO;zy4{0dmo;czj(3ph<;l@r<$}P;SD0k`NU^^wb#EGU8 z&BcNf=_n*gP#oa5gx1To7@KT77vmom95OpAyj!g`(PQ4DpeiRh7G#4HO_TKgBa;P} zwZI)@cQ(iltExNHwL@6d^*|{7^VGqrS2Ls4vq65PIZbARvJPsYI3IB`fEZZY`mx2o zzrB7aK72m>OcZ^o821qqWFLVBeRM75TvW->rDNkPzIjzss1if>=+&gx^I+LU9k@)( zO*fSnIGl88yr`2uJyYweYr0qE=gV|$(P>gvE;ef16jK8g+0>roP~vb32zp)F-QdX% z!^v@Y>zDZw_FBGz>d=O~gjdC7ydGP}$Y6CWUZ$5E&%xhs5M{Cswqnr8@j%sDdd7!s zAU)$7=kj|j?Jw^Jva@~9lI>u;$yrDmkd%Rfn5b0l3;@Ey#=>@Gj_U;E5w)~k5}`0- zk_H0M;^n4mZq#-zhq?ngvG%6x^^M|)T4?|Rpt@~!aDtWT7(v{D;UqI!tTqAZq>%-tInHJVtc5#+iJhX-+18K4B+IySZ5Rv;E}Dd`J25|#ifBV;(!P%ZuAONA4C5upQY z5~2+M_1ts)BZoJYOnl|=fxp@o4%M9bLlM(dlg+{8b zRc}qoiF0+a=!X^U{g8TH>W|d7L;Hleqs*~EzH@RG=gi1yYK2XZcO$gBh%Xd)lO_)Y z$?TERGS8N4!SwlU@+%}C!Gqxj!S@*M$lZc|MSU*i0)-?y%^jpPS_)^(hb4*fA(Y@= z%y)j07{UA)C4M?7d~{z~uq-um5G}`5MA0#*)};uhhcq0%m_XtanQA8l4Rb$7o9!$U z+4-MrjJoMLOs-Bf$n+125g+p%1dUs3&Qmb{KaC8dX@-#{+Nm5)!iU4S^K6hwCW!Mb zXstD?Y2$iP{Dx?B2fSHXDPjzZYe}3s3fB)WFCM5nTvOGP`OvoWcibrd{StJ|cLV9b<{L4^9dFs+JY5911gW)rd<&L7d&` ztI$^@Sdl_4$%-^968+C@Ifj^%jUdz9Xs z$meGnLM8e$g?&#=MtyuoF8rg6*!?v{9Q3xP@eAfG9^bh%~UhQ0xjD8F_MK} zR=>I3Xf&}>IaO9VzinXZP5ZCj!Y-djF}jA*d12+_T8+GS8Cd0IZarGF!7IkRTy*UY z{f6v$J=qbZR8n>xvb<8t!*D~YWp(7E^>0g`AQ+pcYs4jzbbeqW`;PGJfb5e}>6^_+ zF<8@|Q!(z*CZBe>w{XC1^+#A_RM@_^z1^gMi+J|8n+&!#Y>JXs>Z9cabH`;K3Yl+n zSHY~em*bn=*P|{TaA>psn{^O89n|s6*Cqe} literal 0 HcmV?d00001 diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4-members.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4-members.html new file mode 100644 index 000000000..4e7a20b7e --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4-members.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simdjson::simdjson_result< dom::object > Member List
    +
    +
    + +

    This is the complete list of members for simdjson::simdjson_result< dom::object >, including all inherited members.

    + + + + + + + + + +
    at_key(std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    at_key_case_insensitive(std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    at_pointer(std::string_view json_pointer) const noexcept (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    begin() const noexcept(false) (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    end() const noexcept(false) (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    operator[](std::string_view key) const noexcept (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    operator[](const char *key) const noexcept (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    size() const noexcept(false) (defined in simdjson::simdjson_result< dom::object >)simdjson::simdjson_result< dom::object >inline
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html new file mode 100644 index 000000000..44642023d --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html @@ -0,0 +1,151 @@ + + + + + + + +simdjson: simdjson::simdjson_result< dom::object > Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simdjson::simdjson_result< dom::object > Struct Reference
    +
    +
    + +

    The result of a JSON conversion that may fail. + More...

    +
    +Inheritance diagram for simdjson::simdjson_result< dom::object >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +simdjson_result< dom::elementoperator[] (std::string_view key) const noexcept
     
    +simdjson_result< dom::elementoperator[] (const char *key) const noexcept
     
    +simdjson_result< dom::elementat_pointer (std::string_view json_pointer) const noexcept
     
    +simdjson_result< dom::elementat_key (std::string_view key) const noexcept
     
    +simdjson_result< dom::elementat_key_case_insensitive (std::string_view key) const noexcept
     
    +dom::object::iterator begin () const noexcept(false)
     
    +dom::object::iterator end () const noexcept(false)
     
    +size_t size () const noexcept(false)
     
    +

    Detailed Description

    +

    The result of a JSON conversion that may fail.

    + +

    Definition at line 238 of file object.h.

    +

    The documentation for this struct was generated from the following files: +
    +
    + + + + diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.js b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.js new file mode 100644 index 000000000..dc6be5a42 --- /dev/null +++ b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.js @@ -0,0 +1,11 @@ +var structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4 = +[ + [ "at_key", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a15d754b47cd3b7a0d8fb2010a1cad1ff", null ], + [ "at_key_case_insensitive", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a29941afa9db41255684d415a4eb76131", null ], + [ "at_pointer", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a3cbf0006200007accbfa5e596ea73ccc", null ], + [ "begin", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a660ae79c537b7347b2b934870aac680a", null ], + [ "end", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a171669c4e5f048b858139a2b1767cd7b", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a0eb5e478654a4d80045f81e99666d7e1", null ], + [ "operator[]", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#ae7aaa4b623ae007a33b0faa37374cc33", null ], + [ "size", "structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.html#a53309d2504209b1d4b00df48f1c074d3", null ] +]; \ No newline at end of file diff --git a/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.png b/structsimdjson_1_1simdjson__result_3_01dom_1_1object_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..8189ab98c6d9f02d5041fbcf936da0f8b8c91cbb GIT binary patch literal 1510 zcmb`Hdo#$e!g#pGu9R%ttt%w z00LuY?Fs-83$adzONd|Wxw<}aQFeB8x7pd*5zF7-2`^>;k|S1sT{fF7nK7v$ZsF0c zST{gCw0lOLxf=k0oC5a=v^8 zERNH!d%{o+#$a00)9h&UeOd^6*Hoh;m_0)kNSj#pOwo+ypo^%Pl6|+wcdg4|AzLkv zsjh^ur_Ws>{rXc+%jPkOV$|YNtACO=j>2D94C!`CX^Tv3LpQD59z(6>SGtcK7`mDSVXpvJ(B` z?4A0ilz^3z+ns@%W}63Y-6)t!GZo2xL`<#AmML#eejo~^sJ0fSTcZpo`Z2DjuA9z> z!PyJRXEXaO^~R>d6&;4kZ1=`6%*+EYs`F|HpSMJF-7+sSeR#18ku)64V47WFS0J~n zm=>68IiR+VrD`4%PIjgrbOgEm3Wm)m0P`YWK#HwNme*uA`PRu3ON`+1M1>!vA!!&I zaAHW~T&fW~2S5VTcJKX@;o>of9ng_G$pQ8ZX`X}T0GAK7W zb`EZNvta!yJ}ynhUbI{vpI1%E=(&k?#l?-)lazs|mZ99eb8UKlloY!CxC|<8q1K?T z6^Dx-oZKQ+oyo7e*eG<(42!~DMAa&>q=e(V?^h3xZ$1c^nn`M*RaV-*-hvs3dm=og;)Tug|o8#aL)mK_tpTP5;d`q0|D;vRz+-tJ?(jZ9Et z{jJ(Ed8En@#OWC}HT>~oStm^I<#EyFQVzv7^a-I|Qt#tzM>$u;D`T>px+RnFOt~xd6$7*J}gyX|7W|r z{+Uz@{bU$1T@0rd0=kRXE`F&lw9tk(+m=;7kqbjr%Abvmuyz0d literal 0 HcmV?d00001 diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 000000000..7d45d36c1 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/tape__ref-inl_8h_source.html b/tape__ref-inl_8h_source.html new file mode 100644 index 000000000..ae22c0790 --- /dev/null +++ b/tape__ref-inl_8h_source.html @@ -0,0 +1,216 @@ + + + + + + + +simdjson: include/simdjson/internal/tape_ref-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tape_ref-inl.h
    +
    +
    +
    1 #ifndef SIMDJSON_INLINE_TAPE_REF_H
    +
    2 #define SIMDJSON_INLINE_TAPE_REF_H
    +
    3 
    +
    4 #include "simdjson/internal/tape_ref.h"
    +
    5 #include <cstring>
    +
    6 
    +
    7 namespace simdjson {
    +
    8 namespace internal {
    +
    9 
    +
    10 //
    +
    11 // tape_ref inline implementation
    +
    12 //
    +
    13 simdjson_inline tape_ref::tape_ref() noexcept : doc{nullptr}, json_index{0} {}
    +
    14 simdjson_inline tape_ref::tape_ref(const dom::document *_doc, size_t _json_index) noexcept : doc{_doc}, json_index{_json_index} {}
    +
    15 
    +
    16 
    +
    17 simdjson_inline bool tape_ref::is_document_root() const noexcept {
    +
    18  return json_index == 1; // should we ever change the structure of the tape, this should get updated.
    +
    19 }
    +
    20 simdjson_inline bool tape_ref::usable() const noexcept {
    +
    21  return doc != nullptr; // when the document pointer is null, this tape_ref is uninitialized (should not be accessed).
    +
    22 }
    +
    23 // Some value types have a specific on-tape word value. It can be faster
    +
    24 // to check the type by doing a word-to-word comparison instead of extracting the
    +
    25 // most significant 8 bits.
    +
    26 
    +
    27 simdjson_inline bool tape_ref::is_double() const noexcept {
    +
    28  constexpr uint64_t tape_double = uint64_t(tape_type::DOUBLE)<<56;
    +
    29  return doc->tape[json_index] == tape_double;
    +
    30 }
    +
    31 simdjson_inline bool tape_ref::is_int64() const noexcept {
    +
    32  constexpr uint64_t tape_int64 = uint64_t(tape_type::INT64)<<56;
    +
    33  return doc->tape[json_index] == tape_int64;
    +
    34 }
    +
    35 simdjson_inline bool tape_ref::is_uint64() const noexcept {
    +
    36  constexpr uint64_t tape_uint64 = uint64_t(tape_type::UINT64)<<56;
    +
    37  return doc->tape[json_index] == tape_uint64;
    +
    38 }
    +
    39 simdjson_inline bool tape_ref::is_false() const noexcept {
    +
    40  constexpr uint64_t tape_false = uint64_t(tape_type::FALSE_VALUE)<<56;
    +
    41  return doc->tape[json_index] == tape_false;
    +
    42 }
    +
    43 simdjson_inline bool tape_ref::is_true() const noexcept {
    +
    44  constexpr uint64_t tape_true = uint64_t(tape_type::TRUE_VALUE)<<56;
    +
    45  return doc->tape[json_index] == tape_true;
    +
    46 }
    +
    47 simdjson_inline bool tape_ref::is_null_on_tape() const noexcept {
    +
    48  constexpr uint64_t tape_null = uint64_t(tape_type::NULL_VALUE)<<56;
    +
    49  return doc->tape[json_index] == tape_null;
    +
    50 }
    +
    51 
    +
    52 inline size_t tape_ref::after_element() const noexcept {
    +
    53  switch (tape_ref_type()) {
    +
    54  case tape_type::START_ARRAY:
    +
    55  case tape_type::START_OBJECT:
    +
    56  return matching_brace_index();
    +
    57  case tape_type::UINT64:
    +
    58  case tape_type::INT64:
    +
    59  case tape_type::DOUBLE:
    +
    60  return json_index + 2;
    +
    61  default:
    +
    62  return json_index + 1;
    +
    63  }
    +
    64 }
    +
    65 simdjson_inline tape_type tape_ref::tape_ref_type() const noexcept {
    +
    66  return static_cast<tape_type>(doc->tape[json_index] >> 56);
    +
    67 }
    +
    68 simdjson_inline uint64_t internal::tape_ref::tape_value() const noexcept {
    +
    69  return doc->tape[json_index] & internal::JSON_VALUE_MASK;
    +
    70 }
    +
    71 simdjson_inline uint32_t internal::tape_ref::matching_brace_index() const noexcept {
    +
    72  return uint32_t(doc->tape[json_index]);
    +
    73 }
    +
    74 simdjson_inline uint32_t internal::tape_ref::scope_count() const noexcept {
    +
    75  return uint32_t((doc->tape[json_index] >> 32) & internal::JSON_COUNT_MASK);
    +
    76 }
    +
    77 
    +
    78 template<typename T>
    +
    79 simdjson_inline T tape_ref::next_tape_value() const noexcept {
    +
    80  static_assert(sizeof(T) == sizeof(uint64_t), "next_tape_value() template parameter must be 64-bit");
    +
    81  // Though the following is tempting...
    +
    82  // return *reinterpret_cast<const T*>(&doc->tape[json_index + 1]);
    +
    83  // It is not generally safe. It is safer, and often faster to rely
    +
    84  // on memcpy. Yes, it is uglier, but it is also encapsulated.
    +
    85  T x;
    +
    86  std::memcpy(&x,&doc->tape[json_index + 1],sizeof(uint64_t));
    +
    87  return x;
    +
    88 }
    +
    89 
    +
    90 simdjson_inline uint32_t internal::tape_ref::get_string_length() const noexcept {
    +
    91  size_t string_buf_index = size_t(tape_value());
    +
    92  uint32_t len;
    +
    93  std::memcpy(&len, &doc->string_buf[string_buf_index], sizeof(len));
    +
    94  return len;
    +
    95 }
    +
    96 
    +
    97 simdjson_inline const char * internal::tape_ref::get_c_str() const noexcept {
    +
    98  size_t string_buf_index = size_t(tape_value());
    +
    99  return reinterpret_cast<const char *>(&doc->string_buf[string_buf_index + sizeof(uint32_t)]);
    +
    100 }
    +
    101 
    +
    102 inline std::string_view internal::tape_ref::get_string_view() const noexcept {
    +
    103  return std::string_view(
    +
    104  get_c_str(),
    +
    105  get_string_length()
    +
    106  );
    +
    107 }
    +
    108 
    +
    109 } // namespace internal
    +
    110 } // namespace simdjson
    +
    111 
    +
    112 #endif // SIMDJSON_INLINE_TAPE_REF_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/tape__ref_8h_source.html b/tape__ref_8h_source.html new file mode 100644 index 000000000..1d45eb022 --- /dev/null +++ b/tape__ref_8h_source.html @@ -0,0 +1,152 @@ + + + + + + + +simdjson: include/simdjson/internal/tape_ref.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tape_ref.h
    +
    +
    +
    1 #ifndef SIMDJSON_INTERNAL_TAPE_REF_H
    +
    2 #define SIMDJSON_INTERNAL_TAPE_REF_H
    +
    3 
    +
    4 #include "simdjson/internal/tape_type.h"
    +
    5 
    +
    6 namespace simdjson {
    +
    7 
    +
    8 namespace dom {
    +
    9  class document;
    +
    10 }
    +
    11 
    +
    12 namespace internal {
    +
    13 
    +
    14 constexpr const uint64_t JSON_VALUE_MASK = 0x00FFFFFFFFFFFFFF;
    +
    15 constexpr const uint32_t JSON_COUNT_MASK = 0xFFFFFF;
    +
    16 
    +
    20 class tape_ref {
    +
    21 public:
    +
    22  simdjson_inline tape_ref() noexcept;
    +
    23  simdjson_inline tape_ref(const dom::document *doc, size_t json_index) noexcept;
    +
    24  inline size_t after_element() const noexcept;
    +
    25  simdjson_inline tape_type tape_ref_type() const noexcept;
    +
    26  simdjson_inline uint64_t tape_value() const noexcept;
    +
    27  simdjson_inline bool is_double() const noexcept;
    +
    28  simdjson_inline bool is_int64() const noexcept;
    +
    29  simdjson_inline bool is_uint64() const noexcept;
    +
    30  simdjson_inline bool is_false() const noexcept;
    +
    31  simdjson_inline bool is_true() const noexcept;
    +
    32  simdjson_inline bool is_null_on_tape() const noexcept;// different name to avoid clash with is_null.
    +
    33  simdjson_inline uint32_t matching_brace_index() const noexcept;
    +
    34  simdjson_inline uint32_t scope_count() const noexcept;
    +
    35  template<typename T>
    +
    36  simdjson_inline T next_tape_value() const noexcept;
    +
    37  simdjson_inline uint32_t get_string_length() const noexcept;
    +
    38  simdjson_inline const char * get_c_str() const noexcept;
    +
    39  inline std::string_view get_string_view() const noexcept;
    +
    40  simdjson_inline bool is_document_root() const noexcept;
    +
    41  simdjson_inline bool usable() const noexcept;
    +
    42 
    +
    44  const dom::document *doc;
    +
    45 
    +
    47  size_t json_index;
    +
    48 };
    +
    49 
    +
    50 } // namespace internal
    +
    51 } // namespace simdjson
    +
    52 
    +
    53 #endif // SIMDJSON_INTERNAL_TAPE_REF_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/tape__type_8h_source.html b/tape__type_8h_source.html new file mode 100644 index 000000000..d85120403 --- /dev/null +++ b/tape__type_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: include/simdjson/internal/tape_type.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tape_type.h
    +
    +
    +
    1 #ifndef SIMDJSON_INTERNAL_TAPE_TYPE_H
    +
    2 #define SIMDJSON_INTERNAL_TAPE_TYPE_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace internal {
    +
    6 
    +
    10 enum class tape_type {
    +
    11  ROOT = 'r',
    +
    12  START_ARRAY = '[',
    +
    13  START_OBJECT = '{',
    +
    14  END_ARRAY = ']',
    +
    15  END_OBJECT = '}',
    +
    16  STRING = '"',
    +
    17  INT64 = 'l',
    +
    18  UINT64 = 'u',
    +
    19  DOUBLE = 'd',
    +
    20  TRUE_VALUE = 't',
    +
    21  FALSE_VALUE = 'f',
    +
    22  NULL_VALUE = 'n'
    +
    23 }; // enum class tape_type
    +
    24 
    +
    25 } // namespace internal
    +
    26 } // namespace simdjson
    +
    27 
    +
    28 #endif // SIMDJSON_INTERNAL_TAPE_TYPE_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/token__iterator-inl_8h_source.html b/token__iterator-inl_8h_source.html new file mode 100644 index 000000000..6e85d6b87 --- /dev/null +++ b/token__iterator-inl_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/token_iterator-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    token_iterator-inl.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    5 simdjson_inline token_iterator::token_iterator(
    +
    6  const uint8_t *_buf,
    +
    7  token_position position
    +
    8 ) noexcept : buf{_buf}, _position{position}
    +
    9 {
    +
    10 }
    +
    11 
    +
    12 simdjson_inline uint32_t token_iterator::current_offset() const noexcept {
    +
    13  return *(_position);
    +
    14 }
    +
    15 
    +
    16 
    +
    17 simdjson_inline const uint8_t *token_iterator::return_current_and_advance() noexcept {
    +
    18  return &buf[*(_position++)];
    +
    19 }
    +
    20 
    +
    21 simdjson_inline const uint8_t *token_iterator::peek(token_position position) const noexcept {
    +
    22  return &buf[*position];
    +
    23 }
    +
    24 simdjson_inline uint32_t token_iterator::peek_index(token_position position) const noexcept {
    +
    25  return *position;
    +
    26 }
    +
    27 simdjson_inline uint32_t token_iterator::peek_length(token_position position) const noexcept {
    +
    28  return *(position+1) - *position;
    +
    29 }
    +
    30 
    +
    31 simdjson_inline const uint8_t *token_iterator::peek(int32_t delta) const noexcept {
    +
    32  return &buf[*(_position+delta)];
    +
    33 }
    +
    34 simdjson_inline uint32_t token_iterator::peek_index(int32_t delta) const noexcept {
    +
    35  return *(_position+delta);
    +
    36 }
    +
    37 simdjson_inline uint32_t token_iterator::peek_length(int32_t delta) const noexcept {
    +
    38  return *(_position+delta+1) - *(_position+delta);
    +
    39 }
    +
    40 
    +
    41 simdjson_inline token_position token_iterator::position() const noexcept {
    +
    42  return _position;
    +
    43 }
    +
    44 simdjson_inline void token_iterator::set_position(token_position target_position) noexcept {
    +
    45  _position = target_position;
    +
    46 }
    +
    47 
    +
    48 simdjson_inline bool token_iterator::operator==(const token_iterator &other) const noexcept {
    +
    49  return _position == other._position;
    +
    50 }
    +
    51 simdjson_inline bool token_iterator::operator!=(const token_iterator &other) const noexcept {
    +
    52  return _position != other._position;
    +
    53 }
    +
    54 simdjson_inline bool token_iterator::operator>(const token_iterator &other) const noexcept {
    +
    55  return _position > other._position;
    +
    56 }
    +
    57 simdjson_inline bool token_iterator::operator>=(const token_iterator &other) const noexcept {
    +
    58  return _position >= other._position;
    +
    59 }
    +
    60 simdjson_inline bool token_iterator::operator<(const token_iterator &other) const noexcept {
    +
    61  return _position < other._position;
    +
    62 }
    +
    63 simdjson_inline bool token_iterator::operator<=(const token_iterator &other) const noexcept {
    +
    64  return _position <= other._position;
    +
    65 }
    +
    66 
    +
    67 } // namespace ondemand
    +
    68 } // namespace SIMDJSON_IMPLEMENTATION
    +
    69 } // namespace simdjson
    +
    70 
    +
    71 namespace simdjson {
    +
    72 
    +
    73 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value) noexcept
    +
    74  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator>(value)) {}
    +
    75 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator>::simdjson_result(error_code error) noexcept
    +
    76  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator>(error) {}
    +
    77 
    +
    78 } // namespace simdjson
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    +
    + + + + diff --git a/token__iterator_8h_source.html b/token__iterator_8h_source.html new file mode 100644 index 000000000..9f109373a --- /dev/null +++ b/token__iterator_8h_source.html @@ -0,0 +1,176 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/token_iterator.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    token_iterator.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    11 class token_iterator {
    +
    12 public:
    +
    18  simdjson_inline token_iterator() noexcept = default;
    +
    19  simdjson_inline token_iterator(token_iterator &&other) noexcept = default;
    +
    20  simdjson_inline token_iterator &operator=(token_iterator &&other) noexcept = default;
    +
    21  simdjson_inline token_iterator(const token_iterator &other) noexcept = default;
    +
    22  simdjson_inline token_iterator &operator=(const token_iterator &other) noexcept = default;
    +
    23 
    +
    27  simdjson_inline const uint8_t *return_current_and_advance() noexcept;
    +
    31  simdjson_inline uint32_t current_offset() const noexcept;
    +
    43  simdjson_inline const uint8_t *peek(int32_t delta=0) const noexcept;
    +
    52  simdjson_inline uint32_t peek_length(int32_t delta=0) const noexcept;
    +
    53 
    +
    62  simdjson_inline const uint8_t *peek(token_position position) const noexcept;
    +
    70  simdjson_inline uint32_t peek_length(token_position position) const noexcept;
    +
    71 
    +
    75  simdjson_inline token_position position() const noexcept;
    +
    79  simdjson_inline void set_position(token_position target_position) noexcept;
    +
    80 
    +
    81  // NOTE: we don't support a full C++ iterator interface, because we expect people to make
    +
    82  // different calls to advance the iterator based on *their own* state.
    +
    83 
    +
    84  simdjson_inline bool operator==(const token_iterator &other) const noexcept;
    +
    85  simdjson_inline bool operator!=(const token_iterator &other) const noexcept;
    +
    86  simdjson_inline bool operator>(const token_iterator &other) const noexcept;
    +
    87  simdjson_inline bool operator>=(const token_iterator &other) const noexcept;
    +
    88  simdjson_inline bool operator<(const token_iterator &other) const noexcept;
    +
    89  simdjson_inline bool operator<=(const token_iterator &other) const noexcept;
    +
    90 
    +
    91 protected:
    +
    92  simdjson_inline token_iterator(const uint8_t *buf, token_position position) noexcept;
    +
    93 
    +
    102  simdjson_inline uint32_t peek_index(int32_t delta=0) const noexcept;
    +
    111  simdjson_inline uint32_t peek_index(token_position position) const noexcept;
    +
    112 
    +
    113  const uint8_t *buf{};
    +
    114  token_position _position{};
    +
    115 
    +
    116  friend class json_iterator;
    +
    117  friend class value_iterator;
    +
    118  friend class object;
    +
    119  friend simdjson_inline void logger::log_line(const json_iterator &iter, const char *title_prefix, const char *title, std::string_view detail, int delta, int depth_delta) noexcept;
    +
    120  friend simdjson_inline void logger::log_line(const json_iterator &iter, token_position index, depth_t depth, const char *title_prefix, const char *title, std::string_view detail) noexcept;
    +
    121 };
    +
    122 
    +
    123 } // namespace ondemand
    +
    124 } // namespace SIMDJSON_IMPLEMENTATION
    +
    125 } // namespace simdjson
    +
    126 
    +
    127 namespace simdjson {
    +
    128 
    +
    129 template<>
    +
    130 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::token_iterator> {
    +
    131 public:
    +
    132  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value) noexcept;
    +
    133  simdjson_inline simdjson_result(error_code error) noexcept;
    +
    134  simdjson_inline simdjson_result() noexcept = default;
    +
    135  simdjson_inline ~simdjson_result() noexcept = default;
    +
    136 };
    +
    137 
    +
    138 } // namespace simdjson
    +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    +
    int32_t depth_t
    Represents the depth of a JSON value (number of nested arrays/objects).
    Definition: ondemand.h:11
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    + +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    simdjson_inline T & value() &noexcept(false)
    Get the result value.
    +
    +
    + + + + diff --git a/token__position_8h_source.html b/token__position_8h_source.html new file mode 100644 index 000000000..5ac1272eb --- /dev/null +++ b/token__position_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/token_position.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    token_position.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    6 using token_position = const uint32_t *;
    +
    7 
    +
    8 } // namespace ondemand
    +
    9 } // namespace SIMDJSON_IMPLEMENTATION
    +
    10 } // namespace simdjson
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/value-inl_8h_source.html b/value-inl_8h_source.html new file mode 100644 index 000000000..da3ae6fbb --- /dev/null +++ b/value-inl_8h_source.html @@ -0,0 +1,570 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/value-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    value-inl.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    5 simdjson_inline value::value(const value_iterator &_iter) noexcept
    +
    6  : iter{_iter}
    +
    7 {
    +
    8 }
    +
    9 simdjson_inline value value::start(const value_iterator &iter) noexcept {
    +
    10  return iter;
    +
    11 }
    +
    12 simdjson_inline value value::resume(const value_iterator &iter) noexcept {
    +
    13  return iter;
    +
    14 }
    +
    15 
    +
    16 simdjson_inline simdjson_result<array> value::get_array() noexcept {
    +
    17  return array::start(iter);
    +
    18 }
    +
    19 simdjson_inline simdjson_result<object> value::get_object() noexcept {
    +
    20  return object::start(iter);
    +
    21 }
    + +
    23  if (iter.at_start()) {
    +
    24  return get_object();
    +
    25  } else {
    +
    26  return object::resume(iter);
    +
    27  }
    +
    28 }
    +
    29 
    + +
    31  return iter.get_raw_json_string();
    +
    32 }
    + +
    34  return iter.get_string();
    +
    35 }
    +
    36 simdjson_inline simdjson_result<double> value::get_double() noexcept {
    +
    37  return iter.get_double();
    +
    38 }
    + +
    40  return iter.get_double_in_string();
    +
    41 }
    +
    42 simdjson_inline simdjson_result<uint64_t> value::get_uint64() noexcept {
    +
    43  return iter.get_uint64();
    +
    44 }
    + +
    46  return iter.get_uint64_in_string();
    +
    47 }
    +
    48 simdjson_inline simdjson_result<int64_t> value::get_int64() noexcept {
    +
    49  return iter.get_int64();
    +
    50 }
    + +
    52  return iter.get_int64_in_string();
    +
    53 }
    +
    54 simdjson_inline simdjson_result<bool> value::get_bool() noexcept {
    +
    55  return iter.get_bool();
    +
    56 }
    +
    57 simdjson_inline simdjson_result<bool> value::is_null() noexcept {
    +
    58  return iter.is_null();
    +
    59 }
    +
    60 template<> simdjson_inline simdjson_result<array> value::get() noexcept { return get_array(); }
    +
    61 template<> simdjson_inline simdjson_result<object> value::get() noexcept { return get_object(); }
    +
    62 template<> simdjson_inline simdjson_result<raw_json_string> value::get() noexcept { return get_raw_json_string(); }
    +
    63 template<> simdjson_inline simdjson_result<std::string_view> value::get() noexcept { return get_string(); }
    +
    64 template<> simdjson_inline simdjson_result<number> value::get() noexcept { return get_number(); }
    +
    65 template<> simdjson_inline simdjson_result<double> value::get() noexcept { return get_double(); }
    +
    66 template<> simdjson_inline simdjson_result<uint64_t> value::get() noexcept { return get_uint64(); }
    +
    67 template<> simdjson_inline simdjson_result<int64_t> value::get() noexcept { return get_int64(); }
    +
    68 template<> simdjson_inline simdjson_result<bool> value::get() noexcept { return get_bool(); }
    +
    69 
    +
    70 template<typename T> simdjson_inline error_code value::get(T &out) noexcept {
    +
    71  return get<T>().get(out);
    +
    72 }
    +
    73 
    +
    74 #if SIMDJSON_EXCEPTIONS
    +
    75 simdjson_inline value::operator array() noexcept(false) {
    +
    76  return get_array();
    +
    77 }
    +
    78 simdjson_inline value::operator object() noexcept(false) {
    +
    79  return get_object();
    +
    80 }
    +
    81 simdjson_inline value::operator uint64_t() noexcept(false) {
    +
    82  return get_uint64();
    +
    83 }
    +
    84 simdjson_inline value::operator int64_t() noexcept(false) {
    +
    85  return get_int64();
    +
    86 }
    +
    87 simdjson_inline value::operator double() noexcept(false) {
    +
    88  return get_double();
    +
    89 }
    +
    90 simdjson_inline value::operator std::string_view() noexcept(false) {
    +
    91  return get_string();
    +
    92 }
    +
    93 simdjson_inline value::operator raw_json_string() noexcept(false) {
    +
    94  return get_raw_json_string();
    +
    95 }
    +
    96 simdjson_inline value::operator bool() noexcept(false) {
    +
    97  return get_bool();
    +
    98 }
    +
    99 #endif
    +
    100 
    +
    101 simdjson_inline simdjson_result<array_iterator> value::begin() & noexcept {
    +
    102  return get_array().begin();
    +
    103 }
    +
    104 simdjson_inline simdjson_result<array_iterator> value::end() & noexcept {
    +
    105  return {};
    +
    106 }
    +
    107 simdjson_inline simdjson_result<size_t> value::count_elements() & noexcept {
    + +
    109  auto a = get_array();
    +
    110  answer = a.count_elements();
    +
    111  // count_elements leaves you pointing inside the array, at the first element.
    +
    112  // We need to move back so that the user can create a new array (which requires that
    +
    113  // we point at '[').
    +
    114  iter.move_at_start();
    +
    115  return answer;
    +
    116 }
    +
    117 simdjson_inline simdjson_result<size_t> value::count_fields() & noexcept {
    + +
    119  auto a = get_object();
    +
    120  answer = a.count_fields();
    +
    121  iter.move_at_start();
    +
    122  return answer;
    +
    123 }
    +
    124 simdjson_inline simdjson_result<value> value::at(size_t index) noexcept {
    +
    125  auto a = get_array();
    +
    126  return a.at(index);
    +
    127 }
    +
    128 
    +
    129 simdjson_inline simdjson_result<value> value::find_field(std::string_view key) noexcept {
    +
    130  return start_or_resume_object().find_field(key);
    +
    131 }
    +
    132 simdjson_inline simdjson_result<value> value::find_field(const char *key) noexcept {
    +
    133  return start_or_resume_object().find_field(key);
    +
    134 }
    +
    135 
    +
    136 simdjson_inline simdjson_result<value> value::find_field_unordered(std::string_view key) noexcept {
    +
    137  return start_or_resume_object().find_field_unordered(key);
    +
    138 }
    +
    139 simdjson_inline simdjson_result<value> value::find_field_unordered(const char *key) noexcept {
    +
    140  return start_or_resume_object().find_field_unordered(key);
    +
    141 }
    +
    142 
    +
    143 simdjson_inline simdjson_result<value> value::operator[](std::string_view key) noexcept {
    +
    144  return start_or_resume_object()[key];
    +
    145 }
    +
    146 simdjson_inline simdjson_result<value> value::operator[](const char *key) noexcept {
    +
    147  return start_or_resume_object()[key];
    +
    148 }
    +
    149 
    +
    150 simdjson_inline simdjson_result<json_type> value::type() noexcept {
    +
    151  return iter.type();
    +
    152 }
    +
    153 
    +
    154 simdjson_inline simdjson_result<bool> value::is_scalar() noexcept {
    +
    155  json_type this_type;
    +
    156  auto error = type().get(this_type);
    +
    157  if(error) { return error; }
    +
    158  return ! ((this_type == json_type::array) || (this_type == json_type::object));
    +
    159 }
    +
    160 
    +
    161 simdjson_inline bool value::is_negative() noexcept {
    +
    162  return iter.is_negative();
    +
    163 }
    +
    164 
    +
    165 simdjson_inline simdjson_result<bool> value::is_integer() noexcept {
    +
    166  return iter.is_integer();
    +
    167 }
    +
    168 simdjson_warn_unused simdjson_inline simdjson_result<number_type> value::get_number_type() noexcept {
    +
    169  return iter.get_number_type();
    +
    170 }
    +
    171 simdjson_warn_unused simdjson_inline simdjson_result<number> value::get_number() noexcept {
    +
    172  return iter.get_number();
    +
    173 }
    +
    174 
    +
    175 simdjson_inline std::string_view value::raw_json_token() noexcept {
    +
    176  return std::string_view(reinterpret_cast<const char*>(iter.peek_start()), iter.peek_start_length());
    +
    177 }
    +
    178 
    + +
    180  return iter.json_iter().current_location();
    +
    181 }
    +
    182 
    +
    183 simdjson_inline int32_t value::current_depth() const noexcept{
    +
    184  return iter.json_iter().depth();
    +
    185 }
    +
    186 
    +
    187 simdjson_inline simdjson_result<value> value::at_pointer(std::string_view json_pointer) noexcept {
    +
    188  json_type t;
    +
    189  SIMDJSON_TRY(type().get(t));
    +
    190  switch (t)
    +
    191  {
    +
    192  case json_type::array:
    +
    193  return (*this).get_array().at_pointer(json_pointer);
    +
    194  case json_type::object:
    +
    195  return (*this).get_object().at_pointer(json_pointer);
    +
    196  default:
    +
    197  return INVALID_JSON_POINTER;
    +
    198  }
    +
    199 }
    +
    200 
    +
    201 } // namespace ondemand
    +
    202 } // namespace SIMDJSON_IMPLEMENTATION
    +
    203 } // namespace simdjson
    +
    204 
    +
    205 namespace simdjson {
    +
    206 
    +
    207 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::simdjson_result(
    +
    208  SIMDJSON_IMPLEMENTATION::ondemand::value &&value
    +
    209 ) noexcept :
    +
    210  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value>(
    +
    211  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(value)
    +
    212  )
    +
    213 {
    +
    214 }
    +
    215 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::simdjson_result(
    +
    216  error_code error
    +
    217 ) noexcept :
    +
    218  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value>(error)
    +
    219 {
    +
    220 }
    +
    221 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::count_elements() & noexcept {
    +
    222  if (error()) { return error(); }
    +
    223  return first.count_elements();
    +
    224 }
    +
    225 simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::count_fields() & noexcept {
    +
    226  if (error()) { return error(); }
    +
    227  return first.count_fields();
    +
    228 }
    +
    229 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::at(size_t index) noexcept {
    +
    230  if (error()) { return error(); }
    +
    231  return first.at(index);
    +
    232 }
    +
    233 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::begin() & noexcept {
    +
    234  if (error()) { return error(); }
    +
    235  return first.begin();
    +
    236 }
    +
    237 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::end() & noexcept {
    +
    238  if (error()) { return error(); }
    +
    239  return {};
    +
    240 }
    +
    241 
    + +
    243  if (error()) { return error(); }
    +
    244  return first.find_field(key);
    +
    245 }
    + +
    247  if (error()) { return error(); }
    +
    248  return first.find_field(key);
    +
    249 }
    +
    250 
    + +
    252  if (error()) { return error(); }
    +
    253  return first.find_field_unordered(key);
    +
    254 }
    + +
    256  if (error()) { return error(); }
    +
    257  return first.find_field_unordered(key);
    +
    258 }
    +
    259 
    +
    260 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator[](std::string_view key) noexcept {
    +
    261  if (error()) { return error(); }
    +
    262  return first[key];
    +
    263 }
    +
    264 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator[](const char *key) noexcept {
    +
    265  if (error()) { return error(); }
    +
    266  return first[key];
    +
    267 }
    +
    268 
    +
    269 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_array() noexcept {
    +
    270  if (error()) { return error(); }
    +
    271  return first.get_array();
    +
    272 }
    +
    273 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_object() noexcept {
    +
    274  if (error()) { return error(); }
    +
    275  return first.get_object();
    +
    276 }
    +
    277 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_uint64() noexcept {
    +
    278  if (error()) { return error(); }
    +
    279  return first.get_uint64();
    +
    280 }
    +
    281 simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_uint64_in_string() noexcept {
    +
    282  if (error()) { return error(); }
    +
    283  return first.get_uint64_in_string();
    +
    284 }
    +
    285 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_int64() noexcept {
    +
    286  if (error()) { return error(); }
    +
    287  return first.get_int64();
    +
    288 }
    +
    289 simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_int64_in_string() noexcept {
    +
    290  if (error()) { return error(); }
    +
    291  return first.get_int64_in_string();
    +
    292 }
    +
    293 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_double() noexcept {
    +
    294  if (error()) { return error(); }
    +
    295  return first.get_double();
    +
    296 }
    +
    297 simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_double_in_string() noexcept {
    +
    298  if (error()) { return error(); }
    +
    299  return first.get_double_in_string();
    +
    300 }
    +
    301 simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_string() noexcept {
    +
    302  if (error()) { return error(); }
    +
    303  return first.get_string();
    +
    304 }
    +
    305 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_raw_json_string() noexcept {
    +
    306  if (error()) { return error(); }
    +
    307  return first.get_raw_json_string();
    +
    308 }
    +
    309 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_bool() noexcept {
    +
    310  if (error()) { return error(); }
    +
    311  return first.get_bool();
    +
    312 }
    +
    313 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_null() noexcept {
    +
    314  if (error()) { return error(); }
    +
    315  return first.is_null();
    +
    316 }
    +
    317 
    +
    318 template<typename T> simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get() noexcept {
    +
    319  if (error()) { return error(); }
    +
    320  return first.get<T>();
    +
    321 }
    +
    322 template<typename T> simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get(T &out) noexcept {
    +
    323  if (error()) { return error(); }
    +
    324  return first.get<T>(out);
    +
    325 }
    +
    326 
    +
    327 template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get<SIMDJSON_IMPLEMENTATION::ondemand::value>() noexcept {
    +
    328  if (error()) { return error(); }
    +
    329  return std::move(first);
    +
    330 }
    +
    331 template<> simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get<SIMDJSON_IMPLEMENTATION::ondemand::value>(SIMDJSON_IMPLEMENTATION::ondemand::value &out) noexcept {
    +
    332  if (error()) { return error(); }
    +
    333  out = first;
    +
    334  return SUCCESS;
    +
    335 }
    +
    336 
    + +
    338  if (error()) { return error(); }
    +
    339  return first.type();
    +
    340 }
    + +
    342  if (error()) { return error(); }
    +
    343  return first.is_scalar();
    +
    344 }
    +
    345 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_negative() noexcept {
    +
    346  if (error()) { return error(); }
    +
    347  return first.is_negative();
    +
    348 }
    +
    349 simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_integer() noexcept {
    +
    350  if (error()) { return error(); }
    +
    351  return first.is_integer();
    +
    352 }
    +
    353 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_number_type() noexcept {
    +
    354  if (error()) { return error(); }
    +
    355  return first.get_number_type();
    +
    356 }
    +
    357 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_number() noexcept {
    +
    358  if (error()) { return error(); }
    +
    359  return first.get_number();
    +
    360 }
    +
    361 #if SIMDJSON_EXCEPTIONS
    +
    362 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::array() noexcept(false) {
    +
    363  if (error()) { throw simdjson_error(error()); }
    +
    364  return first;
    +
    365 }
    +
    366 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::object() noexcept(false) {
    +
    367  if (error()) { throw simdjson_error(error()); }
    +
    368  return first;
    +
    369 }
    +
    370 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator uint64_t() noexcept(false) {
    +
    371  if (error()) { throw simdjson_error(error()); }
    +
    372  return first;
    +
    373 }
    +
    374 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator int64_t() noexcept(false) {
    +
    375  if (error()) { throw simdjson_error(error()); }
    +
    376  return first;
    +
    377 }
    +
    378 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator double() noexcept(false) {
    +
    379  if (error()) { throw simdjson_error(error()); }
    +
    380  return first;
    +
    381 }
    +
    382 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator std::string_view() noexcept(false) {
    +
    383  if (error()) { throw simdjson_error(error()); }
    +
    384  return first;
    +
    385 }
    +
    386 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) {
    +
    387  if (error()) { throw simdjson_error(error()); }
    +
    388  return first;
    +
    389 }
    +
    390 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator bool() noexcept(false) {
    +
    391  if (error()) { throw simdjson_error(error()); }
    +
    392  return first;
    +
    393 }
    +
    394 #endif
    +
    395 
    + +
    397  if (error()) { return error(); }
    +
    398  return first.raw_json_token();
    +
    399 }
    +
    400 
    + +
    402  if (error()) { return error(); }
    +
    403  return first.current_location();
    +
    404 }
    +
    405 
    + +
    407  if (error()) { return error(); }
    +
    408  return first.current_depth();
    +
    409 }
    +
    410 
    + +
    412  if (error()) { return error(); }
    +
    413  return first.at_pointer(json_pointer);
    +
    414 }
    +
    415 
    +
    416 } // namespace simdjson
    + +
    static simdjson_inline simdjson_result< array > start(value_iterator &iter) noexcept
    Begin array iteration.
    Definition: array-inl.h:48
    +
    A forward-only JSON object field iterator.
    Definition: object.h:10
    +
    A string escaped per JSON rules, terminated with quote (").
    +
    An ephemeral JSON value returned during iteration.
    Definition: value.h:17
    +
    static simdjson_inline value start(const value_iterator &iter) noexcept
    Start a value at the current position.
    Definition: value-inl.h:9
    +
    simdjson_inline simdjson_result< bool > is_null() noexcept
    Checks if this JSON value is null.
    Definition: value-inl.h:57
    +
    simdjson_inline simdjson_result< const char * > current_location() noexcept
    Returns the current location in the document if in bounds.
    Definition: value-inl.h:179
    +
    simdjson_inline simdjson_result< value > find_field(std::string_view key) noexcept
    Look up a field by name on an object (order-sensitive).
    Definition: value-inl.h:129
    +
    simdjson_inline bool is_negative() noexcept
    Checks whether the value is a negative number.
    Definition: value-inl.h:161
    +
    simdjson_inline simdjson_result< number_type > get_number_type() noexcept
    Determine the number type (integer or floating-point number) as quickly as possible.
    Definition: value-inl.h:168
    +
    simdjson_inline simdjson_result< array > get_array() noexcept
    Cast this JSON value to an array.
    Definition: value-inl.h:16
    +
    simdjson_inline std::string_view raw_json_token() noexcept
    Get the raw JSON for this token.
    Definition: value-inl.h:175
    +
    simdjson_inline simdjson_result< object > get_object() noexcept
    Cast this JSON value to an object.
    Definition: value-inl.h:19
    +
    simdjson_inline simdjson_result< size_t > count_elements() &noexcept
    This method scans the array and counts the number of elements.
    Definition: value-inl.h:107
    +
    simdjson_inline simdjson_result< int64_t > get_int64_in_string() noexcept
    Cast this JSON value (inside string) to a signed integer.
    Definition: value-inl.h:51
    +
    simdjson_inline simdjson_result< size_t > count_fields() &noexcept
    This method scans the object and counts the number of key-value pairs.
    Definition: value-inl.h:117
    +
    simdjson_inline simdjson_result< bool > is_integer() noexcept
    Checks whether the value is an integer number.
    Definition: value-inl.h:165
    +
    simdjson_inline simdjson_result< array_iterator > end() &noexcept
    Sentinel representing the end of the array.
    Definition: value-inl.h:104
    +
    simdjson_inline simdjson_result< object > start_or_resume_object() noexcept
    Get the object, starting or resuming it as necessary.
    Definition: value-inl.h:22
    +
    simdjson_inline simdjson_result< array_iterator > begin() &noexcept
    Begin array iteration.
    Definition: value-inl.h:101
    +
    simdjson_inline simdjson_result< uint64_t > get_uint64_in_string() noexcept
    Cast this JSON value (inside string) to a unsigned integer.
    Definition: value-inl.h:45
    +
    simdjson_inline int32_t current_depth() const noexcept
    Returns the current depth in the document if in bounds.
    Definition: value-inl.h:183
    +
    simdjson_inline simdjson_result< bool > is_scalar() noexcept
    Checks whether the value is a scalar (string, number, null, Boolean).
    Definition: value-inl.h:154
    +
    simdjson_inline simdjson_result< T > get() noexcept
    Get this value as the given type.
    Definition: value.h:37
    +
    simdjson_inline simdjson_result< std::string_view > get_string() noexcept
    Cast this JSON value to a string.
    Definition: value-inl.h:33
    +
    static simdjson_inline value resume(const value_iterator &iter) noexcept
    Resume a value.
    Definition: value-inl.h:12
    +
    simdjson_inline simdjson_result< double > get_double() noexcept
    Cast this JSON value to a double.
    Definition: value-inl.h:36
    +
    simdjson_inline simdjson_result< bool > get_bool() noexcept
    Cast this JSON value to a bool.
    Definition: value-inl.h:54
    +
    simdjson_warn_unused simdjson_inline simdjson_result< number > get_number() noexcept
    Attempt to parse an ondemand::number.
    Definition: value-inl.h:171
    +
    simdjson_inline simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
    Get the value associated with the given JSON pointer.
    Definition: value-inl.h:187
    +
    simdjson_inline simdjson_result< int64_t > get_int64() noexcept
    Cast this JSON value to a signed integer.
    Definition: value-inl.h:48
    +
    simdjson_inline value() noexcept=default
    Create a new invalid value.
    +
    simdjson_inline simdjson_result< json_type > type() noexcept
    Get the type of this JSON value.
    Definition: value-inl.h:150
    +
    simdjson_inline simdjson_result< double > get_double_in_string() noexcept
    Cast this JSON value (inside string) to a double.
    Definition: value-inl.h:39
    +
    simdjson_inline simdjson_result< raw_json_string > get_raw_json_string() noexcept
    Cast this JSON value to a raw_json_string.
    Definition: value-inl.h:30
    +
    simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) noexcept
    Look up a field by name on an object, without regard to key order.
    Definition: value-inl.h:136
    +
    simdjson_inline simdjson_result< value > at(size_t index) noexcept
    Get the value at the given index in the array.
    Definition: value-inl.h:124
    +
    simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
    Cast this JSON value to an unsigned integer.
    Definition: value-inl.h:42
    +
    json_type
    The type of a JSON value.
    Definition: json_type.h:7
    +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    + +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    @ SUCCESS
    No error.
    Definition: error.h:18
    +
    @ INVALID_JSON_POINTER
    Invalid JSON pointer reference.
    Definition: error.h:39
    + + +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
    Move the value to the provided variable.
    Definition: error-inl.h:127
    +
    +
    + + + + diff --git a/value_8h_source.html b/value_8h_source.html new file mode 100644 index 000000000..3d969fa82 --- /dev/null +++ b/value_8h_source.html @@ -0,0 +1,347 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/value.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    value.h
    +
    +
    +
    1 #include "simdjson/error.h"
    +
    2 
    +
    3 namespace simdjson {
    +
    4 namespace SIMDJSON_IMPLEMENTATION {
    +
    5 namespace ondemand {
    +
    6 
    +
    7 class array;
    +
    8 class document;
    +
    9 class field;
    +
    10 class object;
    +
    11 class raw_json_string;
    +
    12 
    +
    17 class value {
    +
    18 public:
    +
    24  simdjson_inline value() noexcept = default;
    +
    25 
    +
    37  template<typename T> simdjson_inline simdjson_result<T> get() noexcept {
    +
    38  // Unless the simdjson library provides an inline implementation, calling this method should
    +
    39  // immediately fail.
    +
    40  static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library.");
    +
    41  }
    +
    42 
    +
    52  template<typename T> simdjson_inline error_code get(T &out) noexcept;
    +
    53 
    +
    60  simdjson_inline simdjson_result<array> get_array() noexcept;
    +
    61 
    +
    68  simdjson_inline simdjson_result<object> get_object() noexcept;
    +
    69 
    +
    76  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
    +
    77 
    +
    84  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
    +
    85 
    +
    92  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
    +
    93 
    +
    100  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
    +
    101 
    +
    108  simdjson_inline simdjson_result<double> get_double() noexcept;
    +
    109 
    +
    116  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
    +
    117 
    +
    132  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
    +
    133 
    +
    142  simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
    +
    143 
    +
    150  simdjson_inline simdjson_result<bool> get_bool() noexcept;
    +
    151 
    +
    160  simdjson_inline simdjson_result<bool> is_null() noexcept;
    +
    161 
    +
    162 #if SIMDJSON_EXCEPTIONS
    +
    169  simdjson_inline operator array() noexcept(false);
    +
    176  simdjson_inline operator object() noexcept(false);
    +
    183  simdjson_inline operator uint64_t() noexcept(false);
    +
    190  simdjson_inline operator int64_t() noexcept(false);
    +
    197  simdjson_inline operator double() noexcept(false);
    +
    209  simdjson_inline operator std::string_view() noexcept(false);
    +
    218  simdjson_inline operator raw_json_string() noexcept(false);
    +
    225  simdjson_inline operator bool() noexcept(false);
    +
    226 #endif
    +
    227 
    +
    235  simdjson_inline simdjson_result<array_iterator> begin() & noexcept;
    +
    241  simdjson_inline simdjson_result<array_iterator> end() & noexcept;
    +
    256  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
    +
    274  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
    +
    282  simdjson_inline simdjson_result<value> at(size_t index) noexcept;
    +
    305  simdjson_inline simdjson_result<value> find_field(std::string_view key) noexcept;
    +
    307  simdjson_inline simdjson_result<value> find_field(const char *key) noexcept;
    +
    308 
    +
    331  simdjson_inline simdjson_result<value> find_field_unordered(std::string_view key) noexcept;
    +
    333  simdjson_inline simdjson_result<value> find_field_unordered(const char *key) noexcept;
    +
    335  simdjson_inline simdjson_result<value> operator[](std::string_view key) noexcept;
    +
    337  simdjson_inline simdjson_result<value> operator[](const char *key) noexcept;
    +
    338 
    +
    352  simdjson_inline simdjson_result<json_type> type() noexcept;
    +
    353 
    +
    361  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
    +
    362 
    +
    368  simdjson_inline bool is_negative() noexcept;
    +
    382  simdjson_inline simdjson_result<bool> is_integer() noexcept;
    +
    405  simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
    +
    406 
    +
    437  simdjson_warn_unused simdjson_inline simdjson_result<number> get_number() noexcept;
    +
    438 
    +
    439 
    +
    463  simdjson_inline std::string_view raw_json_token() noexcept;
    +
    464 
    +
    468  simdjson_inline simdjson_result<const char *> current_location() noexcept;
    +
    469 
    +
    479  simdjson_inline int32_t current_depth() const noexcept;
    +
    480 
    +
    523  simdjson_inline simdjson_result<value> at_pointer(std::string_view json_pointer) noexcept;
    +
    524 
    +
    525 protected:
    +
    529  simdjson_inline value(const value_iterator &iter) noexcept;
    +
    530 
    +
    534  simdjson_inline void skip() noexcept;
    +
    535 
    +
    541  static simdjson_inline value start(const value_iterator &iter) noexcept;
    +
    542 
    +
    546  static simdjson_inline value resume(const value_iterator &iter) noexcept;
    +
    547 
    +
    551  simdjson_inline simdjson_result<object> start_or_resume_object() noexcept;
    +
    552 
    +
    553  // simdjson_inline void log_value(const char *type) const noexcept;
    +
    554  // simdjson_inline void log_error(const char *message) const noexcept;
    +
    555 
    +
    556  value_iterator iter{};
    +
    557 
    +
    558  friend class document;
    +
    559  friend class array_iterator;
    +
    560  friend class field;
    +
    561  friend class object;
    +
    562  friend struct simdjson_result<value>;
    +
    563  friend struct simdjson_result<field>;
    +
    564 };
    +
    565 
    +
    566 } // namespace ondemand
    +
    567 } // namespace SIMDJSON_IMPLEMENTATION
    +
    568 } // namespace simdjson
    +
    569 
    +
    570 namespace simdjson {
    +
    571 
    +
    572 template<>
    +
    573 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value> {
    +
    574 public:
    + +
    576  simdjson_inline simdjson_result(error_code error) noexcept;
    +
    577  simdjson_inline simdjson_result() noexcept = default;
    +
    578 
    +
    579  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> get_array() noexcept;
    +
    580  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> get_object() noexcept;
    +
    581 
    +
    582  simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
    +
    583  simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
    +
    584  simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
    +
    585  simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
    +
    586  simdjson_inline simdjson_result<double> get_double() noexcept;
    +
    587  simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
    +
    588  simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
    +
    589  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> get_raw_json_string() noexcept;
    +
    590  simdjson_inline simdjson_result<bool> get_bool() noexcept;
    +
    591  simdjson_inline simdjson_result<bool> is_null() noexcept;
    +
    592 
    +
    593  template<typename T> simdjson_inline simdjson_result<T> get() noexcept;
    +
    594 
    +
    595  template<typename T> simdjson_inline error_code get(T &out) noexcept;
    +
    596 
    +
    597 #if SIMDJSON_EXCEPTIONS
    +
    598  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::array() noexcept(false);
    +
    599  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::object() noexcept(false);
    +
    600  simdjson_inline operator uint64_t() noexcept(false);
    +
    601  simdjson_inline operator int64_t() noexcept(false);
    +
    602  simdjson_inline operator double() noexcept(false);
    +
    603  simdjson_inline operator std::string_view() noexcept(false);
    +
    604  simdjson_inline operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false);
    +
    605  simdjson_inline operator bool() noexcept(false);
    +
    606 #endif
    +
    607  simdjson_inline simdjson_result<size_t> count_elements() & noexcept;
    +
    608  simdjson_inline simdjson_result<size_t> count_fields() & noexcept;
    +
    609  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at(size_t index) noexcept;
    + + +
    612 
    +
    633  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(std::string_view key) noexcept;
    +
    635  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field(const char *key) noexcept;
    +
    636 
    +
    656  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(std::string_view key) noexcept;
    +
    658  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> find_field_unordered(const char *key) noexcept;
    +
    660  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](std::string_view key) noexcept;
    +
    662  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> operator[](const char *key) noexcept;
    +
    663 
    + +
    672  simdjson_inline simdjson_result<bool> is_scalar() noexcept;
    +
    673  simdjson_inline simdjson_result<bool> is_negative() noexcept;
    +
    674  simdjson_inline simdjson_result<bool> is_integer() noexcept;
    +
    675  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> get_number_type() noexcept;
    +
    676  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> get_number() noexcept;
    +
    677 
    +
    679  simdjson_inline simdjson_result<std::string_view> raw_json_token() noexcept;
    +
    680 
    +
    682  simdjson_inline simdjson_result<const char *> current_location() noexcept;
    +
    684  simdjson_inline simdjson_result<int32_t> current_depth() const noexcept;
    +
    685  simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> at_pointer(std::string_view json_pointer) noexcept;
    +
    686 };
    +
    687 
    +
    688 } // namespace simdjson
    + + + +
    A JSON field (key/value pair) in an object.
    Definition: field.h:14
    +
    A forward-only JSON object field iterator.
    Definition: object.h:10
    +
    A string escaped per JSON rules, terminated with quote (").
    +
    An ephemeral JSON value returned during iteration.
    Definition: value.h:17
    +
    static simdjson_inline value start(const value_iterator &iter) noexcept
    Start a value at the current position.
    Definition: value-inl.h:9
    +
    simdjson_inline simdjson_result< bool > is_null() noexcept
    Checks if this JSON value is null.
    Definition: value-inl.h:57
    +
    simdjson_inline simdjson_result< const char * > current_location() noexcept
    Returns the current location in the document if in bounds.
    Definition: value-inl.h:179
    +
    simdjson_inline simdjson_result< value > find_field(std::string_view key) noexcept
    Look up a field by name on an object (order-sensitive).
    Definition: value-inl.h:129
    +
    simdjson_inline bool is_negative() noexcept
    Checks whether the value is a negative number.
    Definition: value-inl.h:161
    +
    simdjson_inline simdjson_result< number_type > get_number_type() noexcept
    Determine the number type (integer or floating-point number) as quickly as possible.
    Definition: value-inl.h:168
    +
    simdjson_inline simdjson_result< array > get_array() noexcept
    Cast this JSON value to an array.
    Definition: value-inl.h:16
    +
    simdjson_inline std::string_view raw_json_token() noexcept
    Get the raw JSON for this token.
    Definition: value-inl.h:175
    +
    simdjson_inline simdjson_result< object > get_object() noexcept
    Cast this JSON value to an object.
    Definition: value-inl.h:19
    +
    simdjson_inline simdjson_result< size_t > count_elements() &noexcept
    This method scans the array and counts the number of elements.
    Definition: value-inl.h:107
    +
    simdjson_inline simdjson_result< int64_t > get_int64_in_string() noexcept
    Cast this JSON value (inside string) to a signed integer.
    Definition: value-inl.h:51
    +
    simdjson_inline simdjson_result< size_t > count_fields() &noexcept
    This method scans the object and counts the number of key-value pairs.
    Definition: value-inl.h:117
    +
    simdjson_inline simdjson_result< bool > is_integer() noexcept
    Checks whether the value is an integer number.
    Definition: value-inl.h:165
    +
    simdjson_inline simdjson_result< array_iterator > end() &noexcept
    Sentinel representing the end of the array.
    Definition: value-inl.h:104
    +
    simdjson_inline simdjson_result< object > start_or_resume_object() noexcept
    Get the object, starting or resuming it as necessary.
    Definition: value-inl.h:22
    +
    simdjson_inline simdjson_result< array_iterator > begin() &noexcept
    Begin array iteration.
    Definition: value-inl.h:101
    +
    simdjson_inline simdjson_result< uint64_t > get_uint64_in_string() noexcept
    Cast this JSON value (inside string) to a unsigned integer.
    Definition: value-inl.h:45
    +
    simdjson_inline int32_t current_depth() const noexcept
    Returns the current depth in the document if in bounds.
    Definition: value-inl.h:183
    +
    simdjson_inline simdjson_result< bool > is_scalar() noexcept
    Checks whether the value is a scalar (string, number, null, Boolean).
    Definition: value-inl.h:154
    +
    simdjson_inline simdjson_result< T > get() noexcept
    Get this value as the given type.
    Definition: value.h:37
    +
    simdjson_inline simdjson_result< std::string_view > get_string() noexcept
    Cast this JSON value to a string.
    Definition: value-inl.h:33
    +
    static simdjson_inline value resume(const value_iterator &iter) noexcept
    Resume a value.
    Definition: value-inl.h:12
    +
    simdjson_inline simdjson_result< double > get_double() noexcept
    Cast this JSON value to a double.
    Definition: value-inl.h:36
    +
    simdjson_inline simdjson_result< bool > get_bool() noexcept
    Cast this JSON value to a bool.
    Definition: value-inl.h:54
    +
    simdjson_warn_unused simdjson_inline simdjson_result< number > get_number() noexcept
    Attempt to parse an ondemand::number.
    Definition: value-inl.h:171
    +
    simdjson_inline simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
    Get the value associated with the given JSON pointer.
    Definition: value-inl.h:187
    +
    simdjson_inline simdjson_result< int64_t > get_int64() noexcept
    Cast this JSON value to a signed integer.
    Definition: value-inl.h:48
    +
    simdjson_inline value() noexcept=default
    Create a new invalid value.
    +
    simdjson_inline simdjson_result< json_type > type() noexcept
    Get the type of this JSON value.
    Definition: value-inl.h:150
    +
    simdjson_inline simdjson_result< double > get_double_in_string() noexcept
    Cast this JSON value (inside string) to a double.
    Definition: value-inl.h:39
    +
    simdjson_inline simdjson_result< raw_json_string > get_raw_json_string() noexcept
    Cast this JSON value to a raw_json_string.
    Definition: value-inl.h:30
    +
    simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) noexcept
    Look up a field by name on an object, without regard to key order.
    Definition: value-inl.h:136
    +
    simdjson_inline simdjson_result< value > at(size_t index) noexcept
    Get the value at the given index in the array.
    Definition: value-inl.h:124
    +
    simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
    Cast this JSON value to an unsigned integer.
    Definition: value-inl.h:42
    +
    simdjson_inline void skip() noexcept
    Skip this value, allowing iteration to continue.
    + +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    + +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    + +
    A type representing a JSON number.
    Definition: json_type.h:24
    + + + + + + +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    simdjson_inline error_code error() const noexcept
    The error.
    Definition: error-inl.h:132
    +
    simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
    Move the value to the provided variable.
    Definition: error-inl.h:127
    +
    simdjson_inline T & value() &noexcept(false)
    Get the result value.
    +
    +
    + + + + diff --git a/value__iterator-inl_8h_source.html b/value__iterator-inl_8h_source.html new file mode 100644 index 000000000..c1f392052 --- /dev/null +++ b/value__iterator-inl_8h_source.html @@ -0,0 +1,1115 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/value_iterator-inl.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    value_iterator-inl.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    5 simdjson_inline value_iterator::value_iterator(
    +
    6  json_iterator *json_iter,
    +
    7  depth_t depth,
    +
    8  token_position start_position
    +
    9 ) noexcept : _json_iter{json_iter}, _depth{depth}, _start_position{start_position}
    +
    10 {
    +
    11 }
    +
    12 
    +
    13 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::start_object() noexcept {
    +
    14  SIMDJSON_TRY( start_container('{', "Not an object", "object") );
    +
    15  return started_object();
    +
    16 }
    +
    17 
    +
    18 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::start_root_object() noexcept {
    +
    19  SIMDJSON_TRY( start_container('{', "Not an object", "object") );
    +
    20  return started_root_object();
    +
    21 }
    +
    22 
    +
    23 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::started_object() noexcept {
    +
    24  assert_at_container_start();
    +
    25 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    26  _json_iter->set_start_position(_depth, start_position());
    +
    27 #endif
    +
    28  if (*_json_iter->peek() == '}') {
    +
    29  logger::log_value(*_json_iter, "empty object");
    +
    30  _json_iter->return_current_and_advance();
    +
    31  end_container();
    +
    32  return false;
    +
    33  }
    +
    34  return true;
    +
    35 }
    +
    36 
    +
    37 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::started_root_object() noexcept {
    +
    38  // When in streaming mode, we cannot expect peek_last() to be the last structural element of the
    +
    39  // current document. It only works in the normal mode where we have indexed a single document.
    +
    40  // Note that adding a check for 'streaming' is not expensive since we only have at most
    +
    41  // one root element.
    +
    42  if ( ! _json_iter->streaming() ) {
    +
    43  if (*_json_iter->peek_last() != '}') {
    +
    44  _json_iter->abandon();
    +
    45  return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "missing } at end");
    +
    46  }
    +
    47  // If the last character is } *and* the first gibberish character is also '}'
    +
    48  // then on-demand could accidentally go over. So we need additional checks.
    +
    49  // https://github.com/simdjson/simdjson/issues/1834
    +
    50  // Checking that the document is balanced requires a full scan which is potentially
    +
    51  // expensive, but it only happens in edge cases where the first padding character is
    +
    52  // a closing bracket.
    +
    53  if ((*_json_iter->peek(_json_iter->end_position()) == '}') && (!_json_iter->balanced())) {
    +
    54  _json_iter->abandon();
    +
    55  // The exact error would require more work. It will typically be an unclosed object.
    +
    56  return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "the document is unbalanced");
    +
    57  }
    +
    58  }
    +
    59  return started_object();
    +
    60 }
    +
    61 
    +
    62 simdjson_warn_unused simdjson_inline error_code value_iterator::end_container() noexcept {
    +
    63 #if SIMDJSON_CHECK_EOF
    +
    64  if (depth() > 1 && at_end()) { return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "missing parent ] or }"); }
    +
    65  // if (depth() <= 1 && !at_end()) { return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "missing [ or { at start"); }
    +
    66 #endif // SIMDJSON_CHECK_EOF
    +
    67  _json_iter->ascend_to(depth()-1);
    +
    68  return SUCCESS;
    +
    69 }
    +
    70 
    +
    71 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::has_next_field() noexcept {
    +
    72  assert_at_next();
    +
    73 
    +
    74  // It's illegal to call this unless there are more tokens: anything that ends in } or ] is
    +
    75  // obligated to verify there are more tokens if they are not the top level.
    +
    76  switch (*_json_iter->return_current_and_advance()) {
    +
    77  case '}':
    +
    78  logger::log_end_value(*_json_iter, "object");
    +
    79  SIMDJSON_TRY( end_container() );
    +
    80  return false;
    +
    81  case ',':
    +
    82  return true;
    +
    83  default:
    +
    84  return report_error(TAPE_ERROR, "Missing comma between object fields");
    +
    85  }
    +
    86 }
    +
    87 
    +
    88 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::find_field_raw(const std::string_view key) noexcept {
    +
    89  error_code error;
    +
    90  bool has_value;
    +
    91  //
    +
    92  // Initially, the object can be in one of a few different places:
    +
    93  //
    +
    94  // 1. The start of the object, at the first field:
    +
    95  //
    +
    96  // ```
    +
    97  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    98  // ^ (depth 2, index 1)
    +
    99  // ```
    +
    100  if (at_first_field()) {
    +
    101  has_value = true;
    +
    102 
    +
    103  //
    +
    104  // 2. When a previous search did not yield a value or the object is empty:
    +
    105  //
    +
    106  // ```
    +
    107  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    108  // ^ (depth 0)
    +
    109  // { }
    +
    110  // ^ (depth 0, index 2)
    +
    111  // ```
    +
    112  //
    +
    113  } else if (!is_open()) {
    +
    114 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    115  // If we're past the end of the object, we're being iterated out of order.
    +
    116  // Note: this isn't perfect detection. It's possible the user is inside some other object; if so,
    +
    117  // this object iterator will blithely scan that object for fields.
    +
    118  if (_json_iter->depth() < depth() - 1) { return OUT_OF_ORDER_ITERATION; }
    +
    119 #endif
    +
    120  return false;
    +
    121 
    +
    122  // 3. When a previous search found a field or an iterator yielded a value:
    +
    123  //
    +
    124  // ```
    +
    125  // // When a field was not fully consumed (or not even touched at all)
    +
    126  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    127  // ^ (depth 2)
    +
    128  // // When a field was fully consumed
    +
    129  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    130  // ^ (depth 1)
    +
    131  // // When the last field was fully consumed
    +
    132  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    133  // ^ (depth 1)
    +
    134  // ```
    +
    135  //
    +
    136  } else {
    +
    137  if ((error = skip_child() )) { abandon(); return error; }
    +
    138  if ((error = has_next_field().get(has_value) )) { abandon(); return error; }
    +
    139 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    140  if (_json_iter->start_position(_depth) != start_position()) { return OUT_OF_ORDER_ITERATION; }
    +
    141 #endif
    +
    142  }
    +
    143  while (has_value) {
    +
    144  // Get the key and colon, stopping at the value.
    +
    145  raw_json_string actual_key;
    +
    146  // size_t max_key_length = _json_iter->peek_length() - 2; // -2 for the two quotes
    +
    147  // Note: _json_iter->peek_length() - 2 might overflow if _json_iter->peek_length() < 2.
    +
    148  // field_key() advances the pointer and checks that '"' is found (corresponding to a key).
    +
    149  // The depth is left unchanged by field_key().
    +
    150  if ((error = field_key().get(actual_key) )) { abandon(); return error; };
    +
    151  // field_value() will advance and check that we find a ':' separating the
    +
    152  // key and the value. It will also increment the depth by one.
    +
    153  if ((error = field_value() )) { abandon(); return error; }
    +
    154  // If it matches, stop and return
    +
    155  // We could do it this way if we wanted to allow arbitrary
    +
    156  // key content (including escaped quotes).
    +
    157  //if (actual_key.unsafe_is_equal(max_key_length, key)) {
    +
    158  // Instead we do the following which may trigger buffer overruns if the
    +
    159  // user provides an adversarial key (containing a well placed unescaped quote
    +
    160  // character and being longer than the number of bytes remaining in the JSON
    +
    161  // input).
    +
    162  if (actual_key.unsafe_is_equal(key)) {
    +
    163  logger::log_event(*this, "match", key, -2);
    +
    164  // If we return here, then we return while pointing at the ':' that we just checked.
    +
    165  return true;
    +
    166  }
    +
    167 
    +
    168  // No match: skip the value and see if , or } is next
    +
    169  logger::log_event(*this, "no match", key, -2);
    +
    170  // The call to skip_child is meant to skip over the value corresponding to the key.
    +
    171  // After skip_child(), we are right before the next comma (',') or the final brace ('}').
    +
    172  SIMDJSON_TRY( skip_child() ); // Skip the value entirely
    +
    173  // The has_next_field() advances the pointer and check that either ',' or '}' is found.
    +
    174  // It returns true if ',' is found, false otherwise. If anything other than ',' or '}' is found,
    +
    175  // then we are in error and we abort.
    +
    176  if ((error = has_next_field().get(has_value) )) { abandon(); return error; }
    +
    177  }
    +
    178 
    +
    179  // If the loop ended, we're out of fields to look at.
    +
    180  return false;
    +
    181 }
    +
    182 
    +
    183 SIMDJSON_PUSH_DISABLE_WARNINGS
    +
    184 SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
    +
    185 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::find_field_unordered_raw(const std::string_view key) noexcept {
    +
    193  error_code error;
    +
    194  bool has_value;
    +
    195 
    +
    196  // First, we scan from that point to the end.
    +
    197  // If we don't find a match, we may loop back around, and scan from the beginning to that point.
    +
    198  token_position search_start = _json_iter->position();
    +
    199 
    +
    200  // We want to know whether we need to go back to the beginning.
    +
    201  bool at_first = at_first_field();
    +
    203  // Initially, the object can be in one of a few different places:
    +
    204  //
    +
    205  // 1. At the first key:
    +
    206  //
    +
    207  // ```
    +
    208  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    209  // ^ (depth 2, index 1)
    +
    210  // ```
    +
    211  //
    +
    212  if (at_first) {
    +
    213  has_value = true;
    +
    214 
    +
    215  // 2. When a previous search did not yield a value or the object is empty:
    +
    216  //
    +
    217  // ```
    +
    218  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    219  // ^ (depth 0)
    +
    220  // { }
    +
    221  // ^ (depth 0, index 2)
    +
    222  // ```
    +
    223  //
    +
    224  } else if (!is_open()) {
    +
    225 
    +
    226 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    227  // If we're past the end of the object, we're being iterated out of order.
    +
    228  // Note: this isn't perfect detection. It's possible the user is inside some other object; if so,
    +
    229  // this object iterator will blithely scan that object for fields.
    +
    230  if (_json_iter->depth() < depth() - 1) { return OUT_OF_ORDER_ITERATION; }
    +
    231 #endif
    +
    232  SIMDJSON_TRY(reset_object().get(has_value));
    +
    233  at_first = true;
    +
    234  // 3. When a previous search found a field or an iterator yielded a value:
    +
    235  //
    +
    236  // ```
    +
    237  // // When a field was not fully consumed (or not even touched at all)
    +
    238  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    239  // ^ (depth 2)
    +
    240  // // When a field was fully consumed
    +
    241  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    242  // ^ (depth 1)
    +
    243  // // When the last field was fully consumed
    +
    244  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    245  // ^ (depth 1)
    +
    246  // ```
    +
    247  //
    +
    248  } else {
    +
    249  // If someone queried a key but they not did access the value, then we are left pointing
    +
    250  // at the ':' and we need to move forward through the value... If the value was
    +
    251  // processed then skip_child() does not move the iterator (but may adjust the depth).
    +
    252  if ((error = skip_child() )) { abandon(); return error; }
    +
    253  search_start = _json_iter->position();
    +
    254  if ((error = has_next_field().get(has_value) )) { abandon(); return error; }
    +
    255 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    256  if (_json_iter->start_position(_depth) != start_position()) { return OUT_OF_ORDER_ITERATION; }
    +
    257 #endif
    +
    258  }
    +
    259 
    +
    260  // After initial processing, we will be in one of two states:
    +
    261  //
    +
    262  // ```
    +
    263  // // At the beginning of a field
    +
    264  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    265  // ^ (depth 1)
    +
    266  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    267  // ^ (depth 1)
    +
    268  // // At the end of the object
    +
    269  // { "a": [ 1, 2 ], "b": [ 3, 4 ] }
    +
    270  // ^ (depth 0)
    +
    271  // ```
    +
    272  //
    +
    273  // Next, we find a match starting from the current position.
    +
    274  while (has_value) {
    +
    275  SIMDJSON_ASSUME( _json_iter->_depth == _depth ); // We must be at the start of a field
    +
    276 
    +
    277  // Get the key and colon, stopping at the value.
    +
    278  raw_json_string actual_key;
    +
    279  // size_t max_key_length = _json_iter->peek_length() - 2; // -2 for the two quotes
    +
    280  // Note: _json_iter->peek_length() - 2 might overflow if _json_iter->peek_length() < 2.
    +
    281  // field_key() advances the pointer and checks that '"' is found (corresponding to a key).
    +
    282  // The depth is left unchanged by field_key().
    +
    283  if ((error = field_key().get(actual_key) )) { abandon(); return error; };
    +
    284  // field_value() will advance and check that we find a ':' separating the
    +
    285  // key and the value. It will also increment the depth by one.
    +
    286  if ((error = field_value() )) { abandon(); return error; }
    +
    287 
    +
    288  // If it matches, stop and return
    +
    289  // We could do it this way if we wanted to allow arbitrary
    +
    290  // key content (including escaped quotes).
    +
    291  // if (actual_key.unsafe_is_equal(max_key_length, key)) {
    +
    292  // Instead we do the following which may trigger buffer overruns if the
    +
    293  // user provides an adversarial key (containing a well placed unescaped quote
    +
    294  // character and being longer than the number of bytes remaining in the JSON
    +
    295  // input).
    +
    296  if (actual_key.unsafe_is_equal(key)) {
    +
    297  logger::log_event(*this, "match", key, -2);
    +
    298  // If we return here, then we return while pointing at the ':' that we just checked.
    +
    299  return true;
    +
    300  }
    +
    301 
    +
    302  // No match: skip the value and see if , or } is next
    +
    303  logger::log_event(*this, "no match", key, -2);
    +
    304  // The call to skip_child is meant to skip over the value corresponding to the key.
    +
    305  // After skip_child(), we are right before the next comma (',') or the final brace ('}').
    +
    306  SIMDJSON_TRY( skip_child() );
    +
    307  // The has_next_field() advances the pointer and check that either ',' or '}' is found.
    +
    308  // It returns true if ',' is found, false otherwise. If anything other than ',' or '}' is found,
    +
    309  // then we are in error and we abort.
    +
    310  if ((error = has_next_field().get(has_value) )) { abandon(); return error; }
    +
    311  }
    +
    312  // Performance note: it maybe wasteful to rewind to the beginning when there might be
    +
    313  // no other query following. Indeed, it would require reskipping the whole object.
    +
    314  // Instead, you can just stay where you are. If there is a new query, there is always time
    +
    315  // to rewind.
    +
    316  if(at_first) { return false; }
    +
    317 
    +
    318  // If we reach the end without finding a match, search the rest of the fields starting at the
    +
    319  // beginning of the object.
    +
    320  // (We have already run through the object before, so we've already validated its structure. We
    +
    321  // don't check errors in this bit.)
    +
    322  SIMDJSON_TRY(reset_object().get(has_value));
    +
    323  while (true) {
    +
    324  SIMDJSON_ASSUME(has_value); // we should reach search_start before ever reaching the end of the object
    +
    325  SIMDJSON_ASSUME( _json_iter->_depth == _depth ); // We must be at the start of a field
    +
    326 
    +
    327  // Get the key and colon, stopping at the value.
    +
    328  raw_json_string actual_key;
    +
    329  // size_t max_key_length = _json_iter->peek_length() - 2; // -2 for the two quotes
    +
    330  // Note: _json_iter->peek_length() - 2 might overflow if _json_iter->peek_length() < 2.
    +
    331  // field_key() advances the pointer and checks that '"' is found (corresponding to a key).
    +
    332  // The depth is left unchanged by field_key().
    +
    333  error = field_key().get(actual_key); SIMDJSON_ASSUME(!error);
    +
    334  // field_value() will advance and check that we find a ':' separating the
    +
    335  // key and the value. It will also increment the depth by one.
    +
    336  error = field_value(); SIMDJSON_ASSUME(!error);
    +
    337 
    +
    338  // If it matches, stop and return
    +
    339  // We could do it this way if we wanted to allow arbitrary
    +
    340  // key content (including escaped quotes).
    +
    341  // if (actual_key.unsafe_is_equal(max_key_length, key)) {
    +
    342  // Instead we do the following which may trigger buffer overruns if the
    +
    343  // user provides an adversarial key (containing a well placed unescaped quote
    +
    344  // character and being longer than the number of bytes remaining in the JSON
    +
    345  // input).
    +
    346  if (actual_key.unsafe_is_equal(key)) {
    +
    347  logger::log_event(*this, "match", key, -2);
    +
    348  // If we return here, then we return while pointing at the ':' that we just checked.
    +
    349  return true;
    +
    350  }
    +
    351 
    +
    352  // No match: skip the value and see if , or } is next
    +
    353  logger::log_event(*this, "no match", key, -2);
    +
    354  // The call to skip_child is meant to skip over the value corresponding to the key.
    +
    355  // After skip_child(), we are right before the next comma (',') or the final brace ('}').
    +
    356  SIMDJSON_TRY( skip_child() );
    +
    357  // If we reached the end of the key-value pair we started from, then we know
    +
    358  // that the key is not there so we return false. We are either right before
    +
    359  // the next comma or the final brace.
    +
    360  if(_json_iter->position() == search_start) { return false; }
    +
    361  // The has_next_field() advances the pointer and check that either ',' or '}' is found.
    +
    362  // It returns true if ',' is found, false otherwise. If anything other than ',' or '}' is found,
    +
    363  // then we are in error and we abort.
    +
    364  error = has_next_field().get(has_value); SIMDJSON_ASSUME(!error);
    +
    365  // If we make the mistake of exiting here, then we could be left pointing at a key
    +
    366  // in the middle of an object. That's not an allowable state.
    +
    367  }
    +
    368  // If the loop ended, we're out of fields to look at. The program should
    +
    369  // never reach this point.
    +
    370  return false;
    +
    371 }
    +
    372 SIMDJSON_POP_DISABLE_WARNINGS
    +
    373 
    +
    374 simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> value_iterator::field_key() noexcept {
    +
    375  assert_at_next();
    +
    376 
    +
    377  const uint8_t *key = _json_iter->return_current_and_advance();
    +
    378  if (*(key++) != '"') { return report_error(TAPE_ERROR, "Object key is not a string"); }
    +
    379  return raw_json_string(key);
    +
    380 }
    +
    381 
    +
    382 simdjson_warn_unused simdjson_inline error_code value_iterator::field_value() noexcept {
    +
    383  assert_at_next();
    +
    384 
    +
    385  if (*_json_iter->return_current_and_advance() != ':') { return report_error(TAPE_ERROR, "Missing colon in object field"); }
    +
    386  _json_iter->descend_to(depth()+1);
    +
    387  return SUCCESS;
    +
    388 }
    +
    389 
    +
    390 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::start_array() noexcept {
    +
    391  SIMDJSON_TRY( start_container('[', "Not an array", "array") );
    +
    392  return started_array();
    +
    393 }
    +
    394 
    +
    395 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::start_root_array() noexcept {
    +
    396  SIMDJSON_TRY( start_container('[', "Not an array", "array") );
    +
    397  return started_root_array();
    +
    398 }
    +
    399 
    +
    400 inline std::string value_iterator::to_string() const noexcept {
    +
    401  auto answer = std::string("value_iterator [ depth : ") + std::to_string(_depth) + std::string(", ");
    +
    402  if(_json_iter != nullptr) { answer += _json_iter->to_string(); }
    +
    403  answer += std::string(" ]");
    +
    404  return answer;
    +
    405 }
    +
    406 
    +
    407 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::started_array() noexcept {
    +
    408  assert_at_container_start();
    +
    409  if (*_json_iter->peek() == ']') {
    +
    410  logger::log_value(*_json_iter, "empty array");
    +
    411  _json_iter->return_current_and_advance();
    +
    412  SIMDJSON_TRY( end_container() );
    +
    413  return false;
    +
    414  }
    +
    415  _json_iter->descend_to(depth()+1);
    +
    416 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    417  _json_iter->set_start_position(_depth, start_position());
    +
    418 #endif
    +
    419  return true;
    +
    420 }
    +
    421 
    +
    422 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::started_root_array() noexcept {
    +
    423  // When in streaming mode, we cannot expect peek_last() to be the last structural element of the
    +
    424  // current document. It only works in the normal mode where we have indexed a single document.
    +
    425  // Note that adding a check for 'streaming' is not expensive since we only have at most
    +
    426  // one root element.
    +
    427  if ( ! _json_iter->streaming() ) {
    +
    428  if (*_json_iter->peek_last() != ']') {
    +
    429  _json_iter->abandon();
    +
    430  return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "missing ] at end");
    +
    431  }
    +
    432  // If the last character is ] *and* the first gibberish character is also ']'
    +
    433  // then on-demand could accidentally go over. So we need additional checks.
    +
    434  // https://github.com/simdjson/simdjson/issues/1834
    +
    435  // Checking that the document is balanced requires a full scan which is potentially
    +
    436  // expensive, but it only happens in edge cases where the first padding character is
    +
    437  // a closing bracket.
    +
    438  if ((*_json_iter->peek(_json_iter->end_position()) == ']') && (!_json_iter->balanced())) {
    +
    439  _json_iter->abandon();
    +
    440  // The exact error would require more work. It will typically be an unclosed array.
    +
    441  return report_error(INCOMPLETE_ARRAY_OR_OBJECT, "the document is unbalanced");
    +
    442  }
    +
    443  }
    +
    444  return started_array();
    +
    445 }
    +
    446 
    +
    447 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::has_next_element() noexcept {
    +
    448  assert_at_next();
    +
    449 
    +
    450  logger::log_event(*this, "has_next_element");
    +
    451  switch (*_json_iter->return_current_and_advance()) {
    +
    452  case ']':
    +
    453  logger::log_end_value(*_json_iter, "array");
    +
    454  SIMDJSON_TRY( end_container() );
    +
    455  return false;
    +
    456  case ',':
    +
    457  _json_iter->descend_to(depth()+1);
    +
    458  return true;
    +
    459  default:
    +
    460  return report_error(TAPE_ERROR, "Missing comma between array elements");
    +
    461  }
    +
    462 }
    +
    463 
    +
    464 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::parse_bool(const uint8_t *json) const noexcept {
    +
    465  auto not_true = atomparsing::str4ncmp(json, "true");
    +
    466  auto not_false = atomparsing::str4ncmp(json, "fals") | (json[4] ^ 'e');
    +
    467  bool error = (not_true && not_false) || jsoncharutils::is_not_structural_or_whitespace(json[not_true ? 5 : 4]);
    +
    468  if (error) { return incorrect_type_error("Not a boolean"); }
    +
    469  return simdjson_result<bool>(!not_true);
    +
    470 }
    +
    471 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::parse_null(const uint8_t *json) const noexcept {
    +
    472  bool is_null_string = !atomparsing::str4ncmp(json, "null") && jsoncharutils::is_structural_or_whitespace(json[4]);
    +
    473  // if we start with 'n', we must be a null
    +
    474  if(!is_null_string && json[0]=='n') { return incorrect_type_error("Not a null but starts with n"); }
    +
    475  return is_null_string;
    +
    476 }
    +
    477 
    +
    478 simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> value_iterator::get_string() noexcept {
    +
    479  return get_raw_json_string().unescape(json_iter());
    +
    480 }
    +
    481 simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> value_iterator::get_raw_json_string() noexcept {
    +
    482  auto json = peek_scalar("string");
    +
    483  if (*json != '"') { return incorrect_type_error("Not a string"); }
    +
    484  advance_scalar("string");
    +
    485  return raw_json_string(json+1);
    +
    486 }
    +
    487 simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> value_iterator::get_uint64() noexcept {
    +
    488  auto result = numberparsing::parse_unsigned(peek_non_root_scalar("uint64"));
    +
    489  if(result.error() == SUCCESS) { advance_non_root_scalar("uint64"); }
    +
    490  return result;
    +
    491 }
    +
    492 simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> value_iterator::get_uint64_in_string() noexcept {
    +
    493  auto result = numberparsing::parse_unsigned_in_string(peek_non_root_scalar("uint64"));
    +
    494  if(result.error() == SUCCESS) { advance_non_root_scalar("uint64"); }
    +
    495  return result;
    +
    496 }
    +
    497 simdjson_warn_unused simdjson_inline simdjson_result<int64_t> value_iterator::get_int64() noexcept {
    +
    498  auto result = numberparsing::parse_integer(peek_non_root_scalar("int64"));
    +
    499  if(result.error() == SUCCESS) { advance_non_root_scalar("int64"); }
    +
    500  return result;
    +
    501 }
    +
    502 simdjson_warn_unused simdjson_inline simdjson_result<int64_t> value_iterator::get_int64_in_string() noexcept {
    +
    503  auto result = numberparsing::parse_integer_in_string(peek_non_root_scalar("int64"));
    +
    504  if(result.error() == SUCCESS) { advance_non_root_scalar("int64"); }
    +
    505  return result;
    +
    506 }
    +
    507 simdjson_warn_unused simdjson_inline simdjson_result<double> value_iterator::get_double() noexcept {
    +
    508  auto result = numberparsing::parse_double(peek_non_root_scalar("double"));
    +
    509  if(result.error() == SUCCESS) { advance_non_root_scalar("double"); }
    +
    510  return result;
    +
    511 }
    +
    512 simdjson_warn_unused simdjson_inline simdjson_result<double> value_iterator::get_double_in_string() noexcept {
    +
    513  auto result = numberparsing::parse_double_in_string(peek_non_root_scalar("double"));
    +
    514  if(result.error() == SUCCESS) { advance_non_root_scalar("double"); }
    +
    515  return result;
    +
    516 }
    +
    517 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::get_bool() noexcept {
    +
    518  auto result = parse_bool(peek_non_root_scalar("bool"));
    +
    519  if(result.error() == SUCCESS) { advance_non_root_scalar("bool"); }
    +
    520  return result;
    +
    521 }
    +
    522 simdjson_inline simdjson_result<bool> value_iterator::is_null() noexcept {
    +
    523  bool is_null_value;
    +
    524  SIMDJSON_TRY(parse_null(peek_non_root_scalar("null")).get(is_null_value));
    +
    525  if(is_null_value) { advance_non_root_scalar("null"); }
    +
    526  return is_null_value;
    +
    527 }
    +
    528 simdjson_inline bool value_iterator::is_negative() noexcept {
    +
    529  return numberparsing::is_negative(peek_non_root_scalar("numbersign"));
    +
    530 }
    +
    531 simdjson_inline bool value_iterator::is_root_negative() noexcept {
    +
    532  return numberparsing::is_negative(peek_root_scalar("numbersign"));
    +
    533 }
    +
    534 simdjson_inline simdjson_result<bool> value_iterator::is_integer() noexcept {
    +
    535  return numberparsing::is_integer(peek_non_root_scalar("integer"));
    +
    536 }
    +
    537 simdjson_inline simdjson_result<number_type> value_iterator::get_number_type() noexcept {
    +
    538  return numberparsing::get_number_type(peek_non_root_scalar("integer"));
    +
    539 }
    +
    540 simdjson_inline simdjson_result<number> value_iterator::get_number() noexcept {
    +
    541  number num;
    +
    542  error_code error = numberparsing::parse_number(peek_non_root_scalar("number"), num);
    +
    543  if(error) { return error; }
    +
    544  return num;
    +
    545 }
    +
    546 
    +
    547 simdjson_inline simdjson_result<bool> value_iterator::is_root_integer(bool check_trailing) noexcept {
    +
    548  auto max_len = peek_start_length();
    +
    549  auto json = peek_root_scalar("is_root_integer");
    +
    550  uint8_t tmpbuf[20+1]; // <20 digits> is the longest possible unsigned integer
    +
    551  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    552  return false; // if there are more than 20 characters, it cannot be represented as an integer.
    +
    553  }
    +
    554  auto answer = numberparsing::is_integer(tmpbuf);
    +
    555  // If the parsing was a success, we must still check that it is
    +
    556  // a single scalar. Note that we parse first because of cases like '[]' where
    +
    557  // getting TRAILING_CONTENT is wrong.
    +
    558  if(check_trailing && (answer.error() == SUCCESS) && (!_json_iter->is_single_token())) { return TRAILING_CONTENT; }
    +
    559  return answer;
    +
    560 }
    +
    561 
    +
    562 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number_type> value_iterator::get_root_number_type(bool check_trailing) noexcept {
    +
    563  auto max_len = peek_start_length();
    +
    564  auto json = peek_root_scalar("number");
    +
    565  // Per https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/,
    +
    566  // 1074 is the maximum number of significant fractional digits. Add 8 more digits for the biggest
    +
    567  // number: -0.<fraction>e-308.
    +
    568  uint8_t tmpbuf[1074+8+1];
    +
    569  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    570  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 1082 characters");
    +
    571  return NUMBER_ERROR;
    +
    572  }
    +
    573  auto answer = numberparsing::get_number_type(tmpbuf);
    +
    574  if (check_trailing && (answer.error() == SUCCESS) && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    575  return answer;
    +
    576 }
    +
    577 simdjson_inline simdjson_result<number> value_iterator::get_root_number(bool check_trailing) noexcept {
    +
    578  auto max_len = peek_start_length();
    +
    579  auto json = peek_root_scalar("number");
    +
    580  // Per https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/,
    +
    581  // 1074 is the maximum number of significant fractional digits. Add 8 more digits for the biggest
    +
    582  // number: -0.<fraction>e-308.
    +
    583  uint8_t tmpbuf[1074+8+1];
    +
    584  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    585  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 1082 characters");
    +
    586  return NUMBER_ERROR;
    +
    587  }
    +
    588  number num;
    +
    589  error_code error = numberparsing::parse_number(tmpbuf, num);
    +
    590  if(error) { return error; }
    +
    591  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    592  advance_root_scalar("number");
    +
    593  return num;
    +
    594 }
    +
    595 simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> value_iterator::get_root_string(bool check_trailing) noexcept {
    +
    596  return get_root_raw_json_string(check_trailing).unescape(json_iter());
    +
    597 }
    +
    598 simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> value_iterator::get_root_raw_json_string(bool check_trailing) noexcept {
    +
    599  auto json = peek_scalar("string");
    +
    600  if (*json != '"') { return incorrect_type_error("Not a string"); }
    +
    601  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    602  advance_scalar("string");
    +
    603  return raw_json_string(json+1);
    +
    604 }
    +
    605 simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> value_iterator::get_root_uint64(bool check_trailing) noexcept {
    +
    606  auto max_len = peek_start_length();
    +
    607  auto json = peek_root_scalar("uint64");
    +
    608  uint8_t tmpbuf[20+1]; // <20 digits> is the longest possible unsigned integer
    +
    609  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    610  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 20 characters");
    +
    611  return NUMBER_ERROR;
    +
    612  }
    +
    613  auto result = numberparsing::parse_unsigned(tmpbuf);
    +
    614  if(result.error() == SUCCESS) {
    +
    615  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    616  advance_root_scalar("uint64");
    +
    617  }
    +
    618  return result;
    +
    619 }
    +
    620 simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> value_iterator::get_root_uint64_in_string(bool check_trailing) noexcept {
    +
    621  auto max_len = peek_start_length();
    +
    622  auto json = peek_root_scalar("uint64");
    +
    623  uint8_t tmpbuf[20+1]; // <20 digits> is the longest possible unsigned integer
    +
    624  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    625  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 20 characters");
    +
    626  return NUMBER_ERROR;
    +
    627  }
    +
    628  auto result = numberparsing::parse_unsigned_in_string(tmpbuf);
    +
    629  if(result.error() == SUCCESS) {
    +
    630  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    631  advance_root_scalar("uint64");
    +
    632  }
    +
    633  return result;
    +
    634 }
    +
    635 simdjson_warn_unused simdjson_inline simdjson_result<int64_t> value_iterator::get_root_int64(bool check_trailing) noexcept {
    +
    636  auto max_len = peek_start_length();
    +
    637  auto json = peek_root_scalar("int64");
    +
    638  uint8_t tmpbuf[20+1]; // -<19 digits> is the longest possible integer
    +
    639  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    640  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 20 characters");
    +
    641  return NUMBER_ERROR;
    +
    642  }
    +
    643 
    +
    644  auto result = numberparsing::parse_integer(tmpbuf);
    +
    645  if(result.error() == SUCCESS) {
    +
    646  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    647  advance_root_scalar("int64");
    +
    648  }
    +
    649  return result;
    +
    650 }
    +
    651 simdjson_warn_unused simdjson_inline simdjson_result<int64_t> value_iterator::get_root_int64_in_string(bool check_trailing) noexcept {
    +
    652  auto max_len = peek_start_length();
    +
    653  auto json = peek_root_scalar("int64");
    +
    654  uint8_t tmpbuf[20+1]; // -<19 digits> is the longest possible integer
    +
    655  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    656  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 20 characters");
    +
    657  return NUMBER_ERROR;
    +
    658  }
    +
    659 
    +
    660  auto result = numberparsing::parse_integer_in_string(tmpbuf);
    +
    661  if(result.error() == SUCCESS) {
    +
    662  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    663  advance_root_scalar("int64");
    +
    664  }
    +
    665  return result;
    +
    666 }
    +
    667 simdjson_warn_unused simdjson_inline simdjson_result<double> value_iterator::get_root_double(bool check_trailing) noexcept {
    +
    668  auto max_len = peek_start_length();
    +
    669  auto json = peek_root_scalar("double");
    +
    670  // Per https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/,
    +
    671  // 1074 is the maximum number of significant fractional digits. Add 8 more digits for the biggest
    +
    672  // number: -0.<fraction>e-308.
    +
    673  uint8_t tmpbuf[1074+8+1];
    +
    674  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    675  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 1082 characters");
    +
    676  return NUMBER_ERROR;
    +
    677  }
    +
    678  auto result = numberparsing::parse_double(tmpbuf);
    +
    679  if(result.error() == SUCCESS) {
    +
    680  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    681  advance_root_scalar("double");
    +
    682  }
    +
    683  return result;
    +
    684 }
    +
    685 
    +
    686 simdjson_warn_unused simdjson_inline simdjson_result<double> value_iterator::get_root_double_in_string(bool check_trailing) noexcept {
    +
    687  auto max_len = peek_start_length();
    +
    688  auto json = peek_root_scalar("double");
    +
    689  // Per https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/,
    +
    690  // 1074 is the maximum number of significant fractional digits. Add 8 more digits for the biggest
    +
    691  // number: -0.<fraction>e-308.
    +
    692  uint8_t tmpbuf[1074+8+1];
    +
    693  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) {
    +
    694  logger::log_error(*_json_iter, start_position(), depth(), "Root number more than 1082 characters");
    +
    695  return NUMBER_ERROR;
    +
    696  }
    +
    697  auto result = numberparsing::parse_double_in_string(tmpbuf);
    +
    698  if(result.error() == SUCCESS) {
    +
    699  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    700  advance_root_scalar("double");
    +
    701  }
    +
    702  return result;
    +
    703 }
    +
    704 simdjson_warn_unused simdjson_inline simdjson_result<bool> value_iterator::get_root_bool(bool check_trailing) noexcept {
    +
    705  auto max_len = peek_start_length();
    +
    706  auto json = peek_root_scalar("bool");
    +
    707  uint8_t tmpbuf[5+1];
    +
    708  if (!_json_iter->copy_to_buffer(json, max_len, tmpbuf)) { return incorrect_type_error("Not a boolean"); }
    +
    709  auto result = parse_bool(tmpbuf);
    +
    710  if(result.error() == SUCCESS) {
    +
    711  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    712  advance_root_scalar("bool");
    +
    713  }
    +
    714  return result;
    +
    715 }
    +
    716 simdjson_inline simdjson_result<bool> value_iterator::is_root_null(bool check_trailing) noexcept {
    +
    717  auto max_len = peek_start_length();
    +
    718  auto json = peek_root_scalar("null");
    +
    719  bool result = (max_len >= 4 && !atomparsing::str4ncmp(json, "null") &&
    +
    720  (max_len == 4 || jsoncharutils::is_structural_or_whitespace(json[4])));
    +
    721  if(result) { // we have something that looks like a null.
    +
    722  if (check_trailing && !_json_iter->is_single_token()) { return TRAILING_CONTENT; }
    +
    723  advance_root_scalar("null");
    +
    724  }
    +
    725  return result;
    +
    726 }
    +
    727 
    +
    728 simdjson_warn_unused simdjson_inline error_code value_iterator::skip_child() noexcept {
    +
    729  SIMDJSON_ASSUME( _json_iter->token._position > _start_position );
    +
    730  SIMDJSON_ASSUME( _json_iter->_depth >= _depth );
    +
    731 
    +
    732  return _json_iter->skip_child(depth());
    +
    733 }
    +
    734 
    +
    735 simdjson_inline value_iterator value_iterator::child() const noexcept {
    +
    736  assert_at_child();
    +
    737  return { _json_iter, depth()+1, _json_iter->token.position() };
    +
    738 }
    +
    739 
    +
    740 // GCC 7 warns when the first line of this function is inlined away into oblivion due to the caller
    +
    741 // relating depth and iterator depth, which is a desired effect. It does not happen if is_open is
    +
    742 // marked non-inline.
    +
    743 SIMDJSON_PUSH_DISABLE_WARNINGS
    +
    744 SIMDJSON_DISABLE_STRICT_OVERFLOW_WARNING
    +
    745 simdjson_inline bool value_iterator::is_open() const noexcept {
    +
    746  return _json_iter->depth() >= depth();
    +
    747 }
    +
    748 SIMDJSON_POP_DISABLE_WARNINGS
    +
    749 
    +
    750 simdjson_inline bool value_iterator::at_end() const noexcept {
    +
    751  return _json_iter->at_end();
    +
    752 }
    +
    753 
    +
    754 simdjson_inline bool value_iterator::at_start() const noexcept {
    +
    755  return _json_iter->token.position() == start_position();
    +
    756 }
    +
    757 
    +
    758 simdjson_inline bool value_iterator::at_first_field() const noexcept {
    +
    759  SIMDJSON_ASSUME( _json_iter->token._position > _start_position );
    +
    760  return _json_iter->token.position() == start_position() + 1;
    +
    761 }
    +
    762 
    +
    763 simdjson_inline void value_iterator::abandon() noexcept {
    +
    764  _json_iter->abandon();
    +
    765 }
    +
    766 
    +
    767 simdjson_warn_unused simdjson_inline depth_t value_iterator::depth() const noexcept {
    +
    768  return _depth;
    +
    769 }
    +
    770 simdjson_warn_unused simdjson_inline error_code value_iterator::error() const noexcept {
    +
    771  return _json_iter->error;
    +
    772 }
    +
    773 simdjson_warn_unused simdjson_inline uint8_t *&value_iterator::string_buf_loc() noexcept {
    +
    774  return _json_iter->string_buf_loc();
    +
    775 }
    +
    776 simdjson_warn_unused simdjson_inline const json_iterator &value_iterator::json_iter() const noexcept {
    +
    777  return *_json_iter;
    +
    778 }
    +
    779 simdjson_warn_unused simdjson_inline json_iterator &value_iterator::json_iter() noexcept {
    +
    780  return *_json_iter;
    +
    781 }
    +
    782 
    +
    783 simdjson_inline const uint8_t *value_iterator::peek_start() const noexcept {
    +
    784  return _json_iter->peek(start_position());
    +
    785 }
    +
    786 simdjson_inline uint32_t value_iterator::peek_start_length() const noexcept {
    +
    787  return _json_iter->peek_length(start_position());
    +
    788 }
    +
    789 
    +
    790 simdjson_inline const uint8_t *value_iterator::peek_scalar(const char *type) noexcept {
    +
    791  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    792  // If we're not at the position anymore, we don't want to advance the cursor.
    +
    793  if (!is_at_start()) { return peek_start(); }
    +
    794 
    +
    795  // Get the JSON and advance the cursor, decreasing depth to signify that we have retrieved the value.
    +
    796  assert_at_start();
    +
    797  return _json_iter->peek();
    +
    798 }
    +
    799 
    +
    800 simdjson_inline void value_iterator::advance_scalar(const char *type) noexcept {
    +
    801  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    802  // If we're not at the position anymore, we don't want to advance the cursor.
    +
    803  if (!is_at_start()) { return; }
    +
    804 
    +
    805  // Get the JSON and advance the cursor, decreasing depth to signify that we have retrieved the value.
    +
    806  assert_at_start();
    +
    807  _json_iter->return_current_and_advance();
    +
    808  _json_iter->ascend_to(depth()-1);
    +
    809 }
    +
    810 
    +
    811 simdjson_inline error_code value_iterator::start_container(uint8_t start_char, const char *incorrect_type_message, const char *type) noexcept {
    +
    812  logger::log_start_value(*_json_iter, start_position(), depth(), type);
    +
    813  // If we're not at the position anymore, we don't want to advance the cursor.
    +
    814  const uint8_t *json;
    +
    815  if (!is_at_start()) {
    +
    816 #if SIMDJSON_DEVELOPMENT_CHECKS
    +
    817  if (!is_at_iterator_start()) { return OUT_OF_ORDER_ITERATION; }
    +
    818 #endif
    +
    819  json = peek_start();
    +
    820  if (*json != start_char) { return incorrect_type_error(incorrect_type_message); }
    +
    821  } else {
    +
    822  assert_at_start();
    +
    828  json = _json_iter->peek();
    +
    829  if (*json != start_char) { return incorrect_type_error(incorrect_type_message); }
    +
    830  _json_iter->return_current_and_advance();
    +
    831  }
    +
    832 
    +
    833 
    +
    834  return SUCCESS;
    +
    835 }
    +
    836 
    +
    837 
    +
    838 simdjson_inline const uint8_t *value_iterator::peek_root_scalar(const char *type) noexcept {
    +
    839  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    840  if (!is_at_start()) { return peek_start(); }
    +
    841 
    +
    842  assert_at_root();
    +
    843  return _json_iter->peek();
    +
    844 }
    +
    845 simdjson_inline const uint8_t *value_iterator::peek_non_root_scalar(const char *type) noexcept {
    +
    846  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    847  if (!is_at_start()) { return peek_start(); }
    +
    848 
    +
    849  assert_at_non_root_start();
    +
    850  return _json_iter->peek();
    +
    851 }
    +
    852 
    +
    853 simdjson_inline void value_iterator::advance_root_scalar(const char *type) noexcept {
    +
    854  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    855  if (!is_at_start()) { return; }
    +
    856 
    +
    857  assert_at_root();
    +
    858  _json_iter->return_current_and_advance();
    +
    859  _json_iter->ascend_to(depth()-1);
    +
    860 }
    +
    861 simdjson_inline void value_iterator::advance_non_root_scalar(const char *type) noexcept {
    +
    862  logger::log_value(*_json_iter, start_position(), depth(), type);
    +
    863  if (!is_at_start()) { return; }
    +
    864 
    +
    865  assert_at_non_root_start();
    +
    866  _json_iter->return_current_and_advance();
    +
    867  _json_iter->ascend_to(depth()-1);
    +
    868 }
    +
    869 
    +
    870 simdjson_inline error_code value_iterator::incorrect_type_error(const char *message) const noexcept {
    +
    871  logger::log_error(*_json_iter, start_position(), depth(), message);
    +
    872  return INCORRECT_TYPE;
    +
    873 }
    +
    874 
    +
    875 simdjson_inline bool value_iterator::is_at_start() const noexcept {
    +
    876  return position() == start_position();
    +
    877 }
    +
    878 
    +
    879 simdjson_inline bool value_iterator::is_at_key() const noexcept {
    +
    880  // Keys are at the same depth as the object.
    +
    881  // Note here that we could be safer and check that we are within an object,
    +
    882  // but we do not.
    +
    883  return _depth == _json_iter->_depth && *_json_iter->peek() == '"';
    +
    884 }
    +
    885 
    +
    886 simdjson_inline bool value_iterator::is_at_iterator_start() const noexcept {
    +
    887  // We can legitimately be either at the first value ([1]), or after the array if it's empty ([]).
    +
    888  auto delta = position() - start_position();
    +
    889  return delta == 1 || delta == 2;
    +
    890 }
    +
    891 
    +
    892 inline void value_iterator::assert_at_start() const noexcept {
    +
    893  SIMDJSON_ASSUME( _json_iter->token._position == _start_position );
    +
    894  SIMDJSON_ASSUME( _json_iter->_depth == _depth );
    +
    895  SIMDJSON_ASSUME( _depth > 0 );
    +
    896 }
    +
    897 
    +
    898 inline void value_iterator::assert_at_container_start() const noexcept {
    +
    899  SIMDJSON_ASSUME( _json_iter->token._position == _start_position + 1 );
    +
    900  SIMDJSON_ASSUME( _json_iter->_depth == _depth );
    +
    901  SIMDJSON_ASSUME( _depth > 0 );
    +
    902 }
    +
    903 
    +
    904 inline void value_iterator::assert_at_next() const noexcept {
    +
    905  SIMDJSON_ASSUME( _json_iter->token._position > _start_position );
    +
    906  SIMDJSON_ASSUME( _json_iter->_depth == _depth );
    +
    907  SIMDJSON_ASSUME( _depth > 0 );
    +
    908 }
    +
    909 
    +
    910 simdjson_inline void value_iterator::move_at_start() noexcept {
    +
    911  _json_iter->_depth = _depth;
    +
    912  _json_iter->token.set_position(_start_position);
    +
    913 }
    +
    914 
    +
    915 simdjson_inline void value_iterator::move_at_container_start() noexcept {
    +
    916  _json_iter->_depth = _depth;
    +
    917  _json_iter->token.set_position(_start_position + 1);
    +
    918 }
    +
    919 
    +
    920 simdjson_inline simdjson_result<bool> value_iterator::reset_array() noexcept {
    +
    921  move_at_container_start();
    +
    922  return started_array();
    +
    923 }
    +
    924 
    +
    925 simdjson_inline simdjson_result<bool> value_iterator::reset_object() noexcept {
    +
    926  move_at_container_start();
    +
    927  return started_object();
    +
    928 }
    +
    929 
    +
    930 inline void value_iterator::assert_at_child() const noexcept {
    +
    931  SIMDJSON_ASSUME( _json_iter->token._position > _start_position );
    +
    932  SIMDJSON_ASSUME( _json_iter->_depth == _depth + 1 );
    +
    933  SIMDJSON_ASSUME( _depth > 0 );
    +
    934 }
    +
    935 
    +
    936 inline void value_iterator::assert_at_root() const noexcept {
    +
    937  assert_at_start();
    +
    938  SIMDJSON_ASSUME( _depth == 1 );
    +
    939 }
    +
    940 
    +
    941 inline void value_iterator::assert_at_non_root_start() const noexcept {
    +
    942  assert_at_start();
    +
    943  SIMDJSON_ASSUME( _depth > 1 );
    +
    944 }
    +
    945 
    +
    946 inline void value_iterator::assert_is_valid() const noexcept {
    +
    947  SIMDJSON_ASSUME( _json_iter != nullptr );
    +
    948 }
    +
    949 
    +
    950 simdjson_inline bool value_iterator::is_valid() const noexcept {
    +
    951  return _json_iter != nullptr;
    +
    952 }
    +
    953 
    +
    954 simdjson_inline simdjson_result<json_type> value_iterator::type() const noexcept {
    +
    955  switch (*peek_start()) {
    +
    956  case '{':
    +
    957  return json_type::object;
    +
    958  case '[':
    +
    959  return json_type::array;
    +
    960  case '"':
    +
    961  return json_type::string;
    +
    962  case 'n':
    +
    963  return json_type::null;
    +
    964  case 't': case 'f':
    +
    965  return json_type::boolean;
    +
    966  case '-':
    +
    967  case '0': case '1': case '2': case '3': case '4':
    +
    968  case '5': case '6': case '7': case '8': case '9':
    +
    969  return json_type::number;
    +
    970  default:
    +
    971  return TAPE_ERROR;
    +
    972  }
    +
    973 }
    +
    974 
    +
    975 simdjson_inline token_position value_iterator::start_position() const noexcept {
    +
    976  return _start_position;
    +
    977 }
    +
    978 
    +
    979 simdjson_inline token_position value_iterator::position() const noexcept {
    +
    980  return _json_iter->position();
    +
    981 }
    +
    982 
    +
    983 simdjson_inline token_position value_iterator::end_position() const noexcept {
    +
    984  return _json_iter->end_position();
    +
    985 }
    +
    986 
    +
    987 simdjson_inline token_position value_iterator::last_position() const noexcept {
    +
    988  return _json_iter->last_position();
    +
    989 }
    +
    990 
    +
    991 simdjson_inline error_code value_iterator::report_error(error_code error, const char *message) noexcept {
    +
    992  return _json_iter->report_error(error, message);
    +
    993 }
    +
    994 
    +
    995 } // namespace ondemand
    +
    996 } // namespace SIMDJSON_IMPLEMENTATION
    +
    997 } // namespace simdjson
    +
    998 
    +
    999 namespace simdjson {
    +
    1000 
    +
    1001 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexcept
    +
    1002  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator>(value)) {}
    +
    1003 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator>::simdjson_result(error_code error) noexcept
    +
    1004  : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator>(error) {}
    +
    1005 
    +
    1006 } // namespace simdjson
    +
    A string escaped per JSON rules, terminated with quote (").
    +
    simdjson_inline bool unsafe_is_equal(size_t length, std::string_view target) const noexcept
    This compares the current instance to the std::string_view target: returns true if they are byte-by-b...
    + + +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    +
    @ number
    A JSON number ( 1 or -2.3 or 4.5e6 ...)
    +
    @ string
    A JSON string ( "a" or "hello world\n" ...)
    + +
    int32_t depth_t
    Represents the depth of a JSON value (number of nested arrays/objects).
    Definition: ondemand.h:11
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    @ INCORRECT_TYPE
    JSON element has a different type than user expected.
    Definition: error.h:34
    +
    @ OUT_OF_ORDER_ITERATION
    tried to iterate an array or object out of order
    Definition: error.h:43
    +
    @ TAPE_ERROR
    Something went wrong, this is a generic error.
    Definition: error.h:21
    +
    @ SUCCESS
    No error.
    Definition: error.h:18
    +
    @ TRAILING_CONTENT
    Unexpected trailing content in the JSON input.
    Definition: error.h:48
    +
    @ INCOMPLETE_ARRAY_OR_OBJECT
    The document ends early.
    Definition: error.h:45
    +
    @ NUMBER_ERROR
    Problem while parsing a number.
    Definition: error.h:27
    +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    +
    + + + + diff --git a/value__iterator_8h_source.html b/value__iterator_8h_source.html new file mode 100644 index 000000000..9372d05be --- /dev/null +++ b/value__iterator_8h_source.html @@ -0,0 +1,296 @@ + + + + + + + +simdjson: include/simdjson/generic/ondemand/value_iterator.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    value_iterator.h
    +
    +
    +
    1 namespace simdjson {
    +
    2 namespace SIMDJSON_IMPLEMENTATION {
    +
    3 namespace ondemand {
    +
    4 
    +
    5 class document;
    +
    6 class object;
    +
    7 class array;
    +
    8 class value;
    +
    9 class raw_json_string;
    +
    10 class parser;
    +
    11 
    +
    20 class value_iterator {
    +
    21 protected:
    +
    23  json_iterator *_json_iter{};
    +
    25  depth_t _depth{};
    +
    29  token_position _start_position{};
    +
    30 
    +
    31 public:
    +
    32  simdjson_inline value_iterator() noexcept = default;
    +
    33 
    +
    37  simdjson_inline void start_document() noexcept;
    +
    38 
    +
    44  simdjson_warn_unused simdjson_inline error_code skip_child() noexcept;
    +
    45 
    +
    49  simdjson_inline bool at_end() const noexcept;
    +
    50 
    +
    54  simdjson_inline bool at_start() const noexcept;
    +
    55 
    +
    59  simdjson_inline bool is_open() const noexcept;
    +
    60 
    +
    64  simdjson_inline bool at_first_field() const noexcept;
    +
    65 
    +
    69  simdjson_inline void abandon() noexcept;
    +
    70 
    +
    74  simdjson_inline value_iterator child_value() const noexcept;
    +
    75 
    +
    79  simdjson_inline int32_t depth() const noexcept;
    +
    80 
    +
    86  simdjson_inline simdjson_result<json_type> type() const noexcept;
    +
    87 
    +
    103  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_object() noexcept;
    +
    111  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_root_object() noexcept;
    +
    112 
    +
    122  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_object() noexcept;
    +
    132  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_object() noexcept;
    +
    133 
    +
    144  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_field() noexcept;
    +
    145 
    +
    149  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> field_key() noexcept;
    +
    150 
    +
    154  simdjson_warn_unused simdjson_inline error_code field_value() noexcept;
    +
    155 
    +
    172  simdjson_warn_unused simdjson_inline error_code find_field(const std::string_view key) noexcept;
    +
    173 
    +
    191  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_raw(const std::string_view key) noexcept;
    +
    192 
    +
    211  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_unordered_raw(const std::string_view key) noexcept;
    +
    212 
    +
    228  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_array() noexcept;
    +
    236  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_root_array() noexcept;
    +
    237 
    +
    247  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_array() noexcept;
    +
    257  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_array() noexcept;
    +
    258 
    +
    268  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_element() noexcept;
    +
    269 
    +
    273  simdjson_warn_unused simdjson_inline value_iterator child() const noexcept;
    +
    274 
    +
    283  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_string() noexcept;
    +
    284  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
    +
    285  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
    +
    286  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
    +
    287  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
    +
    288  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
    +
    289  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double() noexcept;
    +
    290  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
    +
    291  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_bool() noexcept;
    +
    292  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_null() noexcept;
    +
    293  simdjson_warn_unused simdjson_inline bool is_negative() noexcept;
    +
    294  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_integer() noexcept;
    +
    295  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
    +
    296  simdjson_warn_unused simdjson_inline simdjson_result<number> get_number() noexcept;
    +
    297 
    +
    298  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_root_string(bool check_trailing) noexcept;
    +
    299  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_root_raw_json_string(bool check_trailing) noexcept;
    +
    300  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64(bool check_trailing) noexcept;
    +
    301  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64_in_string(bool check_trailing) noexcept;
    +
    302  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64(bool check_trailing) noexcept;
    +
    303  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64_in_string(bool check_trailing) noexcept;
    +
    304  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double(bool check_trailing) noexcept;
    +
    305  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double_in_string(bool check_trailing) noexcept;
    +
    306  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_root_bool(bool check_trailing) noexcept;
    +
    307  simdjson_warn_unused simdjson_inline bool is_root_negative() noexcept;
    +
    308  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_integer(bool check_trailing) noexcept;
    +
    309  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_root_number_type(bool check_trailing) noexcept;
    +
    310  simdjson_warn_unused simdjson_inline simdjson_result<number> get_root_number(bool check_trailing) noexcept;
    +
    311  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_null(bool check_trailing) noexcept;
    +
    312 
    +
    313  simdjson_inline error_code error() const noexcept;
    +
    314  simdjson_inline uint8_t *&string_buf_loc() noexcept;
    +
    315  simdjson_inline const json_iterator &json_iter() const noexcept;
    +
    316  simdjson_inline json_iterator &json_iter() noexcept;
    +
    317 
    +
    318  simdjson_inline void assert_is_valid() const noexcept;
    +
    319  simdjson_inline bool is_valid() const noexcept;
    +
    320 
    +
    322 protected:
    +
    327  simdjson_inline simdjson_result<bool> reset_array() noexcept;
    +
    332  simdjson_inline simdjson_result<bool> reset_object() noexcept;
    +
    340  simdjson_inline void move_at_start() noexcept;
    +
    341 
    +
    348  simdjson_inline void move_at_container_start() noexcept;
    +
    349  /* Useful for debugging and logging purposes. */
    +
    350  inline std::string to_string() const noexcept;
    +
    351  simdjson_inline value_iterator(json_iterator *json_iter, depth_t depth, token_position start_index) noexcept;
    +
    352 
    +
    353  simdjson_inline simdjson_result<bool> parse_null(const uint8_t *json) const noexcept;
    +
    354  simdjson_inline simdjson_result<bool> parse_bool(const uint8_t *json) const noexcept;
    +
    355  simdjson_inline const uint8_t *peek_start() const noexcept;
    +
    356  simdjson_inline uint32_t peek_start_length() const noexcept;
    +
    357 
    +
    387  simdjson_inline void advance_scalar(const char *type) noexcept;
    +
    388  simdjson_inline void advance_root_scalar(const char *type) noexcept;
    +
    389  simdjson_inline void advance_non_root_scalar(const char *type) noexcept;
    +
    390 
    +
    391  simdjson_inline const uint8_t *peek_scalar(const char *type) noexcept;
    +
    392  simdjson_inline const uint8_t *peek_root_scalar(const char *type) noexcept;
    +
    393  simdjson_inline const uint8_t *peek_non_root_scalar(const char *type) noexcept;
    +
    394 
    +
    395 
    +
    396  simdjson_inline error_code start_container(uint8_t start_char, const char *incorrect_type_message, const char *type) noexcept;
    +
    397  simdjson_inline error_code end_container() noexcept;
    +
    398 
    +
    405  simdjson_inline simdjson_result<const uint8_t *> advance_to_value() noexcept;
    +
    406 
    +
    407  simdjson_inline error_code incorrect_type_error(const char *message) const noexcept;
    +
    408  simdjson_inline error_code error_unless_more_tokens(uint32_t tokens=1) const noexcept;
    +
    409 
    +
    410  simdjson_inline bool is_at_start() const noexcept;
    +
    417  simdjson_inline bool is_at_iterator_start() const noexcept;
    +
    418 
    +
    426  simdjson_inline bool is_at_key() const noexcept;
    +
    427 
    +
    428  inline void assert_at_start() const noexcept;
    +
    429  inline void assert_at_container_start() const noexcept;
    +
    430  inline void assert_at_root() const noexcept;
    +
    431  inline void assert_at_child() const noexcept;
    +
    432  inline void assert_at_next() const noexcept;
    +
    433  inline void assert_at_non_root_start() const noexcept;
    +
    434 
    +
    436  simdjson_inline token_position start_position() const noexcept;
    +
    437 
    +
    439  simdjson_inline token_position position() const noexcept;
    +
    441  simdjson_inline token_position last_position() const noexcept;
    +
    443  simdjson_inline token_position end_position() const noexcept;
    +
    445  simdjson_inline error_code report_error(error_code error, const char *message) noexcept;
    +
    446 
    +
    447  friend class document;
    +
    448  friend class object;
    +
    449  friend class array;
    +
    450  friend class value;
    +
    451 }; // value_iterator
    +
    452 
    +
    453 } // namespace ondemand
    +
    454 } // namespace SIMDJSON_IMPLEMENTATION
    +
    455 } // namespace simdjson
    +
    456 
    +
    457 namespace simdjson {
    +
    458 
    +
    459 template<>
    +
    460 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> {
    +
    461 public:
    +
    462  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexcept;
    +
    463  simdjson_inline simdjson_result(error_code error) noexcept;
    +
    464  simdjson_inline simdjson_result() noexcept = default;
    +
    465 };
    +
    466 
    +
    467 } // namespace simdjson
    + + +
    A string escaped per JSON rules, terminated with quote (").
    +
    An ephemeral JSON value returned during iteration.
    Definition: value.h:17
    + +
    json_type
    The type of a JSON value.
    Definition: json_type.h:7
    +
    @ object
    A JSON object ( { "a": 1, "b" 2, ... } )
    + +
    int32_t depth_t
    Represents the depth of a JSON value (number of nested arrays/objects).
    Definition: ondemand.h:11
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    std::string to_string(T x)
    Converts JSON to a string.
    + +
    A type representing a JSON number.
    Definition: json_type.h:24
    +
    The result of a simdjson operation that could fail.
    Definition: error.h:205
    +
    +
    + + + + diff --git a/westmere_2begin_8h_source.html b/westmere_2begin_8h_source.html new file mode 100644 index 000000000..12589c5a9 --- /dev/null +++ b/westmere_2begin_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/westmere/begin.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    begin.h
    +
    +
    +
    1 #define SIMDJSON_IMPLEMENTATION westmere
    +
    2 SIMDJSON_TARGET_WESTMERE
    +
    +
    + + + + diff --git a/westmere_2bitmanipulation_8h_source.html b/westmere_2bitmanipulation_8h_source.html new file mode 100644 index 000000000..3f63e7c2f --- /dev/null +++ b/westmere_2bitmanipulation_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + +simdjson: include/simdjson/westmere/bitmanipulation.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bitmanipulation.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_BITMANIPULATION_H
    +
    2 #define SIMDJSON_WESTMERE_BITMANIPULATION_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 // We sometimes call trailing_zero on inputs that are zero,
    +
    9 // but the algorithms do not end up using the returned value.
    +
    10 // Sadly, sanitizers are not smart enough to figure it out.
    +
    11 SIMDJSON_NO_SANITIZE_UNDEFINED
    +
    12 simdjson_inline int trailing_zeroes(uint64_t input_num) {
    +
    13 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    14  unsigned long ret;
    +
    15  // Search the mask data from least significant bit (LSB)
    +
    16  // to the most significant bit (MSB) for a set bit (1).
    +
    17  _BitScanForward64(&ret, input_num);
    +
    18  return (int)ret;
    +
    19 #else // SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    20  return __builtin_ctzll(input_num);
    +
    21 #endif // SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    22 }
    +
    23 
    +
    24 /* result might be undefined when input_num is zero */
    +
    25 simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
    +
    26  return input_num & (input_num-1);
    +
    27 }
    +
    28 
    +
    29 /* result might be undefined when input_num is zero */
    +
    30 simdjson_inline int leading_zeroes(uint64_t input_num) {
    +
    31 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    32  unsigned long leading_zero = 0;
    +
    33  // Search the mask data from most significant bit (MSB)
    +
    34  // to least significant bit (LSB) for a set bit (1).
    +
    35  if (_BitScanReverse64(&leading_zero, input_num))
    +
    36  return (int)(63 - leading_zero);
    +
    37  else
    +
    38  return 64;
    +
    39 #else
    +
    40  return __builtin_clzll(input_num);
    +
    41 #endif// SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    42 }
    +
    43 
    +
    44 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    45 simdjson_inline unsigned __int64 count_ones(uint64_t input_num) {
    +
    46  // note: we do not support legacy 32-bit Windows
    +
    47  return __popcnt64(input_num);// Visual Studio wants two underscores
    +
    48 }
    +
    49 #else
    +
    50 simdjson_inline long long int count_ones(uint64_t input_num) {
    +
    51  return _popcnt64(input_num);
    +
    52 }
    +
    53 #endif
    +
    54 
    +
    55 simdjson_inline bool add_overflow(uint64_t value1, uint64_t value2,
    +
    56  uint64_t *result) {
    +
    57 #if SIMDJSON_REGULAR_VISUAL_STUDIO
    +
    58  return _addcarry_u64(0, value1, value2,
    +
    59  reinterpret_cast<unsigned __int64 *>(result));
    +
    60 #else
    +
    61  return __builtin_uaddll_overflow(value1, value2,
    +
    62  reinterpret_cast<unsigned long long *>(result));
    +
    63 #endif
    +
    64 }
    +
    65 
    +
    66 } // unnamed namespace
    +
    67 } // namespace SIMDJSON_IMPLEMENTATION
    +
    68 } // namespace simdjson
    +
    69 
    +
    70 #endif // SIMDJSON_WESTMERE_BITMANIPULATION_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/westmere_2bitmask_8h_source.html b/westmere_2bitmask_8h_source.html new file mode 100644 index 000000000..6946c97e2 --- /dev/null +++ b/westmere_2bitmask_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +simdjson: include/simdjson/westmere/bitmask.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bitmask.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_BITMASK_H
    +
    2 #define SIMDJSON_WESTMERE_BITMASK_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 //
    +
    9 // Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
    +
    10 //
    +
    11 // For example, prefix_xor(00100100) == 00011100
    +
    12 //
    +
    13 simdjson_inline uint64_t prefix_xor(const uint64_t bitmask) {
    +
    14  // There should be no such thing with a processing supporting avx2
    +
    15  // but not clmul.
    +
    16  __m128i all_ones = _mm_set1_epi8('\xFF');
    +
    17  __m128i result = _mm_clmulepi64_si128(_mm_set_epi64x(0ULL, bitmask), all_ones, 0);
    +
    18  return _mm_cvtsi128_si64(result);
    +
    19 }
    +
    20 
    +
    21 } // unnamed namespace
    +
    22 } // namespace SIMDJSON_IMPLEMENTATION
    +
    23 } // namespace simdjson
    +
    24 
    +
    25 #endif // SIMDJSON_WESTMERE_BITMASK_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/westmere_2end_8h_source.html b/westmere_2end_8h_source.html new file mode 100644 index 000000000..8d37345e4 --- /dev/null +++ b/westmere_2end_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +simdjson: include/simdjson/westmere/end.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    end.h
    +
    +
    +
    1 SIMDJSON_UNTARGET_WESTMERE
    +
    2 #undef SIMDJSON_IMPLEMENTATION
    +
    +
    + + + + diff --git a/westmere_2implementation_8h_source.html b/westmere_2implementation_8h_source.html new file mode 100644 index 000000000..cffb7ec42 --- /dev/null +++ b/westmere_2implementation_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/westmere/implementation.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    implementation.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_IMPLEMENTATION_H
    +
    2 #define SIMDJSON_WESTMERE_IMPLEMENTATION_H
    +
    3 
    +
    4 #include "simdjson/implementation.h"
    +
    5 
    +
    6 // The constructor may be executed on any host, so we take care not to use SIMDJSON_TARGET_WESTMERE
    +
    7 namespace simdjson {
    +
    8 namespace westmere {
    +
    9 
    +
    10 namespace {
    +
    11 using namespace simdjson;
    +
    12 using namespace simdjson::dom;
    +
    13 }
    +
    14 
    +
    18 class implementation final : public simdjson::implementation {
    +
    19 public:
    +
    20  simdjson_inline implementation() : simdjson::implementation("westmere", "Intel/AMD SSE4.2", internal::instruction_set::SSE42 | internal::instruction_set::PCLMULQDQ) {}
    +
    21  simdjson_warn_unused error_code create_dom_parser_implementation(
    +
    22  size_t capacity,
    +
    23  size_t max_length,
    +
    24  std::unique_ptr<internal::dom_parser_implementation>& dst
    +
    25  ) const noexcept final;
    +
    26  simdjson_warn_unused error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept final;
    +
    27  simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept final;
    +
    28 };
    +
    29 
    +
    30 } // namespace westmere
    +
    31 } // namespace simdjson
    +
    32 
    +
    33 #endif // SIMDJSON_WESTMERE_IMPLEMENTATION_H
    +
    An implementation of simdjson for a particular CPU architecture.
    +
    virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
    Validate the UTF-8 string.
    +
    We want to support argument-dependent lookup (ADL).
    +
    error_code
    All possible errors returned by simdjson.
    Definition: error.h:17
    +
    std::string minify(T x)
    Minifies a JSON element or document, printing the smallest possible valid JSON.
    +
    +
    + + + + diff --git a/westmere_2intrinsics_8h_source.html b/westmere_2intrinsics_8h_source.html new file mode 100644 index 000000000..39408a955 --- /dev/null +++ b/westmere_2intrinsics_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +simdjson: include/simdjson/westmere/intrinsics.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    intrinsics.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_INTRINSICS_H
    +
    2 #define SIMDJSON_WESTMERE_INTRINSICS_H
    +
    3 
    +
    4 #if SIMDJSON_VISUAL_STUDIO
    +
    5 // under clang within visual studio, this will include <x86intrin.h>
    +
    6 #include <intrin.h> // visual studio or clang
    +
    7 #else
    +
    8 #include <x86intrin.h> // elsewhere
    +
    9 #endif // SIMDJSON_VISUAL_STUDIO
    +
    10 
    +
    11 
    +
    12 #if SIMDJSON_CLANG_VISUAL_STUDIO
    +
    21 #include <smmintrin.h> // for _mm_alignr_epi8
    +
    22 #include <wmmintrin.h> // for _mm_clmulepi64_si128
    +
    23 #endif
    +
    24 
    +
    25 static_assert(sizeof(__m128i) <= simdjson::SIMDJSON_PADDING, "insufficient padding for westmere");
    +
    26 
    +
    27 #endif // SIMDJSON_WESTMERE_INTRINSICS_H
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    +
    + + + + diff --git a/westmere_2numberparsing_8h_source.html b/westmere_2numberparsing_8h_source.html new file mode 100644 index 000000000..bb857583b --- /dev/null +++ b/westmere_2numberparsing_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +simdjson: include/simdjson/westmere/numberparsing.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    numberparsing.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_NUMBERPARSING_H
    +
    2 #define SIMDJSON_WESTMERE_NUMBERPARSING_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 static simdjson_inline uint32_t parse_eight_digits_unrolled(const uint8_t *chars) {
    +
    9  // this actually computes *16* values so we are being wasteful.
    +
    10  const __m128i ascii0 = _mm_set1_epi8('0');
    +
    11  const __m128i mul_1_10 =
    +
    12  _mm_setr_epi8(10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1);
    +
    13  const __m128i mul_1_100 = _mm_setr_epi16(100, 1, 100, 1, 100, 1, 100, 1);
    +
    14  const __m128i mul_1_10000 =
    +
    15  _mm_setr_epi16(10000, 1, 10000, 1, 10000, 1, 10000, 1);
    +
    16  const __m128i input = _mm_sub_epi8(
    +
    17  _mm_loadu_si128(reinterpret_cast<const __m128i *>(chars)), ascii0);
    +
    18  const __m128i t1 = _mm_maddubs_epi16(input, mul_1_10);
    +
    19  const __m128i t2 = _mm_madd_epi16(t1, mul_1_100);
    +
    20  const __m128i t3 = _mm_packus_epi32(t2, t2);
    +
    21  const __m128i t4 = _mm_madd_epi16(t3, mul_1_10000);
    +
    22  return _mm_cvtsi128_si32(
    +
    23  t4); // only captures the sum of the first 8 digits, drop the rest
    +
    24 }
    +
    25 
    +
    26 } // unnamed namespace
    +
    27 } // namespace SIMDJSON_IMPLEMENTATION
    +
    28 } // namespace simdjson
    +
    29 
    +
    30 #define SIMDJSON_SWAR_NUMBER_PARSING 1
    +
    31 
    +
    32 #include "simdjson/generic/numberparsing.h"
    +
    33 
    +
    34 #endif // SIMDJSON_WESTMERE_NUMBERPARSING_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/westmere_2simd_8h_source.html b/westmere_2simd_8h_source.html new file mode 100644 index 000000000..b36f36d7e --- /dev/null +++ b/westmere_2simd_8h_source.html @@ -0,0 +1,443 @@ + + + + + + + +simdjson: include/simdjson/westmere/simd.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    simd.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_SIMD_H
    +
    2 #define SIMDJSON_WESTMERE_SIMD_H
    +
    3 
    +
    4 #include "simdjson/internal/simdprune_tables.h"
    +
    5 
    +
    6 namespace simdjson {
    +
    7 namespace SIMDJSON_IMPLEMENTATION {
    +
    8 namespace {
    +
    9 namespace simd {
    +
    10 
    +
    11  template<typename Child>
    +
    12  struct base {
    +
    13  __m128i value;
    +
    14 
    +
    15  // Zero constructor
    +
    16  simdjson_inline base() : value{__m128i()} {}
    +
    17 
    +
    18  // Conversion from SIMD register
    +
    19  simdjson_inline base(const __m128i _value) : value(_value) {}
    +
    20 
    +
    21  // Conversion to SIMD register
    +
    22  simdjson_inline operator const __m128i&() const { return this->value; }
    +
    23  simdjson_inline operator __m128i&() { return this->value; }
    +
    24 
    +
    25  // Bit operations
    +
    26  simdjson_inline Child operator|(const Child other) const { return _mm_or_si128(*this, other); }
    +
    27  simdjson_inline Child operator&(const Child other) const { return _mm_and_si128(*this, other); }
    +
    28  simdjson_inline Child operator^(const Child other) const { return _mm_xor_si128(*this, other); }
    +
    29  simdjson_inline Child bit_andnot(const Child other) const { return _mm_andnot_si128(other, *this); }
    +
    30  simdjson_inline Child& operator|=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast | other; return *this_cast; }
    +
    31  simdjson_inline Child& operator&=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast & other; return *this_cast; }
    +
    32  simdjson_inline Child& operator^=(const Child other) { auto this_cast = static_cast<Child*>(this); *this_cast = *this_cast ^ other; return *this_cast; }
    +
    33  };
    +
    34 
    +
    35  // Forward-declared so they can be used by splat and friends.
    +
    36  template<typename T>
    +
    37  struct simd8;
    +
    38 
    +
    39  template<typename T, typename Mask=simd8<bool>>
    +
    40  struct base8: base<simd8<T>> {
    +
    41  typedef uint16_t bitmask_t;
    +
    42  typedef uint32_t bitmask2_t;
    +
    43 
    +
    44  simdjson_inline base8() : base<simd8<T>>() {}
    +
    45  simdjson_inline base8(const __m128i _value) : base<simd8<T>>(_value) {}
    +
    46 
    +
    47  friend simdjson_inline Mask operator==(const simd8<T> lhs, const simd8<T> rhs) { return _mm_cmpeq_epi8(lhs, rhs); }
    +
    48 
    +
    49  static const int SIZE = sizeof(base<simd8<T>>::value);
    +
    50 
    +
    51  template<int N=1>
    +
    52  simdjson_inline simd8<T> prev(const simd8<T> prev_chunk) const {
    +
    53  return _mm_alignr_epi8(*this, prev_chunk, 16 - N);
    +
    54  }
    +
    55  };
    +
    56 
    +
    57  // SIMD byte mask type (returned by things like eq and gt)
    +
    58  template<>
    +
    59  struct simd8<bool>: base8<bool> {
    +
    60  static simdjson_inline simd8<bool> splat(bool _value) { return _mm_set1_epi8(uint8_t(-(!!_value))); }
    +
    61 
    +
    62  simdjson_inline simd8<bool>() : base8() {}
    +
    63  simdjson_inline simd8<bool>(const __m128i _value) : base8<bool>(_value) {}
    +
    64  // Splat constructor
    +
    65  simdjson_inline simd8<bool>(bool _value) : base8<bool>(splat(_value)) {}
    +
    66 
    +
    67  simdjson_inline int to_bitmask() const { return _mm_movemask_epi8(*this); }
    +
    68  simdjson_inline bool any() const { return !_mm_testz_si128(*this, *this); }
    +
    69  simdjson_inline simd8<bool> operator~() const { return *this ^ true; }
    +
    70  };
    +
    71 
    +
    72  template<typename T>
    +
    73  struct base8_numeric: base8<T> {
    +
    74  static simdjson_inline simd8<T> splat(T _value) { return _mm_set1_epi8(_value); }
    +
    75  static simdjson_inline simd8<T> zero() { return _mm_setzero_si128(); }
    +
    76  static simdjson_inline simd8<T> load(const T values[16]) {
    +
    77  return _mm_loadu_si128(reinterpret_cast<const __m128i *>(values));
    +
    78  }
    +
    79  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    80  static simdjson_inline simd8<T> repeat_16(
    +
    81  T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7,
    +
    82  T v8, T v9, T v10, T v11, T v12, T v13, T v14, T v15
    +
    83  ) {
    +
    84  return simd8<T>(
    +
    85  v0, v1, v2, v3, v4, v5, v6, v7,
    +
    86  v8, v9, v10,v11,v12,v13,v14,v15
    +
    87  );
    +
    88  }
    +
    89 
    +
    90  simdjson_inline base8_numeric() : base8<T>() {}
    +
    91  simdjson_inline base8_numeric(const __m128i _value) : base8<T>(_value) {}
    +
    92 
    +
    93  // Store to array
    +
    94  simdjson_inline void store(T dst[16]) const { return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this); }
    +
    95 
    +
    96  // Override to distinguish from bool version
    +
    97  simdjson_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
    +
    98 
    +
    99  // Addition/subtraction are the same for signed and unsigned
    +
    100  simdjson_inline simd8<T> operator+(const simd8<T> other) const { return _mm_add_epi8(*this, other); }
    +
    101  simdjson_inline simd8<T> operator-(const simd8<T> other) const { return _mm_sub_epi8(*this, other); }
    +
    102  simdjson_inline simd8<T>& operator+=(const simd8<T> other) { *this = *this + other; return *static_cast<simd8<T>*>(this); }
    +
    103  simdjson_inline simd8<T>& operator-=(const simd8<T> other) { *this = *this - other; return *static_cast<simd8<T>*>(this); }
    +
    104 
    +
    105  // Perform a lookup assuming the value is between 0 and 16 (undefined behavior for out of range values)
    +
    106  template<typename L>
    +
    107  simdjson_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
    +
    108  return _mm_shuffle_epi8(lookup_table, *this);
    +
    109  }
    +
    110 
    +
    111  // Copies to 'output" all bytes corresponding to a 0 in the mask (interpreted as a bitset).
    +
    112  // Passing a 0 value for mask would be equivalent to writing out every byte to output.
    +
    113  // Only the first 16 - count_ones(mask) bytes of the result are significant but 16 bytes
    +
    114  // get written.
    +
    115  // Design consideration: it seems like a function with the
    +
    116  // signature simd8<L> compress(uint32_t mask) would be
    +
    117  // sensible, but the AVX ISA makes this kind of approach difficult.
    +
    118  template<typename L>
    +
    119  simdjson_inline void compress(uint16_t mask, L * output) const {
    +
    120  using internal::thintable_epi8;
    +
    121  using internal::BitsSetTable256mul2;
    +
    122  using internal::pshufb_combine_table;
    +
    123  // this particular implementation was inspired by work done by @animetosho
    +
    124  // we do it in two steps, first 8 bytes and then second 8 bytes
    +
    125  uint8_t mask1 = uint8_t(mask); // least significant 8 bits
    +
    126  uint8_t mask2 = uint8_t(mask >> 8); // most significant 8 bits
    +
    127  // next line just loads the 64-bit values thintable_epi8[mask1] and
    +
    128  // thintable_epi8[mask2] into a 128-bit register, using only
    +
    129  // two instructions on most compilers.
    +
    130  __m128i shufmask = _mm_set_epi64x(thintable_epi8[mask2], thintable_epi8[mask1]);
    +
    131  // we increment by 0x08 the second half of the mask
    +
    132  shufmask =
    +
    133  _mm_add_epi8(shufmask, _mm_set_epi32(0x08080808, 0x08080808, 0, 0));
    +
    134  // this is the version "nearly pruned"
    +
    135  __m128i pruned = _mm_shuffle_epi8(*this, shufmask);
    +
    136  // we still need to put the two halves together.
    +
    137  // we compute the popcount of the first half:
    +
    138  int pop1 = BitsSetTable256mul2[mask1];
    +
    139  // then load the corresponding mask, what it does is to write
    +
    140  // only the first pop1 bytes from the first 8 bytes, and then
    +
    141  // it fills in with the bytes from the second 8 bytes + some filling
    +
    142  // at the end.
    +
    143  __m128i compactmask =
    +
    144  _mm_loadu_si128(reinterpret_cast<const __m128i *>(pshufb_combine_table + pop1 * 8));
    +
    145  __m128i answer = _mm_shuffle_epi8(pruned, compactmask);
    +
    146  _mm_storeu_si128(reinterpret_cast<__m128i *>(output), answer);
    +
    147  }
    +
    148 
    +
    149  template<typename L>
    +
    150  simdjson_inline simd8<L> lookup_16(
    +
    151  L replace0, L replace1, L replace2, L replace3,
    +
    152  L replace4, L replace5, L replace6, L replace7,
    +
    153  L replace8, L replace9, L replace10, L replace11,
    +
    154  L replace12, L replace13, L replace14, L replace15) const {
    +
    155  return lookup_16(simd8<L>::repeat_16(
    +
    156  replace0, replace1, replace2, replace3,
    +
    157  replace4, replace5, replace6, replace7,
    +
    158  replace8, replace9, replace10, replace11,
    +
    159  replace12, replace13, replace14, replace15
    +
    160  ));
    +
    161  }
    +
    162  };
    +
    163 
    +
    164  // Signed bytes
    +
    165  template<>
    +
    166  struct simd8<int8_t> : base8_numeric<int8_t> {
    +
    167  simdjson_inline simd8() : base8_numeric<int8_t>() {}
    +
    168  simdjson_inline simd8(const __m128i _value) : base8_numeric<int8_t>(_value) {}
    +
    169  // Splat constructor
    +
    170  simdjson_inline simd8(int8_t _value) : simd8(splat(_value)) {}
    +
    171  // Array constructor
    +
    172  simdjson_inline simd8(const int8_t* values) : simd8(load(values)) {}
    +
    173  // Member-by-member initialization
    +
    174  simdjson_inline simd8(
    +
    175  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
    +
    176  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
    +
    177  ) : simd8(_mm_setr_epi8(
    +
    178  v0, v1, v2, v3, v4, v5, v6, v7,
    +
    179  v8, v9, v10,v11,v12,v13,v14,v15
    +
    180  )) {}
    +
    181  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    182  simdjson_inline static simd8<int8_t> repeat_16(
    +
    183  int8_t v0, int8_t v1, int8_t v2, int8_t v3, int8_t v4, int8_t v5, int8_t v6, int8_t v7,
    +
    184  int8_t v8, int8_t v9, int8_t v10, int8_t v11, int8_t v12, int8_t v13, int8_t v14, int8_t v15
    +
    185  ) {
    +
    186  return simd8<int8_t>(
    +
    187  v0, v1, v2, v3, v4, v5, v6, v7,
    +
    188  v8, v9, v10,v11,v12,v13,v14,v15
    +
    189  );
    +
    190  }
    +
    191 
    +
    192  // Order-sensitive comparisons
    +
    193  simdjson_inline simd8<int8_t> max_val(const simd8<int8_t> other) const { return _mm_max_epi8(*this, other); }
    +
    194  simdjson_inline simd8<int8_t> min_val(const simd8<int8_t> other) const { return _mm_min_epi8(*this, other); }
    +
    195  simdjson_inline simd8<bool> operator>(const simd8<int8_t> other) const { return _mm_cmpgt_epi8(*this, other); }
    +
    196  simdjson_inline simd8<bool> operator<(const simd8<int8_t> other) const { return _mm_cmpgt_epi8(other, *this); }
    +
    197  };
    +
    198 
    +
    199  // Unsigned bytes
    +
    200  template<>
    +
    201  struct simd8<uint8_t>: base8_numeric<uint8_t> {
    +
    202  simdjson_inline simd8() : base8_numeric<uint8_t>() {}
    +
    203  simdjson_inline simd8(const __m128i _value) : base8_numeric<uint8_t>(_value) {}
    +
    204  // Splat constructor
    +
    205  simdjson_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
    +
    206  // Array constructor
    +
    207  simdjson_inline simd8(const uint8_t* values) : simd8(load(values)) {}
    +
    208  // Member-by-member initialization
    +
    209  simdjson_inline simd8(
    +
    210  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
    +
    211  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
    +
    212  ) : simd8(_mm_setr_epi8(
    +
    213  v0, v1, v2, v3, v4, v5, v6, v7,
    +
    214  v8, v9, v10,v11,v12,v13,v14,v15
    +
    215  )) {}
    +
    216  // Repeat 16 values as many times as necessary (usually for lookup tables)
    +
    217  simdjson_inline static simd8<uint8_t> repeat_16(
    +
    218  uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7,
    +
    219  uint8_t v8, uint8_t v9, uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15
    +
    220  ) {
    +
    221  return simd8<uint8_t>(
    +
    222  v0, v1, v2, v3, v4, v5, v6, v7,
    +
    223  v8, v9, v10,v11,v12,v13,v14,v15
    +
    224  );
    +
    225  }
    +
    226 
    +
    227  // Saturated math
    +
    228  simdjson_inline simd8<uint8_t> saturating_add(const simd8<uint8_t> other) const { return _mm_adds_epu8(*this, other); }
    +
    229  simdjson_inline simd8<uint8_t> saturating_sub(const simd8<uint8_t> other) const { return _mm_subs_epu8(*this, other); }
    +
    230 
    +
    231  // Order-specific operations
    +
    232  simdjson_inline simd8<uint8_t> max_val(const simd8<uint8_t> other) const { return _mm_max_epu8(*this, other); }
    +
    233  simdjson_inline simd8<uint8_t> min_val(const simd8<uint8_t> other) const { return _mm_min_epu8(*this, other); }
    +
    234  // Same as >, but only guarantees true is nonzero (< guarantees true = -1)
    +
    235  simdjson_inline simd8<uint8_t> gt_bits(const simd8<uint8_t> other) const { return this->saturating_sub(other); }
    +
    236  // Same as <, but only guarantees true is nonzero (< guarantees true = -1)
    +
    237  simdjson_inline simd8<uint8_t> lt_bits(const simd8<uint8_t> other) const { return other.saturating_sub(*this); }
    +
    238  simdjson_inline simd8<bool> operator<=(const simd8<uint8_t> other) const { return other.max_val(*this) == other; }
    +
    239  simdjson_inline simd8<bool> operator>=(const simd8<uint8_t> other) const { return other.min_val(*this) == other; }
    +
    240  simdjson_inline simd8<bool> operator>(const simd8<uint8_t> other) const { return this->gt_bits(other).any_bits_set(); }
    +
    241  simdjson_inline simd8<bool> operator<(const simd8<uint8_t> other) const { return this->gt_bits(other).any_bits_set(); }
    +
    242 
    +
    243  // Bit-specific operations
    +
    244  simdjson_inline simd8<bool> bits_not_set() const { return *this == uint8_t(0); }
    +
    245  simdjson_inline simd8<bool> bits_not_set(simd8<uint8_t> bits) const { return (*this & bits).bits_not_set(); }
    +
    246  simdjson_inline simd8<bool> any_bits_set() const { return ~this->bits_not_set(); }
    +
    247  simdjson_inline simd8<bool> any_bits_set(simd8<uint8_t> bits) const { return ~this->bits_not_set(bits); }
    +
    248  simdjson_inline bool is_ascii() const { return _mm_movemask_epi8(*this) == 0; }
    +
    249  simdjson_inline bool bits_not_set_anywhere() const { return _mm_testz_si128(*this, *this); }
    +
    250  simdjson_inline bool any_bits_set_anywhere() const { return !bits_not_set_anywhere(); }
    +
    251  simdjson_inline bool bits_not_set_anywhere(simd8<uint8_t> bits) const { return _mm_testz_si128(*this, bits); }
    +
    252  simdjson_inline bool any_bits_set_anywhere(simd8<uint8_t> bits) const { return !bits_not_set_anywhere(bits); }
    +
    253  template<int N>
    +
    254  simdjson_inline simd8<uint8_t> shr() const { return simd8<uint8_t>(_mm_srli_epi16(*this, N)) & uint8_t(0xFFu >> N); }
    +
    255  template<int N>
    +
    256  simdjson_inline simd8<uint8_t> shl() const { return simd8<uint8_t>(_mm_slli_epi16(*this, N)) & uint8_t(0xFFu << N); }
    +
    257  // Get one of the bits and make a bitmask out of it.
    +
    258  // e.g. value.get_bit<7>() gets the high bit
    +
    259  template<int N>
    +
    260  simdjson_inline int get_bit() const { return _mm_movemask_epi8(_mm_slli_epi16(*this, 7-N)); }
    +
    261  };
    +
    262 
    +
    263  template<typename T>
    +
    264  struct simd8x64 {
    +
    265  static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
    +
    266  static_assert(NUM_CHUNKS == 4, "Westmere kernel should use four registers per 64-byte block.");
    +
    267  const simd8<T> chunks[NUM_CHUNKS];
    +
    268 
    +
    269  simd8x64(const simd8x64<T>& o) = delete; // no copy allowed
    +
    270  simd8x64<T>& operator=(const simd8<T>& other) = delete; // no assignment allowed
    +
    271  simd8x64() = delete; // no default constructor allowed
    +
    272 
    +
    273  simdjson_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1, const simd8<T> chunk2, const simd8<T> chunk3) : chunks{chunk0, chunk1, chunk2, chunk3} {}
    +
    274  simdjson_inline simd8x64(const T ptr[64]) : chunks{simd8<T>::load(ptr), simd8<T>::load(ptr+16), simd8<T>::load(ptr+32), simd8<T>::load(ptr+48)} {}
    +
    275 
    +
    276  simdjson_inline void store(T ptr[64]) const {
    +
    277  this->chunks[0].store(ptr+sizeof(simd8<T>)*0);
    +
    278  this->chunks[1].store(ptr+sizeof(simd8<T>)*1);
    +
    279  this->chunks[2].store(ptr+sizeof(simd8<T>)*2);
    +
    280  this->chunks[3].store(ptr+sizeof(simd8<T>)*3);
    +
    281  }
    +
    282 
    +
    283  simdjson_inline simd8<T> reduce_or() const {
    +
    284  return (this->chunks[0] | this->chunks[1]) | (this->chunks[2] | this->chunks[3]);
    +
    285  }
    +
    286 
    +
    287  simdjson_inline uint64_t compress(uint64_t mask, T * output) const {
    +
    288  this->chunks[0].compress(uint16_t(mask), output);
    +
    289  this->chunks[1].compress(uint16_t(mask >> 16), output + 16 - count_ones(mask & 0xFFFF));
    +
    290  this->chunks[2].compress(uint16_t(mask >> 32), output + 32 - count_ones(mask & 0xFFFFFFFF));
    +
    291  this->chunks[3].compress(uint16_t(mask >> 48), output + 48 - count_ones(mask & 0xFFFFFFFFFFFF));
    +
    292  return 64 - count_ones(mask);
    +
    293  }
    +
    294 
    +
    295  simdjson_inline uint64_t to_bitmask() const {
    +
    296  uint64_t r0 = uint32_t(this->chunks[0].to_bitmask() );
    +
    297  uint64_t r1 = this->chunks[1].to_bitmask() ;
    +
    298  uint64_t r2 = this->chunks[2].to_bitmask() ;
    +
    299  uint64_t r3 = this->chunks[3].to_bitmask() ;
    +
    300  return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48);
    +
    301  }
    +
    302 
    +
    303  simdjson_inline uint64_t eq(const T m) const {
    +
    304  const simd8<T> mask = simd8<T>::splat(m);
    +
    305  return simd8x64<bool>(
    +
    306  this->chunks[0] == mask,
    +
    307  this->chunks[1] == mask,
    +
    308  this->chunks[2] == mask,
    +
    309  this->chunks[3] == mask
    +
    310  ).to_bitmask();
    +
    311  }
    +
    312 
    +
    313  simdjson_inline uint64_t eq(const simd8x64<uint8_t> &other) const {
    +
    314  return simd8x64<bool>(
    +
    315  this->chunks[0] == other.chunks[0],
    +
    316  this->chunks[1] == other.chunks[1],
    +
    317  this->chunks[2] == other.chunks[2],
    +
    318  this->chunks[3] == other.chunks[3]
    +
    319  ).to_bitmask();
    +
    320  }
    +
    321 
    +
    322  simdjson_inline uint64_t lteq(const T m) const {
    +
    323  const simd8<T> mask = simd8<T>::splat(m);
    +
    324  return simd8x64<bool>(
    +
    325  this->chunks[0] <= mask,
    +
    326  this->chunks[1] <= mask,
    +
    327  this->chunks[2] <= mask,
    +
    328  this->chunks[3] <= mask
    +
    329  ).to_bitmask();
    +
    330  }
    +
    331  }; // struct simd8x64<T>
    +
    332 
    +
    333 } // namespace simd
    +
    334 } // unnamed namespace
    +
    335 } // namespace SIMDJSON_IMPLEMENTATION
    +
    336 } // namespace simdjson
    +
    337 
    +
    338 #endif // SIMDJSON_WESTMERE_SIMD_INPUT_H
    +
    simdjson_unused simdjson_inline bool operator==(const raw_json_string &a, std::string_view c) noexcept
    Comparisons between raw_json_string and std::string_view instances are potentially unsafe: the user i...
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + + diff --git a/westmere_2stringparsing_8h_source.html b/westmere_2stringparsing_8h_source.html new file mode 100644 index 000000000..cd9566479 --- /dev/null +++ b/westmere_2stringparsing_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: include/simdjson/westmere/stringparsing.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    stringparsing.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_STRINGPARSING_H
    +
    2 #define SIMDJSON_WESTMERE_STRINGPARSING_H
    +
    3 
    +
    4 namespace simdjson {
    +
    5 namespace SIMDJSON_IMPLEMENTATION {
    +
    6 namespace {
    +
    7 
    +
    8 using namespace simd;
    +
    9 
    +
    10 // Holds backslashes and quotes locations.
    +
    11 struct backslash_and_quote {
    +
    12 public:
    +
    13  static constexpr uint32_t BYTES_PROCESSED = 32;
    +
    14  simdjson_inline static backslash_and_quote copy_and_find(const uint8_t *src, uint8_t *dst);
    +
    15 
    +
    16  simdjson_inline bool has_quote_first() { return ((bs_bits - 1) & quote_bits) != 0; }
    +
    17  simdjson_inline bool has_backslash() { return bs_bits != 0; }
    +
    18  simdjson_inline int quote_index() { return trailing_zeroes(quote_bits); }
    +
    19  simdjson_inline int backslash_index() { return trailing_zeroes(bs_bits); }
    +
    20 
    +
    21  uint32_t bs_bits;
    +
    22  uint32_t quote_bits;
    +
    23 }; // struct backslash_and_quote
    +
    24 
    +
    25 simdjson_inline backslash_and_quote backslash_and_quote::copy_and_find(const uint8_t *src, uint8_t *dst) {
    +
    26  // this can read up to 31 bytes beyond the buffer size, but we require
    +
    27  // SIMDJSON_PADDING of padding
    +
    28  static_assert(SIMDJSON_PADDING >= (BYTES_PROCESSED - 1), "backslash and quote finder must process fewer than SIMDJSON_PADDING bytes");
    +
    29  simd8<uint8_t> v0(src);
    +
    30  simd8<uint8_t> v1(src + 16);
    +
    31  v0.store(dst);
    +
    32  v1.store(dst + 16);
    +
    33  uint64_t bs_and_quote = simd8x64<bool>(v0 == '\\', v1 == '\\', v0 == '"', v1 == '"').to_bitmask();
    +
    34  return {
    +
    35  uint32_t(bs_and_quote), // bs_bits
    +
    36  uint32_t(bs_and_quote >> 32) // quote_bits
    +
    37  };
    +
    38 }
    +
    39 
    +
    40 } // unnamed namespace
    +
    41 } // namespace SIMDJSON_IMPLEMENTATION
    +
    42 } // namespace simdjson
    +
    43 
    +
    44 #endif // SIMDJSON_WESTMERE_STRINGPARSING_H
    +
    We want to support argument-dependent lookup (ADL).
    +
    constexpr size_t SIMDJSON_PADDING
    The amount of padding needed in a buffer to parse JSON.
    Definition: common_defs.h:45
    +
    +
    + + + + diff --git a/westmere_8h_source.html b/westmere_8h_source.html new file mode 100644 index 000000000..1389627c5 --- /dev/null +++ b/westmere_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +simdjson: include/simdjson/westmere.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    simdjson +  3.1.0 +
    +
    Ridiculously Fast JSON
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    westmere.h
    +
    +
    +
    1 #ifndef SIMDJSON_WESTMERE_H
    +
    2 #define SIMDJSON_WESTMERE_H
    +
    3 
    + +
    5 
    +
    6 #if SIMDJSON_IMPLEMENTATION_WESTMERE
    +
    7 
    +
    8 #if SIMDJSON_CAN_ALWAYS_RUN_WESTMERE
    +
    9 #define SIMDJSON_TARGET_WESTMERE
    +
    10 #define SIMDJSON_UNTARGET_WESTMERE
    +
    11 #else
    +
    12 #define SIMDJSON_TARGET_WESTMERE SIMDJSON_TARGET_REGION("sse4.2,pclmul")
    +
    13 #define SIMDJSON_UNTARGET_WESTMERE SIMDJSON_UNTARGET_REGION
    +
    14 #endif
    +
    15 
    +
    16 namespace simdjson {
    +
    20 namespace westmere {
    +
    21 } // namespace westmere
    +
    22 } // namespace simdjson
    +
    23 
    +
    24 //
    +
    25 // These two need to be included outside SIMDJSON_TARGET_WESTMERE
    +
    26 //
    +
    27 #include "simdjson/westmere/implementation.h"
    +
    28 #include "simdjson/westmere/intrinsics.h"
    +
    29 
    +
    30 //
    +
    31 // The rest need to be inside the region
    +
    32 //
    +
    33 #include "simdjson/westmere/begin.h"
    +
    34 
    +
    35 // Declarations
    +
    36 #include "simdjson/generic/dom_parser_implementation.h"
    +
    37 #include "simdjson/westmere/bitmanipulation.h"
    +
    38 #include "simdjson/westmere/bitmask.h"
    +
    39 #include "simdjson/westmere/simd.h"
    +
    40 #include "simdjson/generic/jsoncharutils.h"
    +
    41 #include "simdjson/generic/atomparsing.h"
    +
    42 #include "simdjson/westmere/stringparsing.h"
    +
    43 #include "simdjson/westmere/numberparsing.h"
    +
    44 #include "simdjson/westmere/end.h"
    +
    45 
    +
    46 #endif // SIMDJSON_IMPLEMENTATION_WESTMERE
    +
    47 #endif // SIMDJSON_WESTMERE_COMMON_H
    +
    Includes common stuff needed for implementations.
    +
    We want to support argument-dependent lookup (ADL).
    +
    +
    + + + +