diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ae2fa382..e4cef5457 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.14) project( simdjson # The version number is modified by tools/release.py - VERSION 4.2.3 + VERSION 4.2.4 DESCRIPTION "Parsing gigabytes of JSON per second" HOMEPAGE_URL "https://simdjson.org/" LANGUAGES CXX C diff --git a/Doxyfile b/Doxyfile index 4112fe85a..25965b297 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = simdjson # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "4.2.3" +PROJECT_NUMBER = "4.2.4" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/include/simdjson/simdjson_version.h b/include/simdjson/simdjson_version.h index 03ca42b37..2f7004b46 100644 --- a/include/simdjson/simdjson_version.h +++ b/include/simdjson/simdjson_version.h @@ -4,7 +4,7 @@ #define SIMDJSON_SIMDJSON_VERSION_H /** The version of simdjson being used (major.minor.revision) */ -#define SIMDJSON_VERSION "4.2.3" +#define SIMDJSON_VERSION "4.2.4" namespace simdjson { enum { @@ -19,7 +19,7 @@ enum { /** * The revision (major.minor.REVISION) of simdjson being used. */ - SIMDJSON_VERSION_REVISION = 3 + SIMDJSON_VERSION_REVISION = 4 }; } // namespace simdjson diff --git a/singleheader/simdjson.cpp b/singleheader/simdjson.cpp index 687d98cd2..bcd6da639 100644 --- a/singleheader/simdjson.cpp +++ b/singleheader/simdjson.cpp @@ -1,4 +1,4 @@ -/* auto-generated on 2025-12-12 17:50:52 -0500. version 4.2.3 Do not edit! */ +/* auto-generated on 2025-12-17 20:32:36 -0500. version 4.2.4 Do not edit! */ /* including simdjson.cpp: */ /* begin file simdjson.cpp */ #define SIMDJSON_SRC_SIMDJSON_CPP diff --git a/singleheader/simdjson.h b/singleheader/simdjson.h index 2b9af4306..1d6560e80 100644 --- a/singleheader/simdjson.h +++ b/singleheader/simdjson.h @@ -1,4 +1,4 @@ -/* auto-generated on 2025-12-12 17:50:52 -0500. version 4.2.3 Do not edit! */ +/* auto-generated on 2025-12-17 20:32:36 -0500. version 4.2.4 Do not edit! */ /* including simdjson.h: */ /* begin file simdjson.h */ #ifndef SIMDJSON_H @@ -2513,7 +2513,7 @@ namespace std { #define SIMDJSON_SIMDJSON_VERSION_H /** The version of simdjson being used (major.minor.revision) */ -#define SIMDJSON_VERSION "4.2.3" +#define SIMDJSON_VERSION "4.2.4" namespace simdjson { enum { @@ -2528,7 +2528,7 @@ enum { /** * The revision (major.minor.REVISION) of simdjson being used. */ - SIMDJSON_VERSION_REVISION = 3 + SIMDJSON_VERSION_REVISION = 4 }; } // namespace simdjson @@ -35275,7 +35275,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -35309,7 +35311,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -35656,7 +35659,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -35688,7 +35693,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -37157,9 +37163,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(arm64::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(arm64::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -37298,7 +37303,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -38234,7 +38239,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -38278,7 +38285,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -39463,7 +39471,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -39511,7 +39521,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -46935,8 +46946,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -49740,7 +49751,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -49774,7 +49787,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -50121,7 +50135,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -50153,7 +50169,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -51622,9 +51639,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(fallback::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(fallback::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -51763,7 +51779,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -52699,7 +52715,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -52743,7 +52761,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -53928,7 +53947,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -53976,7 +53997,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -61400,8 +61422,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -64704,7 +64726,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -64738,7 +64762,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -65085,7 +65110,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -65117,7 +65144,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -66586,9 +66614,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(haswell::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(haswell::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -66727,7 +66754,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -67663,7 +67690,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -67707,7 +67736,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -68892,7 +68922,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -68940,7 +68972,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -76364,8 +76397,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -79668,7 +79701,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -79702,7 +79737,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -80049,7 +80085,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -80081,7 +80119,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -81550,9 +81589,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(icelake::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(icelake::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -81691,7 +81729,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -82627,7 +82665,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -82671,7 +82711,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -83856,7 +83897,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -83904,7 +83947,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -91328,8 +91372,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -94747,7 +94791,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -94781,7 +94827,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -95128,7 +95175,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -95160,7 +95209,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -96629,9 +96679,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(ppc64::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(ppc64::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -96770,7 +96819,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -97706,7 +97755,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -97750,7 +97801,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -98935,7 +98987,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -98983,7 +99037,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -106407,8 +106462,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -110142,7 +110197,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -110176,7 +110233,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -110523,7 +110581,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -110555,7 +110615,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -112024,9 +112085,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(westmere::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(westmere::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -112165,7 +112225,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -113101,7 +113161,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -113145,7 +113207,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -114330,7 +114393,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -114378,7 +114443,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -121802,8 +121868,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -125014,7 +125080,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -125048,7 +125116,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -125395,7 +125464,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -125427,7 +125498,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -126896,9 +126968,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(lsx::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(lsx::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -127037,7 +127108,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -127973,7 +128044,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -128017,7 +128090,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -129202,7 +129276,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -129250,7 +129326,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -136674,8 +136751,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template @@ -139899,7 +139976,9 @@ public: */ simdjson_inline simdjson_result at(size_t index) noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -139933,7 +140012,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -140280,7 +140360,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -140312,7 +140394,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the defaul 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. * @@ -141781,9 +141864,8 @@ struct has_custom_serialization : std::false_type {}; inline constexpr struct serialize_tag { template - requires custom_deserializable - constexpr void operator()(lasx::builder::string_builder& b, T& obj) const{ - return tag_invoke(*this, b, obj); + constexpr void operator()(lasx::builder::string_builder& b, T&& obj) const{ + return tag_invoke(*this, b, std::forward(obj)); } @@ -141922,7 +142004,7 @@ public: template requires(require_custom_serialization) - simdjson_inline void append(const T &val); + simdjson_inline void append(T &&val); // Support for string-like types template @@ -142858,7 +142940,9 @@ public: simdjson_inline simdjson_result end() & noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -142902,7 +142986,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -144087,7 +144172,9 @@ public: simdjson_inline simdjson_result begin() noexcept; simdjson_inline simdjson_result end() noexcept; /** - * Look up a field by name on an object (order-sensitive). + * Look up a field by name on an object (order-sensitive). By order-sensitive, we mean that + * fields must be accessed in the order they appear in the JSON text (although you can + * skip fields). See find_field_unordered() and operator[] for an order-insensitive version. * * 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 }`: @@ -144135,7 +144222,8 @@ public: * 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 + * We default operator[] on find_field_unordered() for convenience. + * It is the default 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. * @@ -151559,8 +151647,8 @@ simdjson_inline void string_builder::append(const T &opt) { template requires(require_custom_serialization) -simdjson_inline void string_builder::append(const T &val) { - serialize(*this, val); +simdjson_inline void string_builder::append(T &&val) { + serialize(*this, std::forward(val)); } template diff --git a/singleheader/singleheader.zip b/singleheader/singleheader.zip index 6a71b16c2..97a79aebe 100644 Binary files a/singleheader/singleheader.zip and b/singleheader/singleheader.zip differ