Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 980f2ad3af | |||
| 7ad9fe63a6 | |||
| 7987418b1f | |||
| 5e871f6724 |
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.14)
|
|||||||
project(
|
project(
|
||||||
simdjson
|
simdjson
|
||||||
# The version number is modified by tools/release.py
|
# The version number is modified by tools/release.py
|
||||||
VERSION 4.2.3
|
VERSION 4.2.4
|
||||||
DESCRIPTION "Parsing gigabytes of JSON per second"
|
DESCRIPTION "Parsing gigabytes of JSON per second"
|
||||||
HOMEPAGE_URL "https://simdjson.org/"
|
HOMEPAGE_URL "https://simdjson.org/"
|
||||||
LANGUAGES CXX C
|
LANGUAGES CXX C
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ PROJECT_NAME = simdjson
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# 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
|
# 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
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
|||||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 226 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 136 KiB |
@@ -403,7 +403,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* JSON `{ "x": 1, "y": 2, "z": 3 }`:
|
||||||
@@ -447,7 +449,8 @@ public:
|
|||||||
* missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object
|
* 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.
|
* 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
|
* 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.
|
* APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -519,8 +519,8 @@ simdjson_inline void string_builder::append(const T &opt) {
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@@ -24,9 +24,8 @@ struct has_custom_serialization : std::false_type {};
|
|||||||
|
|
||||||
inline constexpr struct serialize_tag {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(SIMDJSON_IMPLEMENTATION::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(SIMDJSON_IMPLEMENTATION::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -165,7 +164,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* JSON `{ "x": 1, "y": 2, "z": 3 }`:
|
||||||
@@ -78,7 +80,8 @@ public:
|
|||||||
* missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object
|
* 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.
|
* 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
|
* 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.
|
* APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -395,7 +395,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* JSON `{ "x": 1, "y": 2, "z": 3 }`:
|
||||||
@@ -429,7 +431,8 @@ public:
|
|||||||
* missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object
|
* 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.
|
* 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
|
* 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.
|
* APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.
|
||||||
*
|
*
|
||||||
@@ -776,7 +779,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> 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
|
* 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 }`:
|
* JSON `{ "x": 1, "y": 2, "z": 3 }`:
|
||||||
@@ -808,7 +813,8 @@ public:
|
|||||||
* missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object
|
* 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.
|
* 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
|
* 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.
|
* APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#define SIMDJSON_SIMDJSON_VERSION_H
|
#define SIMDJSON_SIMDJSON_VERSION_H
|
||||||
|
|
||||||
/** The version of simdjson being used (major.minor.revision) */
|
/** The version of simdjson being used (major.minor.revision) */
|
||||||
#define SIMDJSON_VERSION "4.2.3"
|
#define SIMDJSON_VERSION "4.2.4"
|
||||||
|
|
||||||
namespace simdjson {
|
namespace simdjson {
|
||||||
enum {
|
enum {
|
||||||
@@ -19,7 +19,7 @@ enum {
|
|||||||
/**
|
/**
|
||||||
* The revision (major.minor.REVISION) of simdjson being used.
|
* The revision (major.minor.REVISION) of simdjson being used.
|
||||||
*/
|
*/
|
||||||
SIMDJSON_VERSION_REVISION = 3
|
SIMDJSON_VERSION_REVISION = 4
|
||||||
};
|
};
|
||||||
} // namespace simdjson
|
} // namespace simdjson
|
||||||
|
|
||||||
|
|||||||
@@ -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: */
|
/* including simdjson.cpp: */
|
||||||
/* begin file simdjson.cpp */
|
/* begin file simdjson.cpp */
|
||||||
#define SIMDJSON_SRC_SIMDJSON_CPP
|
#define SIMDJSON_SRC_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.h: */
|
/* including simdjson.h: */
|
||||||
/* begin file simdjson.h */
|
/* begin file simdjson.h */
|
||||||
#ifndef SIMDJSON_H
|
#ifndef SIMDJSON_H
|
||||||
@@ -2513,7 +2513,7 @@ namespace std {
|
|||||||
#define SIMDJSON_SIMDJSON_VERSION_H
|
#define SIMDJSON_SIMDJSON_VERSION_H
|
||||||
|
|
||||||
/** The version of simdjson being used (major.minor.revision) */
|
/** The version of simdjson being used (major.minor.revision) */
|
||||||
#define SIMDJSON_VERSION "4.2.3"
|
#define SIMDJSON_VERSION "4.2.4"
|
||||||
|
|
||||||
namespace simdjson {
|
namespace simdjson {
|
||||||
enum {
|
enum {
|
||||||
@@ -2528,7 +2528,7 @@ enum {
|
|||||||
/**
|
/**
|
||||||
* The revision (major.minor.REVISION) of simdjson being used.
|
* The revision (major.minor.REVISION) of simdjson being used.
|
||||||
*/
|
*/
|
||||||
SIMDJSON_VERSION_REVISION = 3
|
SIMDJSON_VERSION_REVISION = 4
|
||||||
};
|
};
|
||||||
} // namespace simdjson
|
} // namespace simdjson
|
||||||
|
|
||||||
@@ -35275,7 +35275,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<arm64::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<arm64::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(arm64::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(arm64::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -37298,7 +37303,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -38234,7 +38239,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -49740,7 +49751,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<fallback::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<fallback::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(fallback::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(fallback::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -51763,7 +51779,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -52699,7 +52715,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -64704,7 +64726,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<haswell::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<haswell::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(haswell::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(haswell::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -66727,7 +66754,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -67663,7 +67690,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -79668,7 +79701,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<icelake::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<icelake::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(icelake::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(icelake::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -81691,7 +81729,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -82627,7 +82665,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -94747,7 +94791,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<ppc64::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<ppc64::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(ppc64::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(ppc64::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -96770,7 +96819,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -97706,7 +97755,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -110142,7 +110197,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<westmere::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<westmere::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(westmere::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(westmere::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -112165,7 +112225,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -113101,7 +113161,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -125014,7 +125080,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<lsx::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<lsx::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(lsx::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(lsx::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -127037,7 +127108,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -127973,7 +128044,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -139899,7 +139976,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
simdjson_inline simdjson_result<value> at(size_t index) noexcept;
|
simdjson_inline simdjson_result<value> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<lasx::ondemand::array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<lasx::ondemand::array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 {
|
inline constexpr struct serialize_tag {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires custom_deserializable<T>
|
constexpr void operator()(lasx::builder::string_builder& b, T&& obj) const{
|
||||||
constexpr void operator()(lasx::builder::string_builder& b, T& obj) const{
|
return tag_invoke(*this, b, std::forward<T>(obj));
|
||||||
return tag_invoke(*this, b, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -141922,7 +142004,7 @@ public:
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void append(const T &val);
|
simdjson_inline void append(T &&val);
|
||||||
|
|
||||||
// Support for string-like types
|
// Support for string-like types
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -142858,7 +142940,9 @@ public:
|
|||||||
simdjson_inline simdjson_result<array_iterator> end() & noexcept;
|
simdjson_inline simdjson_result<array_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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<object_iterator> begin() noexcept;
|
simdjson_inline simdjson_result<object_iterator> begin() noexcept;
|
||||||
simdjson_inline simdjson_result<object_iterator> end() noexcept;
|
simdjson_inline simdjson_result<object_iterator> 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
|
* 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 }`:
|
* 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
|
* 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.
|
* 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
|
* 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.
|
* 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 <typename T>
|
template <typename T>
|
||||||
requires(require_custom_serialization<T>)
|
requires(require_custom_serialization<T>)
|
||||||
simdjson_inline void string_builder::append(const T &val) {
|
simdjson_inline void string_builder::append(T &&val) {
|
||||||
serialize(*this, val);
|
serialize(*this, std::forward<T>(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@@ -17,6 +17,33 @@ struct Car {
|
|||||||
std::vector<double> tire_pressure;
|
std::vector<double> tire_pressure;
|
||||||
}; // Car
|
}; // Car
|
||||||
|
|
||||||
|
|
||||||
|
#if SIMDJSON_SUPPORTS_CONCEPTS
|
||||||
|
struct Car2549 {
|
||||||
|
std::string make;
|
||||||
|
std::string model;
|
||||||
|
int64_t year;
|
||||||
|
std::vector<float> tire_pressure;
|
||||||
|
};
|
||||||
|
namespace simdjson {
|
||||||
|
// we intentionally pass by non-const reference to car.
|
||||||
|
template <typename builder_type>
|
||||||
|
void tag_invoke(serialize_tag, builder_type& builder, Car2549& car) {
|
||||||
|
builder.start_object();
|
||||||
|
builder.append_key_value("make", car.make);
|
||||||
|
builder.append_comma();
|
||||||
|
builder.append_key_value("model", car.model);
|
||||||
|
builder.append_comma();
|
||||||
|
builder.append_key_value("year", car.year);
|
||||||
|
builder.append_comma();
|
||||||
|
builder.append_key_value("tire_pressure", car.tire_pressure);
|
||||||
|
builder.end_object();
|
||||||
|
}
|
||||||
|
} // namespace simdjson
|
||||||
|
|
||||||
|
static_assert(simdjson::require_custom_serialization<Car2549>);
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace builder_tests {
|
namespace builder_tests {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -428,6 +455,21 @@ bool car_test() {
|
|||||||
TEST_SUCCEED();
|
TEST_SUCCEED();
|
||||||
}
|
}
|
||||||
#if SIMDJSON_SUPPORTS_CONCEPTS
|
#if SIMDJSON_SUPPORTS_CONCEPTS
|
||||||
|
|
||||||
|
bool issue2549() {
|
||||||
|
TEST_START();
|
||||||
|
simdjson::builder::string_builder sb;
|
||||||
|
Car2549 c = { "Toyota", "Corolla", 2017, {1.0f,2.0f,3.0f} };
|
||||||
|
sb.start_object();
|
||||||
|
sb.append_key_value("car", c);
|
||||||
|
sb.end_object();
|
||||||
|
std::string_view p;
|
||||||
|
auto result = sb.view().get(p);
|
||||||
|
ASSERT_SUCCESS(result);
|
||||||
|
ASSERT_EQUAL(p, "{\"car\":{\"make\":\"Toyota\",\"model\":\"Corolla\",\"year\":2017,\"tire_pressure\":[1.0,2.0,3.0]}}");
|
||||||
|
TEST_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
bool car_test_template() {
|
bool car_test_template() {
|
||||||
TEST_START();
|
TEST_START();
|
||||||
simdjson::builder::string_builder sb;
|
simdjson::builder::string_builder sb;
|
||||||
@@ -616,7 +658,7 @@ bool run() {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if SIMDJSON_SUPPORTS_CONCEPTS
|
#if SIMDJSON_SUPPORTS_CONCEPTS
|
||||||
car_test_template() && serialize_optional() &&
|
issue2549() && car_test_template() && serialize_optional() &&
|
||||||
#endif
|
#endif
|
||||||
append_char() && append_integer() && append_float() && append_null() &&
|
append_char() && append_integer() && append_float() && append_null() &&
|
||||||
clear() && escape_and_append() && escape_and_append_with_quotes() &&
|
clear() && escape_and_append() && escape_and_append_with_quotes() &&
|
||||||
|
|||||||
@@ -661,6 +661,8 @@ bool test_array_of_objects_with_concept() {
|
|||||||
TEST_SUCCEED();
|
TEST_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__cpp_pp_embed) && __cpp_pp_embed >= 202502L
|
||||||
|
#define TEST_EMBED_SUPPORTED
|
||||||
/**
|
/**
|
||||||
* Test: #embed support for external JSON files (C++26)
|
* Test: #embed support for external JSON files (C++26)
|
||||||
*/
|
*/
|
||||||
@@ -688,6 +690,7 @@ bool test_embed_twitter_json() {
|
|||||||
|
|
||||||
TEST_SUCCEED();
|
TEST_SUCCEED();
|
||||||
}
|
}
|
||||||
|
#endif // defined(__cpp_pp_embed) && __cpp_pp_embed >= 202502L
|
||||||
|
|
||||||
bool run() {
|
bool run() {
|
||||||
return test_basic_object() &&
|
return test_basic_object() &&
|
||||||
@@ -713,8 +716,11 @@ bool run() {
|
|||||||
test_user_config_example() &&
|
test_user_config_example() &&
|
||||||
test_nested_servers_example() &&
|
test_nested_servers_example() &&
|
||||||
test_top_level_array_example() &&
|
test_top_level_array_example() &&
|
||||||
test_array_of_objects_with_concept() &&
|
test_array_of_objects_with_concept()
|
||||||
test_embed_twitter_json();
|
#ifdef TEST_EMBED_SUPPORTED
|
||||||
|
&& test_embed_twitter_json()
|
||||||
|
#endif
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace compile_time_json_tests
|
} // namespace compile_time_json_tests
|
||||||
|
|||||||