aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-contrib <robot-contrib@yandex-team.com>2023-12-14 07:54:29 +0300
committerrobot-contrib <robot-contrib@yandex-team.com>2023-12-14 08:21:54 +0300
commitdb7f91de8c86629d479db1daf8dddf9704186478 (patch)
treed0175a4e634ef25468fa1b78c8ef71c56f074e53
parente938f3027e06f8f4f3f2f0d79d0262d91caac192 (diff)
downloadydb-db7f91de8c86629d479db1daf8dddf9704186478.tar.gz
Update contrib/restricted/nlohmann_json to 3.11.3
-rw-r--r--contrib/restricted/nlohmann_json/README.md165
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/adl_serializer.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/byte_container_with_subtype.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/abi_macros.hpp8
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/from_json.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_chars.hpp6
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_json.hpp118
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/exceptions.hpp32
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/hash.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/binary_reader.hpp31
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/input_adapters.hpp16
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/json_sax.hpp21
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/lexer.hpp33
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/parser.hpp18
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/input/position_t.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/internal_iterator.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iter_impl.hpp44
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iteration_proxy.hpp12
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iterator_traits.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/primitive_iterator.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/json_custom_base_class.hpp39
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/json_pointer.hpp26
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/json_ref.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_scope.hpp28
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_unscope.hpp5
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/cpp_future.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/detected.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/is_sax.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/type_traits.hpp65
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/output/binary_writer.hpp340
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/output/output_adapters.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/output/serializer.hpp80
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/string_concat.hpp22
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/string_escape.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/detail/value_t.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/json.hpp596
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/json_fwd.hpp7
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/ordered_map.hpp14
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp4
-rw-r--r--contrib/restricted/nlohmann_json/ya.make6
47 files changed, 1017 insertions, 807 deletions
diff --git a/contrib/restricted/nlohmann_json/README.md b/contrib/restricted/nlohmann_json/README.md
index d74aa7b1f8..9109027062 100644
--- a/contrib/restricted/nlohmann_json/README.md
+++ b/contrib/restricted/nlohmann_json/README.md
@@ -7,12 +7,13 @@
[![Coverage Status](https://coveralls.io/repos/github/nlohmann/json/badge.svg?branch=develop)](https://coveralls.io/github/nlohmann/json?branch=develop)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/5550/badge.svg)](https://scan.coverity.com/projects/nlohmann-json)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e0d1a9d5d6fd46fcb655c4cb930bb3e8)](https://www.codacy.com/gh/nlohmann/json/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nlohmann/json&amp;utm_campaign=Badge_Grade)
-[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/nlohmann/json.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/nlohmann/json/context:cpp)
+[![Cirrus CI](https://api.cirrus-ci.com/github/nlohmann/json.svg)](https://cirrus-ci.com/github/nlohmann/json)
[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/json.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:json)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/1mp10JbaANo6FUc7)
[![Documentation](https://img.shields.io/badge/docs-mkdocs-blue.svg)](https://json.nlohmann.me)
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/nlohmann/json/master/LICENSE.MIT)
[![GitHub Releases](https://img.shields.io/github/release/nlohmann/json.svg)](https://github.com/nlohmann/json/releases)
+[![Vcpkg Version](https://img.shields.io/vcpkg/v/nlohmann-json)](https://vcpkg.link/ports/nlohmann-json)
[![Packaging status](https://repology.org/badge/tiny-repos/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions)
[![GitHub Downloads](https://img.shields.io/github/downloads/nlohmann/json/total)](https://github.com/nlohmann/json/releases)
[![GitHub Issues](https://img.shields.io/github/issues/nlohmann/json.svg)](https://github.com/nlohmann/json/issues)
@@ -76,7 +77,7 @@ You can sponsor this library at [GitHub Sponsors](https://github.com/sponsors/nl
### :office: Corporate Sponsor
-[![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Codacy-logo-black.svg/320px-Codacy-logo-black.svg.png)](https://github.com/codacy)
+[![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Codacy-logo-black.svg/320px-Codacy-logo-black.svg.png)](https://github.com/codacy/About)
### :label: Named Sponsors
@@ -85,6 +86,7 @@ You can sponsor this library at [GitHub Sponsors](https://github.com/sponsors/nl
- [Steve Sperandeo](https://github.com/homer6)
- [Robert Jefe Lindstädt](https://github.com/eljefedelrodeodeljefe)
- [Steve Wagner](https://github.com/ciroque)
+- [Lion Yang](https://github.com/LionNatsu)
Thanks everyone!
@@ -268,7 +270,7 @@ Note that without appending the `_json` suffix, the passed string literal is not
value. That is, `json j = "{ \"happy\": true, \"pi\": 3.141 }"` would just store the string
`"{ "happy": true, "pi": 3.141 }"` rather than parsing the actual object.
-The string literal should be brought into scope with with `using namespace nlohmann::literals;`
+The string literal should be brought into scope with `using namespace nlohmann::literals;`
(see [`json::parse()`](https://json.nlohmann.me/api/operator_literal_json/)).
The above example can also be expressed explicitly using [`json::parse()`](https://json.nlohmann.me/api/basic_json/parse/):
@@ -300,7 +302,7 @@ Note the difference between serialization and assignment:
json j_string = "this is a string";
// retrieve the string value
-auto cpp_string = j_string.get<std::string>();
+auto cpp_string = j_string.template get<std::string>();
// retrieve the string value (alternative when a variable already exists)
std::string cpp_string2;
j_string.get_to(cpp_string2);
@@ -309,7 +311,7 @@ j_string.get_to(cpp_string2);
std::string serialized_string = j_string.dump();
// output of original string
-std::cout << cpp_string << " == " << cpp_string2 << " == " << j_string.get<std::string>() << '\n';
+std::cout << cpp_string << " == " << cpp_string2 << " == " << j_string.template get<std::string>() << '\n';
// output of serialized value
std::cout << j_string << " == " << serialized_string << std::endl;
```
@@ -482,7 +484,7 @@ for (auto& element : j) {
}
// getter/setter
-const auto tmp = j[0].get<std::string>();
+const auto tmp = j[0].template get<std::string>();
j[1] = 42;
bool foo = j.at(2);
@@ -690,7 +692,7 @@ You can switch off implicit conversions by defining `JSON_USE_IMPLICIT_CONVERSIO
// strings
std::string s1 = "Hello, world!";
json js = s1;
-auto s2 = js.get<std::string>();
+auto s2 = js.template get<std::string>();
// NOT RECOMMENDED
std::string s3 = js;
std::string s4;
@@ -699,7 +701,7 @@ s4 = js;
// Booleans
bool b1 = true;
json jb = b1;
-auto b2 = jb.get<bool>();
+auto b2 = jb.template get<bool>();
// NOT RECOMMENDED
bool b3 = jb;
bool b4;
@@ -708,7 +710,7 @@ b4 = jb;
// numbers
int i = 42;
json jn = i;
-auto f = jn.get<double>();
+auto f = jn.template get<double>();
// NOT RECOMMENDED
double f2 = jb;
double f3;
@@ -751,9 +753,9 @@ j["age"] = p.age;
// convert from JSON: copy each value from the JSON object
ns::person p {
- j["name"].get<std::string>(),
- j["address"].get<std::string>(),
- j["age"].get<int>()
+ j["name"].template get<std::string>(),
+ j["address"].template get<std::string>(),
+ j["age"].template get<int>()
};
```
@@ -770,7 +772,7 @@ std::cout << j << std::endl;
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
// conversion: json -> person
-auto p2 = j.get<ns::person>();
+auto p2 = j.template get<ns::person>();
// that's it
assert(p == p2);
@@ -797,13 +799,13 @@ namespace ns {
```
That's all! When calling the `json` constructor with your type, your custom `to_json` method will be automatically called.
-Likewise, when calling `get<your_type>()` or `get_to(your_type&)`, the `from_json` method will be called.
+Likewise, when calling `template get<your_type>()` or `get_to(your_type&)`, the `from_json` method will be called.
Some important things:
* Those methods **MUST** be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace `ns`, where `person` is defined).
* Those methods **MUST** be available (e.g., proper headers must be included) everywhere you use these conversions. Look at [issue 1108](https://github.com/nlohmann/json/issues/1108) for errors that may occur otherwise.
-* When using `get<your_type>()`, `your_type` **MUST** be [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). (There is a way to bypass this requirement described later.)
+* When using `template get<your_type>()`, `your_type` **MUST** be [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). (There is a way to bypass this requirement described later.)
* In function `from_json`, use function [`at()`](https://json.nlohmann.me/api/basic_json/at/) to access the object values rather than `operator[]`. In case a key does not exist, `at` throws an exception that you can handle, whereas `operator[]` exhibits undefined behavior.
* You do not need to add serializers or deserializers for STL types like `std::vector`: the library already implements these.
@@ -888,8 +890,8 @@ namespace nlohmann {
if (j.is_null()) {
opt = boost::none;
} else {
- opt = j.get<T>(); // same as above, but with
- // adl_serializer<T>::from_json
+ opt = j.template get<T>(); // same as above, but with
+ // adl_serializer<T>::from_json
}
}
};
@@ -916,7 +918,7 @@ namespace nlohmann {
// note: the return type is no longer 'void', and the method only takes
// one argument
static move_only_type from_json(const json& j) {
- return {j.get<int>()};
+ return {j.template get<int>()};
}
// Here's the catch! You must provide a to_json method! Otherwise, you
@@ -1020,11 +1022,11 @@ assert(j == "stopped");
// json string to enum
json j3 = "running";
-assert(j3.get<TaskState>() == TS_RUNNING);
+assert(j3.template get<TaskState>() == TS_RUNNING);
// undefined json value to enum (where the first map entry above is the default)
json jPi = 3.14;
-assert(jPi.get<TaskState>() == TS_INVALID );
+assert(jPi.template get<TaskState>() == TS_INVALID );
```
Just as in [Arbitrary Type Conversions](#arbitrary-types-conversions) above,
@@ -1032,7 +1034,7 @@ Just as in [Arbitrary Type Conversions](#arbitrary-types-conversions) above,
- It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.
Other Important points:
-- When using `get<ENUM_TYPE>()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
+- When using `template get<ENUM_TYPE>()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
- If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
### Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)
@@ -1109,7 +1111,7 @@ auto cbor = json::to_msgpack(j); // 0xD5 (fixext2), 0x10, 0xCA, 0xFE
## Supported compilers
-Though it's 2022 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:
+Though it's 2023 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:
- GCC 4.8 - 12.0 (and possibly later)
- Clang 3.4 - 15.0 (and possibly later)
@@ -1140,51 +1142,60 @@ Please note:
- Unsupported versions of GCC and Clang are rejected by `#error` directives. This can be switched off by defining `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK`. Note that you can expect no support in this case.
-The following compilers are currently used in continuous integration at [AppVeyor](https://ci.appveyor.com/project/nlohmann/json), [Drone CI](https://cloud.drone.io/nlohmann/json), and [GitHub Actions](https://github.com/nlohmann/json/actions):
+The following compilers are currently used in continuous integration at [AppVeyor](https://ci.appveyor.com/project/nlohmann/json), [Cirrus CI](https://cirrus-ci.com/github/nlohmann/json), and [GitHub Actions](https://github.com/nlohmann/json/actions):
| Compiler | Operating System | CI Provider |
|--------------------------------------------------------------------------------------------------------|--------------------|----------------|
-| Apple Clang 11.0.3 (clang-1103.0.32.62); Xcode 11.7 | macOS 11.6.8 | GitHub Actions |
-| Apple Clang 12.0.0 (clang-1200.0.32.29); Xcode 12.4 | macOS 11.6.8 | GitHub Actions |
-| Apple Clang 12.0.5 (clang-1205.0.22.11); Xcode 12.5.1 | macOS 11.6.8 | GitHub Actions |
-| Apple Clang 13.0.0 (clang-1300.0.29.3); Xcode 13.0 | macOS 11.6.8 | GitHub Actions |
-| Apple Clang 13.0.0 (clang-1300.0.29.3); Xcode 13.1 | macOS 12.4 | GitHub Actions |
-| Apple Clang 13.0.0 (clang-1300.0.29.30); Xcode 13.2.1 | macOS 12.4 | GitHub Actions |
-| Apple Clang 13.1.6 (clang-1316.0.21.2.3); Xcode 13.3.1 | macOS 12.4 | GitHub Actions |
-| Apple Clang 13.1.6 (clang-1316.0.21.2.5); Xcode 13.4.1 | macOS 12.4 | GitHub Actions |
-| Clang 3.5.2 (3.5.2-3ubuntu1) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 3.6.2 (3.6.2-3ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 3.7.1 (3.7.1-2ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 3.8.0 (3.8.0-2ubuntu4) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 3.9.1 (3.9.1-4ubuntu3\~16.04.2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 4.0.0 (4.0.0-1ubuntu1\~16.04.2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 5.0.0 (5.0.0-3\~16.04.1) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 6.0.1 (6.0.1-14) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 7.0.1 (7.0.1-12) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 8.0.1 (8.0.1-9) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 9.0.1 (9.0.1-12) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 10.0.0 (10.0.0-4ubuntu1) | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Apple Clang 11.0.3 (clang-1103.0.32.62); Xcode 11.7 | macOS 11.7.1 | GitHub Actions |
+| Apple Clang 12.0.0 (clang-1200.0.32.29); Xcode 12.4 | macOS 11.7.1 | GitHub Actions |
+| Apple Clang 12.0.5 (clang-1205.0.22.11); Xcode 12.5.1 | macOS 11.7.1 | GitHub Actions |
+| Apple Clang 13.0.0 (clang-1300.0.29.3); Xcode 13.0 | macOS 11.7.1 | GitHub Actions |
+| Apple Clang 13.0.0 (clang-1300.0.29.3); Xcode 13.1 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 13.0.0 (clang-1300.0.29.30); Xcode 13.2.1 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 13.1.6 (clang-1316.0.21.2.3); Xcode 13.3.1 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 13.1.6 (clang-1316.0.21.2.5); Xcode 13.4.1 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 14.0.0 (clang-1400.0.29.102); Xcode 14.0 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 14.0.0 (clang-1400.0.29.102); Xcode 14.0.1 | macOS 12.6.1 | GitHub Actions |
+| Apple Clang 14.0.0 (clang-1400.0.29.202); Xcode 14.1 | macOS 12.6.1 | GitHub Actions |
+| Clang 3.5.2 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 3.6.2 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 3.7.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 3.8.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 3.9.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 4.0.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 5.0.2 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 6.0.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 7.0.1 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 8.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 9.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 10.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
| Clang 10.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
| Clang 11.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
| Clang 11.0.0 with MSVC-like command-line | Windows-10.0.17763 | GitHub Actions |
-| Clang 11.0.0 (11.0.0-2~ubuntu20.04.1) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 12.0.0 (12.0.0-3ubuntu1~20.04.3) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 13.0.1 (13.0.1-++20211015123032+cf15ccdeb6d5-1exp120211015003613.5) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 14.0.5-++20220603124341+2f0a69c32a4c-1~exp1~20220603124352.149 | Ubuntu 20.04.3 LTS | GitHub Actions |
-| Clang 15.0.0 (15.0.0-++20220530052901+b7d2b160c3ba-1~exp1~20220530172952.268) | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 11.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 12.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 12.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
+| Clang 13.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 13.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
+| Clang 14.0.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 14.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
+| Clang 15.0.0 with GNU-like command-line | Windows-10.0.17763 | GitHub Actions |
+| Clang 15.0.4 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| Clang 16.0.0 (16.0.0-++20221031071727+500876226c60-1~exp1~20221031071831.439) | Ubuntu 20.04.3 LTS | GitHub Actions |
| GCC 4.8.5 (Ubuntu 4.8.5-4ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 4.9.3 (Ubuntu 4.9.3-13ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 6.4.0 (Ubuntu 6.4.0-17ubuntu1) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 7.5.0 (Ubuntu 7.5.0-6ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 4.9.4 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 5.5.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 6.5.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 7.5.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
| GCC 8.1.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project) | Windows-10.0.17763 | GitHub Actions |
| GCC 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) | Windows-10.0.17763 | GitHub Actions |
-| GCC 8.4.0 (Ubuntu 8.4.0-3ubuntu2) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 10.2.0 (Ubuntu 10.2.0-5ubuntu1~20.04) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 11.1.0 | Ubuntu (aarch64) | Drone CI |
-| GCC 11.1.0 (Ubuntu 11.1.0-1ubuntu1~20.04) | Ubuntu 20.04.3 LTS | GitHub Actions |
-| GCC 13.0.0 13.0.0 20220605 (experimental) | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 8.5.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 9.5.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 10.4.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 11.1.0 | Ubuntu (aarch64) | Cirrus CI |
+| GCC 11.3.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 12.2.0 | Ubuntu 20.04.3 LTS | GitHub Actions |
+| GCC 13.0.0 20220605 (experimental) | Ubuntu 20.04.3 LTS | GitHub Actions |
| Intel C++ Compiler 2021.5.0.20211109 | Ubuntu 20.04.3 LTS | GitHub Actions |
| NVCC 11.0.221 | Ubuntu 20.04.3 LTS | GitHub Actions |
| Visual Studio 14 2015 MSVC 19.0.24241.7 (Build Engine version 14.0.25420.1) | Windows-6.3.9600 | AppVeyor |
@@ -1262,7 +1273,7 @@ Example:
```cmake
include(FetchContent)
-FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.2/json.tar.xz)
+FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)
FetchContent_MakeAvailable(json)
target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
@@ -1309,7 +1320,9 @@ endif()
If you are using the [Meson Build System](https://mesonbuild.com), add this source tree as a [meson subproject](https://mesonbuild.com/Subprojects.html#using-a-subproject). You may also use the `include.zip` published in this project's [Releases](https://github.com/nlohmann/json/releases) to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from [Meson WrapDB](https://wrapdb.mesonbuild.com/nlohmann_json), or simply use `meson wrap install nlohmann_json`. Please see the meson project for any issues regarding the packaging.
-The provided `meson.build` can also be used as an alternative to cmake for installing `nlohmann_json` system-wide in which case a pkg-config file is installed. To use it, simply have your build system require the `nlohmann_json` pkg-config dependency. In Meson, it is preferred to use the [`dependency()`](https://mesonbuild.com/Reference-manual.html#dependency) object with a subproject fallback, rather than using the subproject directly.
+The provided `meson.build` can also be used as an alternative to CMake for installing `nlohmann_json` system-wide in which case a pkg-config file is installed. To use it, simply have your build system require the `nlohmann_json` pkg-config dependency. In Meson, it is preferred to use the [`dependency()`](https://mesonbuild.com/Reference-manual.html#dependency) object with a subproject fallback, rather than using the subproject directly.
+
+If you are using [Bazel](https://bazel.build/) you can simply reference this repository using `http_archive` or `git_repository` and depend on `@nlohmann_json//:json`.
If you are using [Conan](https://www.conan.io/) to manage your dependencies, merely add [`nlohmann_json/x.y.z`](https://conan.io/center/nlohmann_json) to your `conanfile`'s requires, where `x.y.z` is the release version you want to use. Please file issues [here](https://github.com/conan-io/conan-center-index/issues) if you experience problems with the packages.
@@ -1325,6 +1338,8 @@ If you are using [cget](https://cget.readthedocs.io/en/latest/), you can install
If you are using [CocoaPods](https://cocoapods.org), you can use the library by adding pod `"nlohmann_json", '~>3.1.2'` to your podfile (see [an example](https://bitbucket.org/benman/nlohmann_json-cocoapod/src/master/)). Please file issues [here](https://bitbucket.org/benman/nlohmann_json-cocoapod/issues?status=new&status=open).
+If you are using [Swift Package Manager](https://swift.org/package-manager/), you can use the library by adding a package dependency to this repository. And target dependency as `.product(name: "nlohmann-json", package: "json")`.
+
If you are using [NuGet](https://www.nuget.org), you can use the package [nlohmann.json](https://www.nuget.org/packages/nlohmann.json/). Please check [this extensive description](https://github.com/nlohmann/json/issues/1132#issuecomment-452250255) on how to use the package. Please file issues [here](https://github.com/hnkb/nlohmann-json-nuget/issues).
If you are using [conda](https://conda.io/), you can use the package [nlohmann_json](https://github.com/conda-forge/nlohmann_json-feedstock) from [conda-forge](https://conda-forge.org) executing `conda install -c conda-forge nlohmann_json`. Please file issues [here](https://github.com/conda-forge/nlohmann_json-feedstock/issues).
@@ -1718,6 +1733,36 @@ I deeply appreciate the help of the following people.
314. [Berkus Decker](https://github.com/berkus) fixed a typo in the README.
315. [Illia Polishchuk](https://github.com/effolkronium) improved the CMake testing.
316. [Ikko Ashimine](https://github.com/eltociear) fixed a typo.
+317. [Raphael Grimm](https://github.com/barcode) added the possibility to define a custom base class.
+318. [tocic](https://github.com/tocic) fixed typos in the documentation.
+319. [Vertexwahn](https://github.com/Vertexwahn) added Bazel build support.
+320. [Dirk Stolle](https://github.com/striezel) fixed typos in the documentation.
+321. [DavidKorczynski](https://github.com/DavidKorczynski) added a CIFuzz CI GitHub action.
+322. [Finkman](https://github.com/Finkman) fixed the debug pretty-printer.
+323. [Florian Segginger](https://github.com/floriansegginger) bumped the years in the README.
+324. [haadfida](https://github.com/haadfida) cleaned up the badges of used services.
+325. [Arsen Arsenović](https://github.com/ArsenArsen) fixed a build error.
+326. [theevilone45](https://github.com/theevilone45) fixed a typo in a CMake file.
+327. [Sergei Trofimovich](https://github.com/trofi) fixed the custom allocator support.
+328. [Joyce](https://github.com/joycebrum) fixed some security issues in the GitHub workflows.
+329. [Nicolas Jakob](https://github.com/njakob) add vcpkg version badge.
+330. [Tomerkm](https://github.com/Tomerkm) added tests.
+331. [No.](https://github.com/tusooa) fixed the use of `get<>` calls.
+332. [taro](https://github.com/tarolling) fixed a typo in the `CODEOWNERS` file.
+333. [Ikko Eltociear Ashimine](https://github.com/eltociear) fixed a typo.
+334. [Felix Yan](https://github.com/felixonmars) fixed a typo in the README.
+335. [HO-COOH](https://github.com/HO-COOH) fixed a parentheses in the documentation.
+336. [Ivor Wanders](https://github.com/iwanders) fixed the examples to catch exception by `const&`.
+337. [miny1233](https://github.com/miny1233) fixed a parentheses in the documentation.
+338. [tomalakgeretkal](https://github.com/tomalakgeretkal) fixed a compilation error.
+339. [alferov](https://github.com/ALF-ONE) fixed a compilation error.
+340. [Craig Scott](https://github.com/craigscott-crascit) fixed a deprecation warning in CMake.
+341. [Vyacheslav Zhdanovskiy](https://github.com/ZeronSix) added macros for serialization-only types.
+342. [Mathieu Westphal](https://github.com/mwestphal) fixed typos.
+343. [scribam](https://github.com/scribam) fixed the MinGW workflow.
+344. [Aleksei Sapitskii](https://github.com/aleksproger) added support for Apple's Swift Package Manager.
+345. [Benjamin Buch](https://github.com/bebuch) fixed the installation path in CMake.
+346. [Colby Haskell](https://github.com/colbychaskell) clarified the parse error message in case a file cannot be opened.
Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone.
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/adl_serializer.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/adl_serializer.hpp
index f77f94473e..56a606c0f6 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/adl_serializer.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/adl_serializer.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/byte_container_with_subtype.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/byte_container_with_subtype.hpp
index 1031cdcfea..91382cd682 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/byte_container_with_subtype.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/byte_container_with_subtype.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/abi_macros.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/abi_macros.hpp
index 0d3108d166..f48b9eb1d5 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/abi_macros.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/abi_macros.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -12,7 +12,7 @@
#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
#if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
- #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2
+ #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3
#warning "Already included a different version of the library!"
#endif
#endif
@@ -20,7 +20,7 @@
#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum)
#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum)
-#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum)
+#define NLOHMANN_JSON_VERSION_PATCH 3 // NOLINT(modernize-macro-to-enum)
#ifndef JSON_DIAGNOSTICS
#define JSON_DIAGNOSTICS 0
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/from_json.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/from_json.hpp
index c6299aa0b2..aa2f0cbf4c 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/from_json.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/from_json.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_chars.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_chars.hpp
index febef93271..e10741c923 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_chars.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_chars.hpp
@@ -1,10 +1,10 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2009 Florian Loitsch <https://florian.loitsch.com/>
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -909,7 +909,7 @@ void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)
// NB: If the neighbors are computed for single-precision numbers, there is a single float
// (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision
// value is off by 1 ulp.
-#if 0
+#if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if)
const boundaries w = compute_boundaries(static_cast<double>(value));
#else
const boundaries w = compute_boundaries(value);
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_json.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_json.hpp
index b33d726b48..e39b7797dd 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_json.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/conversions/to_json.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -34,7 +34,7 @@ namespace detail
/*
* Note all external_constructor<>::construct functions need to call
- * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an
+ * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an
* allocated value (e.g., a string). See bug issue
* https://github.com/nlohmann/json/issues/2865 for more information.
*/
@@ -47,9 +47,9 @@ struct external_constructor<value_t::boolean>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::boolean;
- j.m_value = b;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::boolean;
+ j.m_data.m_value = b;
j.assert_invariant();
}
};
@@ -60,18 +60,18 @@ struct external_constructor<value_t::string>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::string;
- j.m_value = s;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::string;
+ j.m_data.m_value = s;
j.assert_invariant();
}
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::string;
- j.m_value = std::move(s);
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::string;
+ j.m_data.m_value = std::move(s);
j.assert_invariant();
}
@@ -80,9 +80,9 @@ struct external_constructor<value_t::string>
int > = 0 >
static void construct(BasicJsonType& j, const CompatibleStringType& str)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::string;
- j.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::string;
+ j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
j.assert_invariant();
}
};
@@ -93,18 +93,18 @@ struct external_constructor<value_t::binary>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::binary;
- j.m_value = typename BasicJsonType::binary_t(b);
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::binary;
+ j.m_data.m_value = typename BasicJsonType::binary_t(b);
j.assert_invariant();
}
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::binary;
- j.m_value = typename BasicJsonType::binary_t(std::move(b));
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::binary;
+ j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b));
j.assert_invariant();
}
};
@@ -115,9 +115,9 @@ struct external_constructor<value_t::number_float>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::number_float;
- j.m_value = val;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::number_float;
+ j.m_data.m_value = val;
j.assert_invariant();
}
};
@@ -128,9 +128,9 @@ struct external_constructor<value_t::number_unsigned>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::number_unsigned;
- j.m_value = val;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::number_unsigned;
+ j.m_data.m_value = val;
j.assert_invariant();
}
};
@@ -141,9 +141,9 @@ struct external_constructor<value_t::number_integer>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::number_integer;
- j.m_value = val;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::number_integer;
+ j.m_data.m_value = val;
j.assert_invariant();
}
};
@@ -154,9 +154,9 @@ struct external_constructor<value_t::array>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::array;
- j.m_value = arr;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::array;
+ j.m_data.m_value = arr;
j.set_parents();
j.assert_invariant();
}
@@ -164,9 +164,9 @@ struct external_constructor<value_t::array>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::array;
- j.m_value = std::move(arr);
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::array;
+ j.m_data.m_value = std::move(arr);
j.set_parents();
j.assert_invariant();
}
@@ -179,9 +179,9 @@ struct external_constructor<value_t::array>
using std::begin;
using std::end;
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::array;
- j.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::array;
+ j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
j.set_parents();
j.assert_invariant();
}
@@ -189,14 +189,14 @@ struct external_constructor<value_t::array>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const std::vector<bool>& arr)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::array;
- j.m_value = value_t::array;
- j.m_value.array->reserve(arr.size());
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::array;
+ j.m_data.m_value = value_t::array;
+ j.m_data.m_value.array->reserve(arr.size());
for (const bool x : arr)
{
- j.m_value.array->push_back(x);
- j.set_parent(j.m_value.array->back());
+ j.m_data.m_value.array->push_back(x);
+ j.set_parent(j.m_data.m_value.array->back());
}
j.assert_invariant();
}
@@ -205,13 +205,13 @@ struct external_constructor<value_t::array>
enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
static void construct(BasicJsonType& j, const std::valarray<T>& arr)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::array;
- j.m_value = value_t::array;
- j.m_value.array->resize(arr.size());
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::array;
+ j.m_data.m_value = value_t::array;
+ j.m_data.m_value.array->resize(arr.size());
if (arr.size() > 0)
{
- std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin());
+ std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin());
}
j.set_parents();
j.assert_invariant();
@@ -224,9 +224,9 @@ struct external_constructor<value_t::object>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::object;
- j.m_value = obj;
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::object;
+ j.m_data.m_value = obj;
j.set_parents();
j.assert_invariant();
}
@@ -234,9 +234,9 @@ struct external_constructor<value_t::object>
template<typename BasicJsonType>
static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
{
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::object;
- j.m_value = std::move(obj);
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::object;
+ j.m_data.m_value = std::move(obj);
j.set_parents();
j.assert_invariant();
}
@@ -248,9 +248,9 @@ struct external_constructor<value_t::object>
using std::begin;
using std::end;
- j.m_value.destroy(j.m_type);
- j.m_type = value_t::object;
- j.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
+ j.m_data.m_value.destroy(j.m_data.m_type);
+ j.m_data.m_type = value_t::object;
+ j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
j.set_parents();
j.assert_invariant();
}
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/exceptions.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/exceptions.hpp
index 96d7e01040..5974d7be2b 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/exceptions.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/exceptions.hpp
@@ -1,15 +1,18 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
#include <cstddef> // nullptr_t
#include <exception> // exception
+#if JSON_DIAGNOSTICS
+ #include <numeric> // accumulate
+#endif
#include <stdexcept> // runtime_error
#include <string> // to_string
#include <vector> // vector
@@ -22,7 +25,6 @@
#include <nlohmann/detail/meta/type_traits.hpp>
#include <nlohmann/detail/string_concat.hpp>
-
NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{
@@ -70,9 +72,9 @@ class exception : public std::exception
{
case value_t::array:
{
- for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i)
+ for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)
{
- if (&current->m_parent->m_value.array->operator[](i) == current)
+ if (&current->m_parent->m_data.m_value.array->operator[](i) == current)
{
tokens.emplace_back(std::to_string(i));
break;
@@ -83,7 +85,7 @@ class exception : public std::exception
case value_t::object:
{
- for (const auto& element : *current->m_parent->m_value.object)
+ for (const auto& element : *current->m_parent->m_data.m_value.object)
{
if (&element.second == current)
{
@@ -146,17 +148,17 @@ class parse_error : public exception
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("parse_error", id_), "parse error",
- position_string(pos), ": ", exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("parse_error", id_), "parse error",
+ position_string(pos), ": ", exception::diagnostics(context), what_arg);
return {id_, pos.chars_read_total, w.c_str()};
}
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("parse_error", id_), "parse error",
- (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
- ": ", exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("parse_error", id_), "parse error",
+ (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
+ ": ", exception::diagnostics(context), what_arg);
return {id_, byte_, w.c_str()};
}
@@ -190,7 +192,7 @@ class invalid_iterator : public exception
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg);
return {id_, w.c_str()};
}
@@ -208,7 +210,7 @@ class type_error : public exception
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static type_error create(int id_, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg);
return {id_, w.c_str()};
}
@@ -225,7 +227,7 @@ class out_of_range : public exception
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
return {id_, w.c_str()};
}
@@ -242,7 +244,7 @@ class other_error : public exception
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static other_error create(int id_, const std::string& what_arg, BasicJsonContext context)
{
- std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg);
return {id_, w.c_str()};
}
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/hash.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/hash.hpp
index 3f05af8308..4464e8e67b 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/hash.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/hash.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/binary_reader.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/binary_reader.hpp
index 634615d35e..a6e100e761 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/binary_reader.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/binary_reader.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -55,7 +55,6 @@ static inline bool little_endianness(int num = 1) noexcept
return *reinterpret_cast<char*>(&num) == 1;
}
-
///////////////////
// binary reader //
///////////////////
@@ -73,7 +72,7 @@ class binary_reader
using binary_t = typename BasicJsonType::binary_t;
using json_sax_t = SAX;
using char_type = typename InputAdapterType::char_type;
- using char_int_type = typename std::char_traits<char_type>::int_type;
+ using char_int_type = typename char_traits<char_type>::int_type;
public:
/*!
@@ -146,7 +145,7 @@ class binary_reader
get();
}
- if (JSON_HEDLEY_UNLIKELY(current != std::char_traits<char_type>::eof()))
+ if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
{
return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read,
exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr));
@@ -229,7 +228,7 @@ class binary_reader
exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr));
}
- return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != std::char_traits<char_type>::eof();
+ return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof();
}
/*!
@@ -330,7 +329,7 @@ class binary_reader
{
std::array<char, 3> cr{{}};
static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
- std::string cr_str{cr.data()};
+ const std::string cr_str{cr.data()};
return sax->parse_error(element_type_parse_position, cr_str,
parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
}
@@ -423,7 +422,7 @@ class binary_reader
switch (get_char ? get() : current)
{
// EOF
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
return unexpect_eof(input_format_t::cbor, "value");
// Integer 0x00..0x17 (0..23)
@@ -1198,7 +1197,7 @@ class binary_reader
switch (get())
{
// EOF
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
return unexpect_eof(input_format_t::msgpack, "value");
// positive fixint
@@ -2153,7 +2152,7 @@ class binary_reader
}
if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimentional vector is not allowed", "size"), nullptr));
+ return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
}
std::vector<size_t> dim;
if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
@@ -2265,7 +2264,7 @@ class binary_reader
exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr));
}
- bool is_error = get_ubjson_size_value(result.first, is_ndarray);
+ const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
if (input_format == input_format_t::bjdata && is_ndarray)
{
if (inside_ndarray)
@@ -2280,7 +2279,7 @@ class binary_reader
if (current == '#')
{
- bool is_error = get_ubjson_size_value(result.first, is_ndarray);
+ const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
if (input_format == input_format_t::bjdata && is_ndarray)
{
return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read,
@@ -2300,7 +2299,7 @@ class binary_reader
{
switch (prefix)
{
- case std::char_traits<char_type>::eof(): // EOF
+ case char_traits<char_type>::eof(): // EOF
return unexpect_eof(input_format, "value");
case 'T': // true
@@ -2745,7 +2744,7 @@ class binary_reader
This function provides the interface to the used input adapter. It does
not throw in case the input reached EOF, but returns a -'ve valued
- `std::char_traits<char_type>::eof()` in that case.
+ `char_traits<char_type>::eof()` in that case.
@return character read from the input
*/
@@ -2887,7 +2886,7 @@ class binary_reader
JSON_HEDLEY_NON_NULL(3)
bool unexpect_eof(const input_format_t format, const char* context) const
{
- if (JSON_HEDLEY_UNLIKELY(current == std::char_traits<char_type>::eof()))
+ if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
{
return sax->parse_error(chars_read, "<end of file>",
parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
@@ -2954,7 +2953,7 @@ class binary_reader
InputAdapterType ia;
/// the current character
- char_int_type current = std::char_traits<char_type>::eof();
+ char_int_type current = char_traits<char_type>::eof();
/// the number of characters read
std::size_t chars_read = 0;
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/input_adapters.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/input_adapters.hpp
index cf53b1d572..33fca3e4b9 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/input_adapters.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/input_adapters.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -25,6 +25,7 @@
#include <nlohmann/detail/iterators/iterator_traits.hpp>
#include <nlohmann/detail/macro_scope.hpp>
+#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
@@ -71,7 +72,6 @@ class file_input_adapter
std::FILE* m_file;
};
-
/*!
Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at
beginning of input. Does not support changing the underlying std::streambuf
@@ -145,16 +145,16 @@ class iterator_input_adapter
: current(std::move(first)), end(std::move(last))
{}
- typename std::char_traits<char_type>::int_type get_character()
+ typename char_traits<char_type>::int_type get_character()
{
if (JSON_HEDLEY_LIKELY(current != end))
{
- auto result = std::char_traits<char_type>::to_int_type(*current);
+ auto result = char_traits<char_type>::to_int_type(*current);
std::advance(current, 1);
return result;
}
- return std::char_traits<char_type>::eof();
+ return char_traits<char_type>::eof();
}
private:
@@ -170,7 +170,6 @@ class iterator_input_adapter
}
};
-
template<typename BaseInputAdapter, size_t T>
struct wide_string_input_helper;
@@ -294,7 +293,7 @@ struct wide_string_input_helper<BaseInputAdapter, 2>
}
};
-// Wraps another input apdater to convert wide character types into individual bytes.
+// Wraps another input adapter to convert wide character types into individual bytes.
template<typename BaseInputAdapter, typename WideCharType>
class wide_string_input_adapter
{
@@ -339,7 +338,6 @@ class wide_string_input_adapter
std::size_t utf8_bytes_filled = 0;
};
-
template<typename IteratorType, typename Enable = void>
struct iterator_input_adapter_factory
{
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/json_sax.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/json_sax.hpp
index 5bd5c51c02..c772521cd8 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/json_sax.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/json_sax.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -142,7 +142,6 @@ struct json_sax
virtual ~json_sax() = default;
};
-
namespace detail
{
/*!
@@ -244,7 +243,7 @@ class json_sax_dom_parser
JSON_ASSERT(ref_stack.back()->is_object());
// add null at given key and store the reference for later
- object_element = &(ref_stack.back()->m_value.object->operator[](val));
+ object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
return true;
}
@@ -319,8 +318,8 @@ class json_sax_dom_parser
if (ref_stack.back()->is_array())
{
- ref_stack.back()->m_value.array->emplace_back(std::forward<Value>(v));
- return &(ref_stack.back()->m_value.array->back());
+ ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
+ return &(ref_stack.back()->m_data.m_value.array->back());
}
JSON_ASSERT(ref_stack.back()->is_object());
@@ -439,7 +438,7 @@ class json_sax_dom_callback_parser
// add discarded value at given key and store the reference for later
if (keep && ref_stack.back())
{
- object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded);
+ object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded);
}
return true;
@@ -524,7 +523,7 @@ class json_sax_dom_callback_parser
// remove discarded value
if (!keep && !ref_stack.empty() && ref_stack.back()->is_array())
{
- ref_stack.back()->m_value.array->pop_back();
+ ref_stack.back()->m_data.m_value.array->pop_back();
}
return true;
@@ -591,7 +590,7 @@ class json_sax_dom_callback_parser
if (ref_stack.empty())
{
root = std::move(value);
- return {true, &root};
+ return {true, & root};
}
// skip this value if we already decided to skip the parent
@@ -607,8 +606,8 @@ class json_sax_dom_callback_parser
// array
if (ref_stack.back()->is_array())
{
- ref_stack.back()->m_value.array->emplace_back(std::move(value));
- return {true, &(ref_stack.back()->m_value.array->back())};
+ ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value));
+ return {true, & (ref_stack.back()->m_data.m_value.array->back())};
}
// object
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/lexer.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/lexer.hpp
index 72e9951081..4b3bf77d62 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/lexer.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/lexer.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -21,6 +21,7 @@
#include <nlohmann/detail/input/input_adapters.hpp>
#include <nlohmann/detail/input/position_t.hpp>
#include <nlohmann/detail/macro_scope.hpp>
+#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
@@ -115,7 +116,7 @@ class lexer : public lexer_base<BasicJsonType>
using number_float_t = typename BasicJsonType::number_float_t;
using string_t = typename BasicJsonType::string_t;
using char_type = typename InputAdapterType::char_type;
- using char_int_type = typename std::char_traits<char_type>::int_type;
+ using char_int_type = typename char_traits<char_type>::int_type;
public:
using token_type = typename lexer_base<BasicJsonType>::token_type;
@@ -222,7 +223,7 @@ class lexer : public lexer_base<BasicJsonType>
for (auto range = ranges.begin(); range != ranges.end(); ++range)
{
get();
- if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range)))
+ if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions)
{
add(current);
}
@@ -265,7 +266,7 @@ class lexer : public lexer_base<BasicJsonType>
switch (get())
{
// end of file while parsing string
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
{
error_message = "invalid string: missing closing quote";
return token_type::parse_error;
@@ -854,7 +855,7 @@ class lexer : public lexer_base<BasicJsonType>
{
case '\n':
case '\r':
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
case '\0':
return true;
@@ -871,7 +872,7 @@ class lexer : public lexer_base<BasicJsonType>
{
switch (get())
{
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
case '\0':
{
error_message = "invalid comment; missing closing '*/'";
@@ -1300,10 +1301,10 @@ scan_number_done:
token_type scan_literal(const char_type* literal_text, const std::size_t length,
token_type return_type)
{
- JSON_ASSERT(std::char_traits<char_type>::to_char_type(current) == literal_text[0]);
+ JSON_ASSERT(char_traits<char_type>::to_char_type(current) == literal_text[0]);
for (std::size_t i = 1; i < length; ++i)
{
- if (JSON_HEDLEY_UNLIKELY(std::char_traits<char_type>::to_char_type(get()) != literal_text[i]))
+ if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != literal_text[i]))
{
error_message = "invalid literal";
return token_type::parse_error;
@@ -1321,7 +1322,7 @@ scan_number_done:
{
token_buffer.clear();
token_string.clear();
- token_string.push_back(std::char_traits<char_type>::to_char_type(current));
+ token_string.push_back(char_traits<char_type>::to_char_type(current));
}
/*
@@ -1329,7 +1330,7 @@ scan_number_done:
This function provides the interface to the used input adapter. It does
not throw in case the input reached EOF, but returns a
- `std::char_traits<char>::eof()` in that case. Stores the scanned characters
+ `char_traits<char>::eof()` in that case. Stores the scanned characters
for use in error messages.
@return character read from the input
@@ -1349,9 +1350,9 @@ scan_number_done:
current = ia.get_character();
}
- if (JSON_HEDLEY_LIKELY(current != std::char_traits<char_type>::eof()))
+ if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))
{
- token_string.push_back(std::char_traits<char_type>::to_char_type(current));
+ token_string.push_back(char_traits<char_type>::to_char_type(current));
}
if (current == '\n')
@@ -1390,7 +1391,7 @@ scan_number_done:
--position.chars_read_current_line;
}
- if (JSON_HEDLEY_LIKELY(current != std::char_traits<char_type>::eof()))
+ if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))
{
JSON_ASSERT(!token_string.empty());
token_string.pop_back();
@@ -1584,7 +1585,7 @@ scan_number_done:
// end of input (the null byte is needed when parsing from
// string literals)
case '\0':
- case std::char_traits<char_type>::eof():
+ case char_traits<char_type>::eof():
return token_type::end_of_input;
// error
@@ -1602,7 +1603,7 @@ scan_number_done:
const bool ignore_comments = false;
/// the current character
- char_int_type current = std::char_traits<char_type>::eof();
+ char_int_type current = char_traits<char_type>::eof();
/// whether the next get() call should just return current
bool next_unget = false;
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/parser.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/parser.hpp
index 8acbd4fcad..bdf85ba292 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/parser.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/parser.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -341,13 +341,25 @@ class parser
m_lexer.get_token_string(),
parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
}
+ case token_type::end_of_input:
+ {
+ if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1))
+ {
+ return sax->parse_error(m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(),
+ "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
+ }
+ return sax->parse_error(m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
+ }
case token_type::uninitialized:
case token_type::end_array:
case token_type::end_object:
case token_type::name_separator:
case token_type::value_separator:
- case token_type::end_of_input:
case token_type::literal_or_value:
default: // the last token was unexpected
{
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/position_t.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/position_t.hpp
index 396db0e16b..8ac7c78cfd 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/position_t.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/input/position_t.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/internal_iterator.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/internal_iterator.hpp
index 13a212c8d9..2991ee6930 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/internal_iterator.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/internal_iterator.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iter_impl.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iter_impl.hpp
index 3f5a9901ca..4447091347 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iter_impl.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iter_impl.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -101,7 +101,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
@@ -198,17 +198,17 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
- m_it.object_iterator = m_object->m_value.object->begin();
+ m_it.object_iterator = m_object->m_data.m_value.object->begin();
break;
}
case value_t::array:
{
- m_it.array_iterator = m_object->m_value.array->begin();
+ m_it.array_iterator = m_object->m_data.m_value.array->begin();
break;
}
@@ -242,17 +242,17 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
- m_it.object_iterator = m_object->m_value.object->end();
+ m_it.object_iterator = m_object->m_data.m_value.object->end();
break;
}
case value_t::array:
{
- m_it.array_iterator = m_object->m_value.array->end();
+ m_it.array_iterator = m_object->m_data.m_value.array->end();
break;
}
@@ -281,17 +281,17 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
- JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end());
+ JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
return m_it.object_iterator->second;
}
case value_t::array:
{
- JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end());
+ JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
return *m_it.array_iterator;
}
@@ -325,17 +325,17 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
- JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end());
+ JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
return &(m_it.object_iterator->second);
}
case value_t::array:
{
- JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end());
+ JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
return &*m_it.array_iterator;
}
@@ -378,7 +378,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
@@ -429,7 +429,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
{
@@ -476,7 +476,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
return (m_it.object_iterator == other.m_it.object_iterator);
@@ -521,7 +521,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object));
@@ -577,7 +577,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
@@ -656,7 +656,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
@@ -685,7 +685,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
{
JSON_ASSERT(m_object != nullptr);
- switch (m_object->m_type)
+ switch (m_object->m_data.m_type)
{
case value_t::object:
JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object));
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iteration_proxy.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iteration_proxy.hpp
index 659cd06f29..76293de227 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iteration_proxy.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iteration_proxy.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -69,10 +69,10 @@ template<typename IteratorType> class iteration_proxy_value
// older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions
iteration_proxy_value(iteration_proxy_value&&)
noexcept(std::is_nothrow_move_constructible<IteratorType>::value
- && std::is_nothrow_move_constructible<string_type>::value) = default;
+ && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
iteration_proxy_value& operator=(iteration_proxy_value&&)
noexcept(std::is_nothrow_move_assignable<IteratorType>::value
- && std::is_nothrow_move_assignable<string_type>::value) = default;
+ && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
~iteration_proxy_value() = default;
/// dereference operator (needed for range-based for)
@@ -219,11 +219,11 @@ namespace std
#pragma clang diagnostic ignored "-Wmismatched-tags"
#endif
template<typename IteratorType>
-class tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>>
+class tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)
: public std::integral_constant<std::size_t, 2> {};
template<std::size_t N, typename IteratorType>
-class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >>
+class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >> // NOLINT(cert-dcl58-cpp)
{
public:
using type = decltype(
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iterator_traits.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iterator_traits.hpp
index 34a20eee85..84cc27a85e 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iterator_traits.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/iterator_traits.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
index eb450e986e..006d5499ad 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/primitive_iterator.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/primitive_iterator.hpp
index 0bc3ca804e..0b6e8499e6 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/primitive_iterator.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/iterators/primitive_iterator.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_custom_base_class.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_custom_base_class.hpp
new file mode 100644
index 0000000000..d1e29162a3
--- /dev/null
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_custom_base_class.hpp
@@ -0,0 +1,39 @@
+// __ _____ _____ _____
+// __| | __| | | | JSON for Modern C++
+// | | |__ | | | | | | version 3.11.3
+// |_____|_____|_____|_|___| https://github.com/nlohmann/json
+//
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+// SPDX-License-Identifier: MIT
+
+#pragma once
+
+#include <type_traits> // conditional, is_same
+
+#include <nlohmann/detail/abi_macros.hpp>
+
+NLOHMANN_JSON_NAMESPACE_BEGIN
+namespace detail
+{
+
+/*!
+@brief Default base class of the @ref basic_json class.
+
+So that the correct implementations of the copy / move ctors / assign operators
+of @ref basic_json do not require complex case distinctions
+(no base class / custom base class used as customization point),
+@ref basic_json always has a base class.
+By default, this class is used because it is empty and thus has no effect
+on the behavior of @ref basic_json.
+*/
+struct json_default_base {};
+
+template<class T>
+using json_base_class = typename std::conditional <
+ std::is_same<T, void>::value,
+ json_default_base,
+ T
+ >::type;
+
+} // namespace detail
+NLOHMANN_JSON_NAMESPACE_END
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_pointer.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_pointer.hpp
index 3f69bcdf10..4fdcd9ad28 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_pointer.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_pointer.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -230,7 +230,7 @@ class json_pointer
const char* p = s.c_str();
char* p_end = nullptr;
errno = 0; // strtoull doesn't reset errno
- unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int)
+ const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int)
if (p == p_end // invalid input or empty string
|| errno == ERANGE // out of range
|| JSON_HEDLEY_UNLIKELY(static_cast<std::size_t>(p_end - p) != s.size())) // incomplete read
@@ -386,7 +386,7 @@ class json_pointer
if (reference_token == "-")
{
// explicitly treat "-" as index beyond the end
- ptr = &ptr->operator[](ptr->m_value.array->size());
+ ptr = &ptr->operator[](ptr->m_data.m_value.array->size());
}
else
{
@@ -438,7 +438,7 @@ class json_pointer
{
// "-" always fails the range check
JSON_THROW(detail::out_of_range::create(402, detail::concat(
- "array index '-' (", std::to_string(ptr->m_value.array->size()),
+ "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()),
") is out of range"), ptr));
}
@@ -495,7 +495,7 @@ class json_pointer
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" cannot be used for const access
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
}
// use unchecked array access
@@ -545,7 +545,7 @@ class json_pointer
{
// "-" always fails the range check
JSON_THROW(detail::out_of_range::create(402, detail::concat(
- "array index '-' (", std::to_string(ptr->m_value.array->size()),
+ "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()),
") is out of range"), ptr));
}
@@ -740,7 +740,7 @@ class json_pointer
{
case detail::value_t::array:
{
- if (value.m_value.array->empty())
+ if (value.m_data.m_value.array->empty())
{
// flatten empty array as null
result[reference_string] = nullptr;
@@ -748,10 +748,10 @@ class json_pointer
else
{
// iterate array and use index as reference string
- for (std::size_t i = 0; i < value.m_value.array->size(); ++i)
+ for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
{
flatten(detail::concat(reference_string, '/', std::to_string(i)),
- value.m_value.array->operator[](i), result);
+ value.m_data.m_value.array->operator[](i), result);
}
}
break;
@@ -759,7 +759,7 @@ class json_pointer
case detail::value_t::object:
{
- if (value.m_value.object->empty())
+ if (value.m_data.m_value.object->empty())
{
// flatten empty object as null
result[reference_string] = nullptr;
@@ -767,7 +767,7 @@ class json_pointer
else
{
// iterate object and use keys as reference string
- for (const auto& element : *value.m_value.object)
+ for (const auto& element : *value.m_data.m_value.object)
{
flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result);
}
@@ -814,7 +814,7 @@ class json_pointer
BasicJsonType result;
// iterate the JSON object values
- for (const auto& element : *value.m_value.object)
+ for (const auto& element : *value.m_data.m_value.object)
{
if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive()))
{
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_ref.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_ref.hpp
index 47911fb552..b8bb6a76b0 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_ref.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/json_ref.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_scope.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_scope.hpp
index 6248bea130..97127a6462 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_scope.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_scope.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -133,6 +133,14 @@
#endif
#endif
+#ifndef JSON_HAS_STATIC_RTTI
+ #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0
+ #define JSON_HAS_STATIC_RTTI 1
+ #else
+ #define JSON_HAS_STATIC_RTTI 0
+ #endif
+#endif
+
#ifdef JSON_HAS_CPP_17
#define JSON_INLINE_VARIABLE inline
#else
@@ -240,12 +248,13 @@
class NumberUnsignedType, class NumberFloatType, \
template<typename> class AllocatorType, \
template<typename, typename = void> class JSONSerializer, \
- class BinaryType>
+ class BinaryType, \
+ class CustomBaseClass>
#define NLOHMANN_BASIC_JSON_TPL \
basic_json<ObjectType, ArrayType, StringType, BooleanType, \
NumberIntegerType, NumberUnsignedType, NumberFloatType, \
- AllocatorType, JSONSerializer, BinaryType>
+ AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
// Macros to simplify conversion from/to types
@@ -395,7 +404,10 @@
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
- friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
+ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
+
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }
/*!
@brief macro
@@ -406,10 +418,12 @@
inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }
+
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
- inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
-
+ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
// inspired from https://stackoverflow.com/a/26745591
// allows to call any std function as if (e.g. with begin):
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_unscope.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_unscope.hpp
index 4a871f0c24..c6620d1e2c 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_unscope.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/macro_unscope.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -38,6 +38,7 @@
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
#undef JSON_HAS_THREE_WAY_COMPARISON
#undef JSON_HAS_RANGES
+ #undef JSON_HAS_STATIC_RTTI
#undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
#endif
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp
index 27d36c66a0..364cc89d87 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp
index d10bf8333c..463f07061b 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/cpp_future.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/cpp_future.hpp
index 22f25140da..412b5aa74b 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/cpp_future.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/cpp_future.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-FileCopyrightText: 2018 The Abseil Authors
// SPDX-License-Identifier: MIT
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/detected.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/detected.hpp
index b2f6db9fc4..1db9bf9ca3 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/detected.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/detected.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp
index 71164f281b..269deffb26 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/is_sax.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/is_sax.hpp
index 2150089632..4e02bc1480 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/is_sax.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/is_sax.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp
index bb560edd47..e381a3a401 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/type_traits.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/type_traits.hpp
index cfc7e5ad31..e1b000dcc2 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/type_traits.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/type_traits.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -12,6 +12,7 @@
#include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type
#include <utility> // declval
#include <tuple> // tuple
+#include <string> // char_traits
#include <nlohmann/detail/iterators/iterator_traits.hpp>
#include <nlohmann/detail/macro_scope.hpp>
@@ -181,6 +182,63 @@ struct actual_object_comparator
template<typename BasicJsonType>
using actual_object_comparator_t = typename actual_object_comparator<BasicJsonType>::type;
+/////////////////
+// char_traits //
+/////////////////
+
+// Primary template of char_traits calls std char_traits
+template<typename T>
+struct char_traits : std::char_traits<T>
+{};
+
+// Explicitly define char traits for unsigned char since it is not standard
+template<>
+struct char_traits<unsigned char> : std::char_traits<char>
+{
+ using char_type = unsigned char;
+ using int_type = uint64_t;
+
+ // Redefine to_int_type function
+ static int_type to_int_type(char_type c) noexcept
+ {
+ return static_cast<int_type>(c);
+ }
+
+ static char_type to_char_type(int_type i) noexcept
+ {
+ return static_cast<char_type>(i);
+ }
+
+ static constexpr int_type eof() noexcept
+ {
+ return static_cast<int_type>(EOF);
+ }
+};
+
+// Explicitly define char traits for signed char since it is not standard
+template<>
+struct char_traits<signed char> : std::char_traits<char>
+{
+ using char_type = signed char;
+ using int_type = uint64_t;
+
+ // Redefine to_int_type function
+ static int_type to_int_type(char_type c) noexcept
+ {
+ return static_cast<int_type>(c);
+ }
+
+ static char_type to_char_type(int_type i) noexcept
+ {
+ return static_cast<char_type>(i);
+ }
+
+ static constexpr int_type eof() noexcept
+ {
+ return static_cast<int_type>(EOF);
+ }
+};
+
///////////////////
// is_ functions //
///////////////////
@@ -217,7 +275,6 @@ template <typename... Ts>
struct is_default_constructible<const std::tuple<Ts...>>
: conjunction<is_default_constructible<Ts>...> {};
-
template <typename T, typename... Args>
struct is_constructible : std::is_constructible<T, Args...> {};
@@ -233,7 +290,6 @@ struct is_constructible<std::tuple<Ts...>> : is_default_constructible<std::tuple
template <typename... Ts>
struct is_constructible<const std::tuple<Ts...>> : is_default_constructible<const std::tuple<Ts...>> {};
-
template<typename T, typename = void>
struct is_iterator_traits : std::false_type {};
@@ -643,7 +699,6 @@ struct value_in_range_of_impl2<OfType, T, false, true>
}
};
-
template<typename OfType, typename T>
struct value_in_range_of_impl2<OfType, T, true, true>
{
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp
index 29154020d5..99615c7c5a 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/binary_writer.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/binary_writer.hpp
index 9423635f01..f475d57be8 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/binary_writer.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/binary_writer.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -63,7 +63,7 @@ class binary_writer
{
case value_t::object:
{
- write_bson_object(*j.m_value.object);
+ write_bson_object(*j.m_data.m_value.object);
break;
}
@@ -98,7 +98,7 @@ class binary_writer
case value_t::boolean:
{
- oa->write_character(j.m_value.boolean
+ oa->write_character(j.m_data.m_value.boolean
? to_char_type(0xF5)
: to_char_type(0xF4));
break;
@@ -106,42 +106,42 @@ class binary_writer
case value_t::number_integer:
{
- if (j.m_value.number_integer >= 0)
+ if (j.m_data.m_value.number_integer >= 0)
{
// CBOR does not differentiate between positive signed
// integers and unsigned integers. Therefore, we used the
// code from the value_t::number_unsigned case here.
- if (j.m_value.number_integer <= 0x17)
+ if (j.m_data.m_value.number_integer <= 0x17)
{
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+ else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
{
oa->write_character(to_char_type(0x18));
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
+ else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
{
oa->write_character(to_char_type(0x19));
- write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
+ else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
{
oa->write_character(to_char_type(0x1A));
- write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
}
else
{
oa->write_character(to_char_type(0x1B));
- write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
}
}
else
{
// The conversions below encode the sign in the first
// byte, and the value is converted to a positive number.
- const auto positive_number = -1 - j.m_value.number_integer;
- if (j.m_value.number_integer >= -24)
+ const auto positive_number = -1 - j.m_data.m_value.number_integer;
+ if (j.m_data.m_value.number_integer >= -24)
{
write_number(static_cast<std::uint8_t>(0x20 + positive_number));
}
@@ -171,52 +171,52 @@ class binary_writer
case value_t::number_unsigned:
{
- if (j.m_value.number_unsigned <= 0x17)
+ if (j.m_data.m_value.number_unsigned <= 0x17)
{
- write_number(static_cast<std::uint8_t>(j.m_value.number_unsigned));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
{
oa->write_character(to_char_type(0x18));
- write_number(static_cast<std::uint8_t>(j.m_value.number_unsigned));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
{
oa->write_character(to_char_type(0x19));
- write_number(static_cast<std::uint16_t>(j.m_value.number_unsigned));
+ write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_unsigned));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
{
oa->write_character(to_char_type(0x1A));
- write_number(static_cast<std::uint32_t>(j.m_value.number_unsigned));
+ write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_unsigned));
}
else
{
oa->write_character(to_char_type(0x1B));
- write_number(static_cast<std::uint64_t>(j.m_value.number_unsigned));
+ write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned));
}
break;
}
case value_t::number_float:
{
- if (std::isnan(j.m_value.number_float))
+ if (std::isnan(j.m_data.m_value.number_float))
{
// NaN is 0xf97e00 in CBOR
oa->write_character(to_char_type(0xF9));
oa->write_character(to_char_type(0x7E));
oa->write_character(to_char_type(0x00));
}
- else if (std::isinf(j.m_value.number_float))
+ else if (std::isinf(j.m_data.m_value.number_float))
{
// Infinity is 0xf97c00, -Infinity is 0xf9fc00
oa->write_character(to_char_type(0xf9));
- oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC));
+ oa->write_character(j.m_data.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC));
oa->write_character(to_char_type(0x00));
}
else
{
- write_compact_float(j.m_value.number_float, detail::input_format_t::cbor);
+ write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::cbor);
}
break;
}
@@ -224,7 +224,7 @@ class binary_writer
case value_t::string:
{
// step 1: write control byte and the string length
- const auto N = j.m_value.string->size();
+ const auto N = j.m_data.m_value.string->size();
if (N <= 0x17)
{
write_number(static_cast<std::uint8_t>(0x60 + N));
@@ -254,15 +254,15 @@ class binary_writer
// step 2: write the string
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.string->c_str()),
- j.m_value.string->size());
+ reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+ j.m_data.m_value.string->size());
break;
}
case value_t::array:
{
// step 1: write control byte and the array size
- const auto N = j.m_value.array->size();
+ const auto N = j.m_data.m_value.array->size();
if (N <= 0x17)
{
write_number(static_cast<std::uint8_t>(0x80 + N));
@@ -291,7 +291,7 @@ class binary_writer
// LCOV_EXCL_STOP
// step 2: write each element
- for (const auto& el : *j.m_value.array)
+ for (const auto& el : *j.m_data.m_value.array)
{
write_cbor(el);
}
@@ -300,32 +300,32 @@ class binary_writer
case value_t::binary:
{
- if (j.m_value.binary->has_subtype())
+ if (j.m_data.m_value.binary->has_subtype())
{
- if (j.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)())
+ if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)())
{
write_number(static_cast<std::uint8_t>(0xd8));
- write_number(static_cast<std::uint8_t>(j.m_value.binary->subtype()));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.binary->subtype()));
}
- else if (j.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)())
+ else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)())
{
write_number(static_cast<std::uint8_t>(0xd9));
- write_number(static_cast<std::uint16_t>(j.m_value.binary->subtype()));
+ write_number(static_cast<std::uint16_t>(j.m_data.m_value.binary->subtype()));
}
- else if (j.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)())
+ else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)())
{
write_number(static_cast<std::uint8_t>(0xda));
- write_number(static_cast<std::uint32_t>(j.m_value.binary->subtype()));
+ write_number(static_cast<std::uint32_t>(j.m_data.m_value.binary->subtype()));
}
- else if (j.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)())
+ else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)())
{
write_number(static_cast<std::uint8_t>(0xdb));
- write_number(static_cast<std::uint64_t>(j.m_value.binary->subtype()));
+ write_number(static_cast<std::uint64_t>(j.m_data.m_value.binary->subtype()));
}
}
// step 1: write control byte and the binary array size
- const auto N = j.m_value.binary->size();
+ const auto N = j.m_data.m_value.binary->size();
if (N <= 0x17)
{
write_number(static_cast<std::uint8_t>(0x40 + N));
@@ -355,7 +355,7 @@ class binary_writer
// step 2: write each element
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.binary->data()),
+ reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
N);
break;
@@ -364,7 +364,7 @@ class binary_writer
case value_t::object:
{
// step 1: write control byte and the object size
- const auto N = j.m_value.object->size();
+ const auto N = j.m_data.m_value.object->size();
if (N <= 0x17)
{
write_number(static_cast<std::uint8_t>(0xA0 + N));
@@ -393,7 +393,7 @@ class binary_writer
// LCOV_EXCL_STOP
// step 2: write each element
- for (const auto& el : *j.m_value.object)
+ for (const auto& el : *j.m_data.m_value.object)
{
write_cbor(el.first);
write_cbor(el.second);
@@ -422,7 +422,7 @@ class binary_writer
case value_t::boolean: // true and false
{
- oa->write_character(j.m_value.boolean
+ oa->write_character(j.m_data.m_value.boolean
? to_char_type(0xC3)
: to_char_type(0xC2));
break;
@@ -430,75 +430,75 @@ class binary_writer
case value_t::number_integer:
{
- if (j.m_value.number_integer >= 0)
+ if (j.m_data.m_value.number_integer >= 0)
{
// MessagePack does not differentiate between positive
// signed integers and unsigned integers. Therefore, we used
// the code from the value_t::number_unsigned case here.
- if (j.m_value.number_unsigned < 128)
+ if (j.m_data.m_value.number_unsigned < 128)
{
// positive fixnum
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
{
// uint 8
oa->write_character(to_char_type(0xCC));
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
{
// uint 16
oa->write_character(to_char_type(0xCD));
- write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
{
// uint 32
oa->write_character(to_char_type(0xCE));
- write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
{
// uint 64
oa->write_character(to_char_type(0xCF));
- write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
}
}
else
{
- if (j.m_value.number_integer >= -32)
+ if (j.m_data.m_value.number_integer >= -32)
{
// negative fixnum
- write_number(static_cast<std::int8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() &&
- j.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+ else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
{
// int 8
oa->write_character(to_char_type(0xD0));
- write_number(static_cast<std::int8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() &&
- j.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+ else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
{
// int 16
oa->write_character(to_char_type(0xD1));
- write_number(static_cast<std::int16_t>(j.m_value.number_integer));
+ write_number(static_cast<std::int16_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() &&
- j.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+ else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
{
// int 32
oa->write_character(to_char_type(0xD2));
- write_number(static_cast<std::int32_t>(j.m_value.number_integer));
+ write_number(static_cast<std::int32_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() &&
- j.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+ else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
{
// int 64
oa->write_character(to_char_type(0xD3));
- write_number(static_cast<std::int64_t>(j.m_value.number_integer));
+ write_number(static_cast<std::int64_t>(j.m_data.m_value.number_integer));
}
}
break;
@@ -506,48 +506,48 @@ class binary_writer
case value_t::number_unsigned:
{
- if (j.m_value.number_unsigned < 128)
+ if (j.m_data.m_value.number_unsigned < 128)
{
// positive fixnum
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
{
// uint 8
oa->write_character(to_char_type(0xCC));
- write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
{
// uint 16
oa->write_character(to_char_type(0xCD));
- write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
{
// uint 32
oa->write_character(to_char_type(0xCE));
- write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
}
- else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+ else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
{
// uint 64
oa->write_character(to_char_type(0xCF));
- write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
+ write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
}
break;
}
case value_t::number_float:
{
- write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack);
+ write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::msgpack);
break;
}
case value_t::string:
{
// step 1: write control byte and the string length
- const auto N = j.m_value.string->size();
+ const auto N = j.m_data.m_value.string->size();
if (N <= 31)
{
// fixstr
@@ -574,15 +574,15 @@ class binary_writer
// step 2: write the string
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.string->c_str()),
- j.m_value.string->size());
+ reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+ j.m_data.m_value.string->size());
break;
}
case value_t::array:
{
// step 1: write control byte and the array size
- const auto N = j.m_value.array->size();
+ const auto N = j.m_data.m_value.array->size();
if (N <= 15)
{
// fixarray
@@ -602,7 +602,7 @@ class binary_writer
}
// step 2: write each element
- for (const auto& el : *j.m_value.array)
+ for (const auto& el : *j.m_data.m_value.array)
{
write_msgpack(el);
}
@@ -613,10 +613,10 @@ class binary_writer
{
// step 0: determine if the binary type has a set subtype to
// determine whether or not to use the ext or fixext types
- const bool use_ext = j.m_value.binary->has_subtype();
+ const bool use_ext = j.m_data.m_value.binary->has_subtype();
// step 1: write control byte and the byte string length
- const auto N = j.m_value.binary->size();
+ const auto N = j.m_data.m_value.binary->size();
if (N <= (std::numeric_limits<std::uint8_t>::max)())
{
std::uint8_t output_type{};
@@ -661,18 +661,18 @@ class binary_writer
}
else if (N <= (std::numeric_limits<std::uint16_t>::max)())
{
- std::uint8_t output_type = use_ext
- ? 0xC8 // ext 16
- : 0xC5; // bin 16
+ const std::uint8_t output_type = use_ext
+ ? 0xC8 // ext 16
+ : 0xC5; // bin 16
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint16_t>(N));
}
else if (N <= (std::numeric_limits<std::uint32_t>::max)())
{
- std::uint8_t output_type = use_ext
- ? 0xC9 // ext 32
- : 0xC6; // bin 32
+ const std::uint8_t output_type = use_ext
+ ? 0xC9 // ext 32
+ : 0xC6; // bin 32
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint32_t>(N));
@@ -681,12 +681,12 @@ class binary_writer
// step 1.5: if this is an ext type, write the subtype
if (use_ext)
{
- write_number(static_cast<std::int8_t>(j.m_value.binary->subtype()));
+ write_number(static_cast<std::int8_t>(j.m_data.m_value.binary->subtype()));
}
// step 2: write the byte string
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.binary->data()),
+ reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
N);
break;
@@ -695,7 +695,7 @@ class binary_writer
case value_t::object:
{
// step 1: write control byte and the object size
- const auto N = j.m_value.object->size();
+ const auto N = j.m_data.m_value.object->size();
if (N <= 15)
{
// fixmap
@@ -715,7 +715,7 @@ class binary_writer
}
// step 2: write each element
- for (const auto& el : *j.m_value.object)
+ for (const auto& el : *j.m_data.m_value.object)
{
write_msgpack(el.first);
write_msgpack(el.second);
@@ -755,7 +755,7 @@ class binary_writer
{
if (add_prefix)
{
- oa->write_character(j.m_value.boolean
+ oa->write_character(j.m_data.m_value.boolean
? to_char_type('T')
: to_char_type('F'));
}
@@ -764,19 +764,19 @@ class binary_writer
case value_t::number_integer:
{
- write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);
break;
}
case value_t::number_unsigned:
{
- write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);
break;
}
case value_t::number_float:
{
- write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);
break;
}
@@ -786,10 +786,10 @@ class binary_writer
{
oa->write_character(to_char_type('S'));
}
- write_number_with_ubjson_prefix(j.m_value.string->size(), true, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.string->c_str()),
- j.m_value.string->size());
+ reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+ j.m_data.m_value.string->size());
break;
}
@@ -801,7 +801,7 @@ class binary_writer
}
bool prefix_required = true;
- if (use_type && !j.m_value.array->empty())
+ if (use_type && !j.m_data.m_value.array->empty())
{
JSON_ASSERT(use_count);
const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
@@ -824,10 +824,10 @@ class binary_writer
if (use_count)
{
oa->write_character(to_char_type('#'));
- write_number_with_ubjson_prefix(j.m_value.array->size(), true, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata);
}
- for (const auto& el : *j.m_value.array)
+ for (const auto& el : *j.m_data.m_value.array)
{
write_ubjson(el, use_count, use_type, prefix_required, use_bjdata);
}
@@ -847,7 +847,7 @@ class binary_writer
oa->write_character(to_char_type('['));
}
- if (use_type && !j.m_value.binary->empty())
+ if (use_type && !j.m_data.m_value.binary->empty())
{
JSON_ASSERT(use_count);
oa->write_character(to_char_type('$'));
@@ -857,21 +857,21 @@ class binary_writer
if (use_count)
{
oa->write_character(to_char_type('#'));
- write_number_with_ubjson_prefix(j.m_value.binary->size(), true, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);
}
if (use_type)
{
oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_value.binary->data()),
- j.m_value.binary->size());
+ reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
+ j.m_data.m_value.binary->size());
}
else
{
- for (size_t i = 0; i < j.m_value.binary->size(); ++i)
+ for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i)
{
oa->write_character(to_char_type('U'));
- oa->write_character(j.m_value.binary->data()[i]);
+ oa->write_character(j.m_data.m_value.binary->data()[i]);
}
}
@@ -885,9 +885,9 @@ class binary_writer
case value_t::object:
{
- if (use_bjdata && j.m_value.object->size() == 3 && j.m_value.object->find("_ArrayType_") != j.m_value.object->end() && j.m_value.object->find("_ArraySize_") != j.m_value.object->end() && j.m_value.object->find("_ArrayData_") != j.m_value.object->end())
+ if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
{
- if (!write_bjdata_ndarray(*j.m_value.object, use_count, use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
+ if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
{
break;
}
@@ -899,7 +899,7 @@ class binary_writer
}
bool prefix_required = true;
- if (use_type && !j.m_value.object->empty())
+ if (use_type && !j.m_data.m_value.object->empty())
{
JSON_ASSERT(use_count);
const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
@@ -922,10 +922,10 @@ class binary_writer
if (use_count)
{
oa->write_character(to_char_type('#'));
- write_number_with_ubjson_prefix(j.m_value.object->size(), true, use_bjdata);
+ write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata);
}
- for (const auto& el : *j.m_value.object)
+ for (const auto& el : *j.m_data.m_value.object)
{
write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);
oa->write_characters(
@@ -1075,19 +1075,19 @@ class binary_writer
void write_bson_unsigned(const string_t& name,
const BasicJsonType& j)
{
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
{
write_bson_entry_header(name, 0x10 /* int32 */);
- write_number<std::int32_t>(static_cast<std::int32_t>(j.m_value.number_unsigned), true);
+ write_number<std::int32_t>(static_cast<std::int32_t>(j.m_data.m_value.number_unsigned), true);
}
- else if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
+ else if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
{
write_bson_entry_header(name, 0x12 /* int64 */);
- write_number<std::int64_t>(static_cast<std::int64_t>(j.m_value.number_unsigned), true);
+ write_number<std::int64_t>(static_cast<std::int64_t>(j.m_data.m_value.number_unsigned), true);
}
else
{
- JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
+ JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
}
}
@@ -1168,13 +1168,13 @@ class binary_writer
switch (j.type())
{
case value_t::object:
- return header_size + calc_bson_object_size(*j.m_value.object);
+ return header_size + calc_bson_object_size(*j.m_data.m_value.object);
case value_t::array:
- return header_size + calc_bson_array_size(*j.m_value.array);
+ return header_size + calc_bson_array_size(*j.m_data.m_value.array);
case value_t::binary:
- return header_size + calc_bson_binary_size(*j.m_value.binary);
+ return header_size + calc_bson_binary_size(*j.m_data.m_value.binary);
case value_t::boolean:
return header_size + 1ul;
@@ -1183,13 +1183,13 @@ class binary_writer
return header_size + 8ul;
case value_t::number_integer:
- return header_size + calc_bson_integer_size(j.m_value.number_integer);
+ return header_size + calc_bson_integer_size(j.m_data.m_value.number_integer);
case value_t::number_unsigned:
- return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned);
+ return header_size + calc_bson_unsigned_size(j.m_data.m_value.number_unsigned);
case value_t::string:
- return header_size + calc_bson_string_size(*j.m_value.string);
+ return header_size + calc_bson_string_size(*j.m_data.m_value.string);
case value_t::null:
return header_size + 0ul;
@@ -1215,28 +1215,28 @@ class binary_writer
switch (j.type())
{
case value_t::object:
- return write_bson_object_entry(name, *j.m_value.object);
+ return write_bson_object_entry(name, *j.m_data.m_value.object);
case value_t::array:
- return write_bson_array(name, *j.m_value.array);
+ return write_bson_array(name, *j.m_data.m_value.array);
case value_t::binary:
- return write_bson_binary(name, *j.m_value.binary);
+ return write_bson_binary(name, *j.m_data.m_value.binary);
case value_t::boolean:
- return write_bson_boolean(name, j.m_value.boolean);
+ return write_bson_boolean(name, j.m_data.m_value.boolean);
case value_t::number_float:
- return write_bson_double(name, j.m_value.number_float);
+ return write_bson_double(name, j.m_data.m_value.number_float);
case value_t::number_integer:
- return write_bson_integer(name, j.m_value.number_integer);
+ return write_bson_integer(name, j.m_data.m_value.number_integer);
case value_t::number_unsigned:
return write_bson_unsigned(name, j);
case value_t::string:
- return write_bson_string(name, *j.m_value.string);
+ return write_bson_string(name, *j.m_data.m_value.string);
case value_t::null:
return write_bson_null(name);
@@ -1258,8 +1258,8 @@ class binary_writer
*/
static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)
{
- std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0),
- [](size_t result, const typename BasicJsonType::object_t::value_type & el)
+ const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0),
+ [](size_t result, const typename BasicJsonType::object_t::value_type & el)
{
return result += calc_bson_element_size(el.first, el.second);
});
@@ -1509,35 +1509,35 @@ class binary_writer
return 'Z';
case value_t::boolean:
- return j.m_value.boolean ? 'T' : 'F';
+ return j.m_data.m_value.boolean ? 'T' : 'F';
case value_t::number_integer:
{
- if ((std::numeric_limits<std::int8_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+ if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
{
return 'i';
}
- if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+ if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
{
return 'U';
}
- if ((std::numeric_limits<std::int16_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+ if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
{
return 'I';
}
- if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
{
return 'u';
}
- if ((std::numeric_limits<std::int32_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+ if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
{
return 'l';
}
- if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
{
return 'm';
}
- if ((std::numeric_limits<std::int64_t>::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+ if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
{
return 'L';
}
@@ -1547,35 +1547,35 @@ class binary_writer
case value_t::number_unsigned:
{
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
{
return 'i';
}
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)()))
{
return 'U';
}
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
{
return 'I';
}
- if (use_bjdata && j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)()))
+ if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)()))
{
return 'u';
}
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
{
return 'l';
}
- if (use_bjdata && j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)()))
+ if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)()))
{
return 'm';
}
- if (j.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
+ if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
{
return 'L';
}
- if (use_bjdata && j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+ if (use_bjdata && j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
{
return 'M';
}
@@ -1584,7 +1584,7 @@ class binary_writer
}
case value_t::number_float:
- return get_ubjson_float_prefix(j.m_value.number_float);
+ return get_ubjson_float_prefix(j.m_data.m_value.number_float);
case value_t::string:
return 'S';
@@ -1633,7 +1633,7 @@ class binary_writer
std::size_t len = (value.at(key).empty() ? 0 : 1);
for (const auto& el : value.at(key))
{
- len *= static_cast<std::size_t>(el.m_value.number_unsigned);
+ len *= static_cast<std::size_t>(el.m_data.m_value.number_unsigned);
}
key = "_ArrayData_";
@@ -1655,70 +1655,70 @@ class binary_writer
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::uint8_t>(el.m_value.number_unsigned), true);
+ write_number(static_cast<std::uint8_t>(el.m_data.m_value.number_unsigned), true);
}
}
else if (dtype == 'i')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::int8_t>(el.m_value.number_integer), true);
+ write_number(static_cast<std::int8_t>(el.m_data.m_value.number_integer), true);
}
}
else if (dtype == 'u')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::uint16_t>(el.m_value.number_unsigned), true);
+ write_number(static_cast<std::uint16_t>(el.m_data.m_value.number_unsigned), true);
}
}
else if (dtype == 'I')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::int16_t>(el.m_value.number_integer), true);
+ write_number(static_cast<std::int16_t>(el.m_data.m_value.number_integer), true);
}
}
else if (dtype == 'm')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::uint32_t>(el.m_value.number_unsigned), true);
+ write_number(static_cast<std::uint32_t>(el.m_data.m_value.number_unsigned), true);
}
}
else if (dtype == 'l')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::int32_t>(el.m_value.number_integer), true);
+ write_number(static_cast<std::int32_t>(el.m_data.m_value.number_integer), true);
}
}
else if (dtype == 'M')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::uint64_t>(el.m_value.number_unsigned), true);
+ write_number(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned), true);
}
}
else if (dtype == 'L')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<std::int64_t>(el.m_value.number_integer), true);
+ write_number(static_cast<std::int64_t>(el.m_data.m_value.number_integer), true);
}
}
else if (dtype == 'd')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<float>(el.m_value.number_float), true);
+ write_number(static_cast<float>(el.m_data.m_value.number_float), true);
}
}
else if (dtype == 'D')
{
for (const auto& el : value.at(key))
{
- write_number(static_cast<double>(el.m_value.number_float), true);
+ write_number(static_cast<double>(el.m_data.m_value.number_float), true);
}
}
return false;
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/output_adapters.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/output_adapters.hpp
index 630bd8f73f..626f7c0c85 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/output_adapters.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/output_adapters.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/serializer.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/serializer.hpp
index 500fc55ec5..ed20b0d9e1 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/serializer.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/output/serializer.hpp
@@ -1,10 +1,10 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2008-2009 Björn Hoehrmann <bjoern@hoehrmann.de>
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -110,11 +110,11 @@ class serializer
const unsigned int indent_step,
const unsigned int current_indent = 0)
{
- switch (val.m_type)
+ switch (val.m_data.m_type)
{
case value_t::object:
{
- if (val.m_value.object->empty())
+ if (val.m_data.m_value.object->empty())
{
o->write_characters("{}", 2);
return;
@@ -132,8 +132,8 @@ class serializer
}
// first n-1 elements
- auto i = val.m_value.object->cbegin();
- for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
+ auto i = val.m_data.m_value.object->cbegin();
+ for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
{
o->write_characters(indent_string.c_str(), new_indent);
o->write_character('\"');
@@ -144,8 +144,8 @@ class serializer
}
// last element
- JSON_ASSERT(i != val.m_value.object->cend());
- JSON_ASSERT(std::next(i) == val.m_value.object->cend());
+ JSON_ASSERT(i != val.m_data.m_value.object->cend());
+ JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
o->write_characters(indent_string.c_str(), new_indent);
o->write_character('\"');
dump_escaped(i->first, ensure_ascii);
@@ -161,8 +161,8 @@ class serializer
o->write_character('{');
// first n-1 elements
- auto i = val.m_value.object->cbegin();
- for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
+ auto i = val.m_data.m_value.object->cbegin();
+ for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
{
o->write_character('\"');
dump_escaped(i->first, ensure_ascii);
@@ -172,8 +172,8 @@ class serializer
}
// last element
- JSON_ASSERT(i != val.m_value.object->cend());
- JSON_ASSERT(std::next(i) == val.m_value.object->cend());
+ JSON_ASSERT(i != val.m_data.m_value.object->cend());
+ JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
o->write_character('\"');
dump_escaped(i->first, ensure_ascii);
o->write_characters("\":", 2);
@@ -187,7 +187,7 @@ class serializer
case value_t::array:
{
- if (val.m_value.array->empty())
+ if (val.m_data.m_value.array->empty())
{
o->write_characters("[]", 2);
return;
@@ -205,8 +205,8 @@ class serializer
}
// first n-1 elements
- for (auto i = val.m_value.array->cbegin();
- i != val.m_value.array->cend() - 1; ++i)
+ for (auto i = val.m_data.m_value.array->cbegin();
+ i != val.m_data.m_value.array->cend() - 1; ++i)
{
o->write_characters(indent_string.c_str(), new_indent);
dump(*i, true, ensure_ascii, indent_step, new_indent);
@@ -214,9 +214,9 @@ class serializer
}
// last element
- JSON_ASSERT(!val.m_value.array->empty());
+ JSON_ASSERT(!val.m_data.m_value.array->empty());
o->write_characters(indent_string.c_str(), new_indent);
- dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);
+ dump(val.m_data.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);
o->write_character('\n');
o->write_characters(indent_string.c_str(), current_indent);
@@ -227,16 +227,16 @@ class serializer
o->write_character('[');
// first n-1 elements
- for (auto i = val.m_value.array->cbegin();
- i != val.m_value.array->cend() - 1; ++i)
+ for (auto i = val.m_data.m_value.array->cbegin();
+ i != val.m_data.m_value.array->cend() - 1; ++i)
{
dump(*i, false, ensure_ascii, indent_step, current_indent);
o->write_character(',');
}
// last element
- JSON_ASSERT(!val.m_value.array->empty());
- dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);
+ JSON_ASSERT(!val.m_data.m_value.array->empty());
+ dump(val.m_data.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);
o->write_character(']');
}
@@ -247,7 +247,7 @@ class serializer
case value_t::string:
{
o->write_character('\"');
- dump_escaped(*val.m_value.string, ensure_ascii);
+ dump_escaped(*val.m_data.m_value.string, ensure_ascii);
o->write_character('\"');
return;
}
@@ -269,24 +269,24 @@ class serializer
o->write_characters("\"bytes\": [", 10);
- if (!val.m_value.binary->empty())
+ if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_value.binary->cbegin();
- i != val.m_value.binary->cend() - 1; ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin();
+ i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_characters(", ", 2);
}
- dump_integer(val.m_value.binary->back());
+ dump_integer(val.m_data.m_value.binary->back());
}
o->write_characters("],\n", 3);
o->write_characters(indent_string.c_str(), new_indent);
o->write_characters("\"subtype\": ", 11);
- if (val.m_value.binary->has_subtype())
+ if (val.m_data.m_value.binary->has_subtype())
{
- dump_integer(val.m_value.binary->subtype());
+ dump_integer(val.m_data.m_value.binary->subtype());
}
else
{
@@ -300,21 +300,21 @@ class serializer
{
o->write_characters("{\"bytes\":[", 10);
- if (!val.m_value.binary->empty())
+ if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_value.binary->cbegin();
- i != val.m_value.binary->cend() - 1; ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin();
+ i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_character(',');
}
- dump_integer(val.m_value.binary->back());
+ dump_integer(val.m_data.m_value.binary->back());
}
o->write_characters("],\"subtype\":", 12);
- if (val.m_value.binary->has_subtype())
+ if (val.m_data.m_value.binary->has_subtype())
{
- dump_integer(val.m_value.binary->subtype());
+ dump_integer(val.m_data.m_value.binary->subtype());
o->write_character('}');
}
else
@@ -327,7 +327,7 @@ class serializer
case value_t::boolean:
{
- if (val.m_value.boolean)
+ if (val.m_data.m_value.boolean)
{
o->write_characters("true", 4);
}
@@ -340,19 +340,19 @@ class serializer
case value_t::number_integer:
{
- dump_integer(val.m_value.number_integer);
+ dump_integer(val.m_data.m_value.number_integer);
return;
}
case value_t::number_unsigned:
{
- dump_integer(val.m_value.number_unsigned);
+ dump_integer(val.m_data.m_value.number_unsigned);
return;
}
case value_t::number_float:
{
- dump_float(val.m_value.number_float);
+ dump_float(val.m_data.m_value.number_float);
return;
}
@@ -926,8 +926,8 @@ class serializer
? (byte & 0x3fu) | (codep << 6u)
: (0xFFu >> type) & (byte);
- std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
- JSON_ASSERT(index < 400);
+ const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
+ JSON_ASSERT(index < utf8d.size());
state = utf8d[index];
return state;
}
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_concat.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_concat.hpp
index 59725ca825..f49e8d215e 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_concat.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_concat.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -25,28 +25,28 @@ inline std::size_t concat_length()
}
template<typename... Args>
-inline std::size_t concat_length(const char* cstr, Args&& ... rest);
+inline std::size_t concat_length(const char* cstr, const Args& ... rest);
template<typename StringType, typename... Args>
-inline std::size_t concat_length(const StringType& str, Args&& ... rest);
+inline std::size_t concat_length(const StringType& str, const Args& ... rest);
template<typename... Args>
-inline std::size_t concat_length(const char /*c*/, Args&& ... rest)
+inline std::size_t concat_length(const char /*c*/, const Args& ... rest)
{
- return 1 + concat_length(std::forward<Args>(rest)...);
+ return 1 + concat_length(rest...);
}
template<typename... Args>
-inline std::size_t concat_length(const char* cstr, Args&& ... rest)
+inline std::size_t concat_length(const char* cstr, const Args& ... rest)
{
// cppcheck-suppress ignoredReturnValue
- return ::strlen(cstr) + concat_length(std::forward<Args>(rest)...);
+ return ::strlen(cstr) + concat_length(rest...);
}
template<typename StringType, typename... Args>
-inline std::size_t concat_length(const StringType& str, Args&& ... rest)
+inline std::size_t concat_length(const StringType& str, const Args& ... rest)
{
- return str.size() + concat_length(std::forward<Args>(rest)...);
+ return str.size() + concat_length(rest...);
}
template<typename OutStringType>
@@ -137,7 +137,7 @@ template<typename OutStringType = std::string, typename... Args>
inline OutStringType concat(Args && ... args)
{
OutStringType str;
- str.reserve(concat_length(std::forward<Args>(args)...));
+ str.reserve(concat_length(args...));
concat_into(str, std::forward<Args>(args)...);
return str;
}
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_escape.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_escape.hpp
index f20461910d..7f1b5c562b 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_escape.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/string_escape.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/detail/value_t.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/detail/value_t.hpp
index 0e79fd6698..07688fe8c6 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/detail/value_t.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/detail/value_t.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/json.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/json.hpp
index 18a7c87577..95d6bf1dd9 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/json.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/json.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
/****************************************************************************\
@@ -27,7 +27,6 @@
#endif // JSON_NO_IO
#include <iterator> // random_access_iterator_tag
#include <memory> // unique_ptr
-#include <numeric> // accumulate
#include <string> // string, stoi, to_string
#include <utility> // declval, forward, move, pair, swap
#include <vector> // vector
@@ -47,6 +46,7 @@
#include <nlohmann/detail/iterators/iteration_proxy.hpp>
#include <nlohmann/detail/iterators/json_reverse_iterator.hpp>
#include <nlohmann/detail/iterators/primitive_iterator.hpp>
+#include <nlohmann/detail/json_custom_base_class.hpp>
#include <nlohmann/detail/json_pointer.hpp>
#include <nlohmann/detail/json_ref.hpp>
#include <nlohmann/detail/macro_scope.hpp>
@@ -62,7 +62,9 @@
#include <nlohmann/ordered_map.hpp>
#if defined(JSON_HAS_CPP_17)
- #include <any>
+ #if JSON_HAS_STATIC_RTTI
+ #include <any>
+ #endif
#include <string_view>
#endif
@@ -93,6 +95,7 @@ The invariants are checked by member function assert_invariant().
*/
NLOHMANN_BASIC_JSON_TPL_DECLARATION
class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
+ : public ::nlohmann::detail::json_base_class<CustomBaseClass>
{
private:
template<detail::value_t> friend struct detail::external_constructor;
@@ -119,6 +122,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// workaround type for MSVC
using basic_json_t = NLOHMANN_BASIC_JSON_TPL;
+ using json_base_class_t = ::nlohmann::detail::json_base_class<CustomBaseClass>;
JSON_PRIVATE_UNLESS_TESTED:
// convenience aliases for types residing in namespace detail;
@@ -190,7 +194,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
/////////////////////
// container types //
/////////////////////
@@ -232,7 +235,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
/// @brief returns the allocator associated with the container
/// @sa https://json.nlohmann.me/api/basic_json/get_allocator/
static allocator_type get_allocator()
@@ -247,7 +249,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
basic_json result;
- result["copyright"] = "(C) 2013-2022 Niels Lohmann";
+ result["copyright"] = "(C) 2013-2023 Niels Lohmann";
result["name"] = "JSON for Modern C++";
result["url"] = "https://github.com/nlohmann/json";
result["version"]["string"] =
@@ -295,7 +297,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}};
#endif
-
#if defined(_MSVC_LANG)
result["compiler"]["c++"] = std::to_string(_MSVC_LANG);
#elif defined(__cplusplus)
@@ -306,7 +307,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
return result;
}
-
///////////////////////////
// JSON value data types //
///////////////////////////
@@ -514,7 +514,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
object = nullptr; // silence warning, see #821
if (JSON_HEDLEY_UNLIKELY(t == value_t::null))
{
- JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.11.2", nullptr)); // LCOV_EXCL_LINE
+ JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.11.3", nullptr)); // LCOV_EXCL_LINE
}
break;
}
@@ -553,6 +553,16 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
void destroy(value_t t)
{
+ if (
+ (t == value_t::object && object == nullptr) ||
+ (t == value_t::array && array == nullptr) ||
+ (t == value_t::string && string == nullptr) ||
+ (t == value_t::binary && binary == nullptr)
+ )
+ {
+ //not initialized (e.g. due to exception in the ctor)
+ return;
+ }
if (t == value_t::array || t == value_t::object)
{
// flatten the current json_value to a heap-allocated stack
@@ -583,18 +593,18 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// its children to the stack to be processed later
if (current_item.is_array())
{
- std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), std::back_inserter(stack));
+ std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack));
- current_item.m_value.array->clear();
+ current_item.m_data.m_value.array->clear();
}
else if (current_item.is_object())
{
- for (auto&& it : *current_item.m_value.object)
+ for (auto&& it : *current_item.m_data.m_value.object)
{
stack.push_back(std::move(it.second));
}
- current_item.m_value.object->clear();
+ current_item.m_data.m_value.object->clear();
}
// it's now safe that current_item get destructed
@@ -671,10 +681,10 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
*/
void assert_invariant(bool check_parents = true) const noexcept
{
- JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr);
- JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr);
- JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr);
- JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr);
+ JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);
+ JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);
+ JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);
+ JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);
#if JSON_DIAGNOSTICS
JSON_TRY
@@ -693,11 +703,11 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
void set_parents()
{
#if JSON_DIAGNOSTICS
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::array:
{
- for (auto& element : *m_value.array)
+ for (auto& element : *m_data.m_value.array)
{
element.m_parent = this;
}
@@ -706,7 +716,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
case value_t::object:
{
- for (auto& element : *m_value.object)
+ for (auto& element : *m_data.m_value.object)
{
element.second.m_parent = this;
}
@@ -747,7 +757,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
// see https://github.com/nlohmann/json/issues/2838
JSON_ASSERT(type() == value_t::array);
- if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity))
+ if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
{
// capacity has changed: update all parents
set_parents();
@@ -803,7 +813,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief create an empty value with a given type
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
basic_json(const value_t v)
- : m_type(v), m_value(v)
+ : m_data(v)
{
assert_invariant();
}
@@ -877,12 +887,12 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
*this = nullptr;
break;
case value_t::discarded:
- m_type = value_t::discarded;
+ m_data.m_type = value_t::discarded;
break;
default: // LCOV_EXCL_LINE
JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
}
- JSON_ASSERT(m_type == val.type());
+ JSON_ASSERT(m_data.m_type == val.type());
set_parents();
assert_invariant();
}
@@ -898,7 +908,10 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
bool is_an_object = std::all_of(init.begin(), init.end(),
[](const detail::json_ref<basic_json>& element_ref)
{
- return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string();
+ // The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;
+ // (many string types can be constructed from 0 via its null-pointer guise, so we get a
+ // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)
+ return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast<size_type>(0)].is_string();
});
// adjust type if type deduction is not wanted
@@ -920,22 +933,22 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_an_object)
{
// the initializer list is a list of pairs -> create object
- m_type = value_t::object;
- m_value = value_t::object;
+ m_data.m_type = value_t::object;
+ m_data.m_value = value_t::object;
for (auto& element_ref : init)
{
auto element = element_ref.moved_or_copied();
- m_value.object->emplace(
- std::move(*((*element.m_value.array)[0].m_value.string)),
- std::move((*element.m_value.array)[1]));
+ m_data.m_value.object->emplace(
+ std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
+ std::move((*element.m_data.m_value.array)[1]));
}
}
else
{
// the initializer list describes an array -> create array
- m_type = value_t::array;
- m_value.array = create<array_t>(init.begin(), init.end());
+ m_data.m_type = value_t::array;
+ m_data.m_value.array = create<array_t>(init.begin(), init.end());
}
set_parents();
@@ -948,8 +961,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
static basic_json binary(const typename binary_t::container_type& init)
{
auto res = basic_json();
- res.m_type = value_t::binary;
- res.m_value = init;
+ res.m_data.m_type = value_t::binary;
+ res.m_data.m_value = init;
return res;
}
@@ -959,8 +972,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype)
{
auto res = basic_json();
- res.m_type = value_t::binary;
- res.m_value = binary_t(init, subtype);
+ res.m_data.m_type = value_t::binary;
+ res.m_data.m_value = binary_t(init, subtype);
return res;
}
@@ -970,8 +983,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
static basic_json binary(typename binary_t::container_type&& init)
{
auto res = basic_json();
- res.m_type = value_t::binary;
- res.m_value = std::move(init);
+ res.m_data.m_type = value_t::binary;
+ res.m_data.m_value = std::move(init);
return res;
}
@@ -981,8 +994,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype)
{
auto res = basic_json();
- res.m_type = value_t::binary;
- res.m_value = binary_t(std::move(init), subtype);
+ res.m_data.m_type = value_t::binary;
+ res.m_data.m_value = binary_t(std::move(init), subtype);
return res;
}
@@ -1004,10 +1017,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief construct an array with count copies of given value
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
- basic_json(size_type cnt, const basic_json& val)
- : m_type(value_t::array)
+ basic_json(size_type cnt, const basic_json& val):
+ m_data{cnt, val}
{
- m_value.array = create<array_t>(cnt, val);
set_parents();
assert_invariant();
}
@@ -1029,10 +1041,10 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
// copy type from first iterator
- m_type = first.m_object->m_type;
+ m_data.m_type = first.m_object->m_data.m_type;
// check if iterator range is complete for primitive values
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::boolean:
case value_t::number_float:
@@ -1057,55 +1069,55 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
break;
}
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::number_integer:
{
- m_value.number_integer = first.m_object->m_value.number_integer;
+ m_data.m_value.number_integer = first.m_object->m_data.m_value.number_integer;
break;
}
case value_t::number_unsigned:
{
- m_value.number_unsigned = first.m_object->m_value.number_unsigned;
+ m_data.m_value.number_unsigned = first.m_object->m_data.m_value.number_unsigned;
break;
}
case value_t::number_float:
{
- m_value.number_float = first.m_object->m_value.number_float;
+ m_data.m_value.number_float = first.m_object->m_data.m_value.number_float;
break;
}
case value_t::boolean:
{
- m_value.boolean = first.m_object->m_value.boolean;
+ m_data.m_value.boolean = first.m_object->m_data.m_value.boolean;
break;
}
case value_t::string:
{
- m_value = *first.m_object->m_value.string;
+ m_data.m_value = *first.m_object->m_data.m_value.string;
break;
}
case value_t::object:
{
- m_value.object = create<object_t>(first.m_it.object_iterator,
- last.m_it.object_iterator);
+ m_data.m_value.object = create<object_t>(first.m_it.object_iterator,
+ last.m_it.object_iterator);
break;
}
case value_t::array:
{
- m_value.array = create<array_t>(first.m_it.array_iterator,
- last.m_it.array_iterator);
+ m_data.m_value.array = create<array_t>(first.m_it.array_iterator,
+ last.m_it.array_iterator);
break;
}
case value_t::binary:
{
- m_value = *first.m_object->m_value.binary;
+ m_data.m_value = *first.m_object->m_data.m_value.binary;
break;
}
@@ -1119,7 +1131,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
-
///////////////////////////////////////
// other constructors and destructor //
///////////////////////////////////////
@@ -1132,58 +1143,59 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief copy constructor
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
basic_json(const basic_json& other)
- : m_type(other.m_type)
+ : json_base_class_t(other)
{
+ m_data.m_type = other.m_data.m_type;
// check of passed value is valid
other.assert_invariant();
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::object:
{
- m_value = *other.m_value.object;
+ m_data.m_value = *other.m_data.m_value.object;
break;
}
case value_t::array:
{
- m_value = *other.m_value.array;
+ m_data.m_value = *other.m_data.m_value.array;
break;
}
case value_t::string:
{
- m_value = *other.m_value.string;
+ m_data.m_value = *other.m_data.m_value.string;
break;
}
case value_t::boolean:
{
- m_value = other.m_value.boolean;
+ m_data.m_value = other.m_data.m_value.boolean;
break;
}
case value_t::number_integer:
{
- m_value = other.m_value.number_integer;
+ m_data.m_value = other.m_data.m_value.number_integer;
break;
}
case value_t::number_unsigned:
{
- m_value = other.m_value.number_unsigned;
+ m_data.m_value = other.m_data.m_value.number_unsigned;
break;
}
case value_t::number_float:
{
- m_value = other.m_value.number_float;
+ m_data.m_value = other.m_data.m_value.number_float;
break;
}
case value_t::binary:
{
- m_value = *other.m_value.binary;
+ m_data.m_value = *other.m_data.m_value.binary;
break;
}
@@ -1200,15 +1212,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief move constructor
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
basic_json(basic_json&& other) noexcept
- : m_type(std::move(other.m_type)),
- m_value(std::move(other.m_value))
+ : json_base_class_t(std::forward<json_base_class_t>(other)),
+ m_data(std::move(other.m_data))
{
// check that passed value is valid
other.assert_invariant(false);
// invalidate payload
- other.m_type = value_t::null;
- other.m_value = {};
+ other.m_data.m_type = value_t::null;
+ other.m_data.m_value = {};
set_parents();
assert_invariant();
@@ -1220,15 +1232,17 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_nothrow_move_constructible<value_t>::value&&
std::is_nothrow_move_assignable<value_t>::value&&
std::is_nothrow_move_constructible<json_value>::value&&
- std::is_nothrow_move_assignable<json_value>::value
+ std::is_nothrow_move_assignable<json_value>::value&&
+ std::is_nothrow_move_assignable<json_base_class_t>::value
)
{
// check that passed value is valid
other.assert_invariant();
using std::swap;
- swap(m_type, other.m_type);
- swap(m_value, other.m_value);
+ swap(m_data.m_type, other.m_data.m_type);
+ swap(m_data.m_value, other.m_data.m_value);
+ json_base_class_t::operator=(std::move(other));
set_parents();
assert_invariant();
@@ -1240,7 +1254,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
~basic_json() noexcept
{
assert_invariant(false);
- m_value.destroy(m_type);
}
/// @}
@@ -1280,7 +1293,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/type/
constexpr value_t type() const noexcept
{
- return m_type;
+ return m_data.m_type;
}
/// @brief return whether type is primitive
@@ -1301,14 +1314,14 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/is_null/
constexpr bool is_null() const noexcept
{
- return m_type == value_t::null;
+ return m_data.m_type == value_t::null;
}
/// @brief return whether value is a boolean
/// @sa https://json.nlohmann.me/api/basic_json/is_boolean/
constexpr bool is_boolean() const noexcept
{
- return m_type == value_t::boolean;
+ return m_data.m_type == value_t::boolean;
}
/// @brief return whether value is a number
@@ -1322,63 +1335,63 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/
constexpr bool is_number_integer() const noexcept
{
- return m_type == value_t::number_integer || m_type == value_t::number_unsigned;
+ return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;
}
/// @brief return whether value is an unsigned integer number
/// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/
constexpr bool is_number_unsigned() const noexcept
{
- return m_type == value_t::number_unsigned;
+ return m_data.m_type == value_t::number_unsigned;
}
/// @brief return whether value is a floating-point number
/// @sa https://json.nlohmann.me/api/basic_json/is_number_float/
constexpr bool is_number_float() const noexcept
{
- return m_type == value_t::number_float;
+ return m_data.m_type == value_t::number_float;
}
/// @brief return whether value is an object
/// @sa https://json.nlohmann.me/api/basic_json/is_object/
constexpr bool is_object() const noexcept
{
- return m_type == value_t::object;
+ return m_data.m_type == value_t::object;
}
/// @brief return whether value is an array
/// @sa https://json.nlohmann.me/api/basic_json/is_array/
constexpr bool is_array() const noexcept
{
- return m_type == value_t::array;
+ return m_data.m_type == value_t::array;
}
/// @brief return whether value is a string
/// @sa https://json.nlohmann.me/api/basic_json/is_string/
constexpr bool is_string() const noexcept
{
- return m_type == value_t::string;
+ return m_data.m_type == value_t::string;
}
/// @brief return whether value is a binary array
/// @sa https://json.nlohmann.me/api/basic_json/is_binary/
constexpr bool is_binary() const noexcept
{
- return m_type == value_t::binary;
+ return m_data.m_type == value_t::binary;
}
/// @brief return whether value is discarded
/// @sa https://json.nlohmann.me/api/basic_json/is_discarded/
constexpr bool is_discarded() const noexcept
{
- return m_type == value_t::discarded;
+ return m_data.m_type == value_t::discarded;
}
/// @brief return the type of the JSON value (implicit)
/// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/
constexpr operator value_t() const noexcept
{
- return m_type;
+ return m_data.m_type;
}
/// @}
@@ -1393,7 +1406,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
if (JSON_HEDLEY_LIKELY(is_boolean()))
{
- return m_value.boolean;
+ return m_data.m_value.boolean;
}
JSON_THROW(type_error::create(302, detail::concat("type must be boolean, but is ", type_name()), this));
@@ -1402,97 +1415,97 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// get a pointer to the value (object)
object_t* get_impl_ptr(object_t* /*unused*/) noexcept
{
- return is_object() ? m_value.object : nullptr;
+ return is_object() ? m_data.m_value.object : nullptr;
}
/// get a pointer to the value (object)
constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept
{
- return is_object() ? m_value.object : nullptr;
+ return is_object() ? m_data.m_value.object : nullptr;
}
/// get a pointer to the value (array)
array_t* get_impl_ptr(array_t* /*unused*/) noexcept
{
- return is_array() ? m_value.array : nullptr;
+ return is_array() ? m_data.m_value.array : nullptr;
}
/// get a pointer to the value (array)
constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept
{
- return is_array() ? m_value.array : nullptr;
+ return is_array() ? m_data.m_value.array : nullptr;
}
/// get a pointer to the value (string)
string_t* get_impl_ptr(string_t* /*unused*/) noexcept
{
- return is_string() ? m_value.string : nullptr;
+ return is_string() ? m_data.m_value.string : nullptr;
}
/// get a pointer to the value (string)
constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept
{
- return is_string() ? m_value.string : nullptr;
+ return is_string() ? m_data.m_value.string : nullptr;
}
/// get a pointer to the value (boolean)
boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
{
- return is_boolean() ? &m_value.boolean : nullptr;
+ return is_boolean() ? &m_data.m_value.boolean : nullptr;
}
/// get a pointer to the value (boolean)
constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept
{
- return is_boolean() ? &m_value.boolean : nullptr;
+ return is_boolean() ? &m_data.m_value.boolean : nullptr;
}
/// get a pointer to the value (integer number)
number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
{
- return is_number_integer() ? &m_value.number_integer : nullptr;
+ return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
}
/// get a pointer to the value (integer number)
constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept
{
- return is_number_integer() ? &m_value.number_integer : nullptr;
+ return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
}
/// get a pointer to the value (unsigned number)
number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
{
- return is_number_unsigned() ? &m_value.number_unsigned : nullptr;
+ return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
}
/// get a pointer to the value (unsigned number)
constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept
{
- return is_number_unsigned() ? &m_value.number_unsigned : nullptr;
+ return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
}
/// get a pointer to the value (floating-point number)
number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
{
- return is_number_float() ? &m_value.number_float : nullptr;
+ return is_number_float() ? &m_data.m_value.number_float : nullptr;
}
/// get a pointer to the value (floating-point number)
constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept
{
- return is_number_float() ? &m_value.number_float : nullptr;
+ return is_number_float() ? &m_data.m_value.number_float : nullptr;
}
/// get a pointer to the value (binary)
binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
{
- return is_binary() ? m_value.binary : nullptr;
+ return is_binary() ? m_data.m_value.binary : nullptr;
}
/// get a pointer to the value (binary)
constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept
{
- return is_binary() ? m_value.binary : nullptr;
+ return is_binary() ? m_data.m_value.binary : nullptr;
}
/*!
@@ -1875,7 +1888,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
detail::negation<std::is_same<ValueType, std::string_view>>,
#endif
-#if defined(JSON_HAS_CPP_17)
+#if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI
detail::negation<std::is_same<ValueType, std::any>>,
#endif
detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>
@@ -1912,7 +1925,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
////////////////////
// element access //
////////////////////
@@ -1930,7 +1942,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
JSON_TRY
{
- return set_parent(m_value.array->at(idx));
+ return set_parent(m_data.m_value.array->at(idx));
}
JSON_CATCH (std::out_of_range&)
{
@@ -1953,7 +1965,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
JSON_TRY
{
- return m_value.array->at(idx);
+ return m_data.m_value.array->at(idx);
}
JSON_CATCH (std::out_of_range&)
{
@@ -1977,8 +1989,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
}
- auto it = m_value.object->find(key);
- if (it == m_value.object->end())
+ auto it = m_data.m_value.object->find(key);
+ if (it == m_data.m_value.object->end())
{
JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
}
@@ -1997,8 +2009,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
}
- auto it = m_value.object->find(std::forward<KeyType>(key));
- if (it == m_value.object->end())
+ auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+ if (it == m_data.m_value.object->end())
{
JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
}
@@ -2015,8 +2027,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
}
- auto it = m_value.object->find(key);
- if (it == m_value.object->end())
+ auto it = m_data.m_value.object->find(key);
+ if (it == m_data.m_value.object->end())
{
JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
}
@@ -2035,8 +2047,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
}
- auto it = m_value.object->find(std::forward<KeyType>(key));
- if (it == m_value.object->end())
+ auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+ if (it == m_data.m_value.object->end())
{
JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
}
@@ -2050,8 +2062,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// implicitly convert null value to an empty array
if (is_null())
{
- m_type = value_t::array;
- m_value.array = create<array_t>();
+ m_data.m_type = value_t::array;
+ m_data.m_value.array = create<array_t>();
assert_invariant();
}
@@ -2059,17 +2071,17 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (JSON_HEDLEY_LIKELY(is_array()))
{
// fill up array with null values if given idx is outside range
- if (idx >= m_value.array->size())
+ if (idx >= m_data.m_value.array->size())
{
#if JSON_DIAGNOSTICS
// remember array size & capacity before resizing
- const auto old_size = m_value.array->size();
- const auto old_capacity = m_value.array->capacity();
+ const auto old_size = m_data.m_value.array->size();
+ const auto old_capacity = m_data.m_value.array->capacity();
#endif
- m_value.array->resize(idx + 1);
+ m_data.m_value.array->resize(idx + 1);
#if JSON_DIAGNOSTICS
- if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity))
+ if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
{
// capacity has changed: update all parents
set_parents();
@@ -2083,7 +2095,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- return m_value.array->operator[](idx);
+ return m_data.m_value.array->operator[](idx);
}
JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
@@ -2096,7 +2108,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// const operator[] only works for arrays
if (JSON_HEDLEY_LIKELY(is_array()))
{
- return m_value.array->operator[](idx);
+ return m_data.m_value.array->operator[](idx);
}
JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
@@ -2109,15 +2121,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// implicitly convert null value to an empty object
if (is_null())
{
- m_type = value_t::object;
- m_value.object = create<object_t>();
+ m_data.m_type = value_t::object;
+ m_data.m_value.object = create<object_t>();
assert_invariant();
}
// operator[] only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- auto result = m_value.object->emplace(std::move(key), nullptr);
+ auto result = m_data.m_value.object->emplace(std::move(key), nullptr);
return set_parent(result.first->second);
}
@@ -2131,8 +2143,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// const operator[] only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- auto it = m_value.object->find(key);
- JSON_ASSERT(it != m_value.object->end());
+ auto it = m_data.m_value.object->find(key);
+ JSON_ASSERT(it != m_data.m_value.object->end());
return it->second;
}
@@ -2162,15 +2174,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// implicitly convert null value to an empty object
if (is_null())
{
- m_type = value_t::object;
- m_value.object = create<object_t>();
+ m_data.m_type = value_t::object;
+ m_data.m_value.object = create<object_t>();
assert_invariant();
}
// operator[] only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- auto result = m_value.object->emplace(std::forward<KeyType>(key), nullptr);
+ auto result = m_data.m_value.object->emplace(std::forward<KeyType>(key), nullptr);
return set_parent(result.first->second);
}
@@ -2186,8 +2198,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// const operator[] only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- auto it = m_value.object->find(std::forward<KeyType>(key));
- JSON_ASSERT(it != m_value.object->end());
+ auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+ JSON_ASSERT(it != m_data.m_value.object->end());
return it->second;
}
@@ -2424,7 +2436,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
IteratorType result = end();
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::boolean:
case value_t::number_float:
@@ -2441,32 +2453,32 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_string())
{
AllocatorType<string_t> alloc;
- std::allocator_traits<decltype(alloc)>::destroy(alloc, m_value.string);
- std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_value.string, 1);
- m_value.string = nullptr;
+ std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
+ std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
+ m_data.m_value.string = nullptr;
}
else if (is_binary())
{
AllocatorType<binary_t> alloc;
- std::allocator_traits<decltype(alloc)>::destroy(alloc, m_value.binary);
- std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_value.binary, 1);
- m_value.binary = nullptr;
+ std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
+ std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
+ m_data.m_value.binary = nullptr;
}
- m_type = value_t::null;
+ m_data.m_type = value_t::null;
assert_invariant();
break;
}
case value_t::object:
{
- result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator);
+ result.m_it.object_iterator = m_data.m_value.object->erase(pos.m_it.object_iterator);
break;
}
case value_t::array:
{
- result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator);
+ result.m_it.array_iterator = m_data.m_value.array->erase(pos.m_it.array_iterator);
break;
}
@@ -2494,7 +2506,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
IteratorType result = end();
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::boolean:
case value_t::number_float:
@@ -2512,33 +2524,33 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_string())
{
AllocatorType<string_t> alloc;
- std::allocator_traits<decltype(alloc)>::destroy(alloc, m_value.string);
- std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_value.string, 1);
- m_value.string = nullptr;
+ std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
+ std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
+ m_data.m_value.string = nullptr;
}
else if (is_binary())
{
AllocatorType<binary_t> alloc;
- std::allocator_traits<decltype(alloc)>::destroy(alloc, m_value.binary);
- std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_value.binary, 1);
- m_value.binary = nullptr;
+ std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
+ std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
+ m_data.m_value.binary = nullptr;
}
- m_type = value_t::null;
+ m_data.m_type = value_t::null;
assert_invariant();
break;
}
case value_t::object:
{
- result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator,
+ result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,
last.m_it.object_iterator);
break;
}
case value_t::array:
{
- result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator,
+ result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,
last.m_it.array_iterator);
break;
}
@@ -2563,7 +2575,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
}
- return m_value.object->erase(std::forward<KeyType>(key));
+ return m_data.m_value.object->erase(std::forward<KeyType>(key));
}
template < typename KeyType, detail::enable_if_t <
@@ -2576,10 +2588,10 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
}
- const auto it = m_value.object->find(std::forward<KeyType>(key));
- if (it != m_value.object->end())
+ const auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+ if (it != m_data.m_value.object->end())
{
- m_value.object->erase(it);
+ m_data.m_value.object->erase(it);
return 1;
}
return 0;
@@ -2617,7 +2629,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
}
- m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
+ m_data.m_value.array->erase(m_data.m_value.array->begin() + static_cast<difference_type>(idx));
}
else
{
@@ -2627,7 +2639,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
////////////
// lookup //
////////////
@@ -2643,7 +2654,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_object())
{
- result.m_it.object_iterator = m_value.object->find(key);
+ result.m_it.object_iterator = m_data.m_value.object->find(key);
}
return result;
@@ -2657,7 +2668,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_object())
{
- result.m_it.object_iterator = m_value.object->find(key);
+ result.m_it.object_iterator = m_data.m_value.object->find(key);
}
return result;
@@ -2673,7 +2684,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_object())
{
- result.m_it.object_iterator = m_value.object->find(std::forward<KeyType>(key));
+ result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
}
return result;
@@ -2689,7 +2700,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_object())
{
- result.m_it.object_iterator = m_value.object->find(std::forward<KeyType>(key));
+ result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
}
return result;
@@ -2700,7 +2711,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
size_type count(const typename object_t::key_type& key) const
{
// return 0 for all nonobject types
- return is_object() ? m_value.object->count(key) : 0;
+ return is_object() ? m_data.m_value.object->count(key) : 0;
}
/// @brief returns the number of occurrences of a key in a JSON object
@@ -2710,14 +2721,14 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
size_type count(KeyType && key) const
{
// return 0 for all nonobject types
- return is_object() ? m_value.object->count(std::forward<KeyType>(key)) : 0;
+ return is_object() ? m_data.m_value.object->count(std::forward<KeyType>(key)) : 0;
}
/// @brief check the existence of an element in a JSON object
/// @sa https://json.nlohmann.me/api/basic_json/contains/
bool contains(const typename object_t::key_type& key) const
{
- return is_object() && m_value.object->find(key) != m_value.object->end();
+ return is_object() && m_data.m_value.object->find(key) != m_data.m_value.object->end();
}
/// @brief check the existence of an element in a JSON object
@@ -2726,7 +2737,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
bool contains(KeyType && key) const
{
- return is_object() && m_value.object->find(std::forward<KeyType>(key)) != m_value.object->end();
+ return is_object() && m_data.m_value.object->find(std::forward<KeyType>(key)) != m_data.m_value.object->end();
}
/// @brief check the existence of an element in a JSON object given a JSON pointer
@@ -2745,7 +2756,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
///////////////
// iterators //
///////////////
@@ -2884,7 +2894,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
//////////////
// capacity //
//////////////
@@ -2896,7 +2905,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/empty/
bool empty() const noexcept
{
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::null:
{
@@ -2907,13 +2916,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
case value_t::array:
{
// delegate call to array_t::empty()
- return m_value.array->empty();
+ return m_data.m_value.array->empty();
}
case value_t::object:
{
// delegate call to object_t::empty()
- return m_value.object->empty();
+ return m_data.m_value.object->empty();
}
case value_t::string:
@@ -2935,7 +2944,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/size/
size_type size() const noexcept
{
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::null:
{
@@ -2946,13 +2955,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
case value_t::array:
{
// delegate call to array_t::size()
- return m_value.array->size();
+ return m_data.m_value.array->size();
}
case value_t::object:
{
// delegate call to object_t::size()
- return m_value.object->size();
+ return m_data.m_value.object->size();
}
case value_t::string:
@@ -2974,18 +2983,18 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/max_size/
size_type max_size() const noexcept
{
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::array:
{
// delegate call to array_t::max_size()
- return m_value.array->max_size();
+ return m_data.m_value.array->max_size();
}
case value_t::object:
{
// delegate call to object_t::max_size()
- return m_value.object->max_size();
+ return m_data.m_value.object->max_size();
}
case value_t::null:
@@ -3006,7 +3015,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @}
-
///////////////
// modifiers //
///////////////
@@ -3018,53 +3026,53 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/clear/
void clear() noexcept
{
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::number_integer:
{
- m_value.number_integer = 0;
+ m_data.m_value.number_integer = 0;
break;
}
case value_t::number_unsigned:
{
- m_value.number_unsigned = 0;
+ m_data.m_value.number_unsigned = 0;
break;
}
case value_t::number_float:
{
- m_value.number_float = 0.0;
+ m_data.m_value.number_float = 0.0;
break;
}
case value_t::boolean:
{
- m_value.boolean = false;
+ m_data.m_value.boolean = false;
break;
}
case value_t::string:
{
- m_value.string->clear();
+ m_data.m_value.string->clear();
break;
}
case value_t::binary:
{
- m_value.binary->clear();
+ m_data.m_value.binary->clear();
break;
}
case value_t::array:
{
- m_value.array->clear();
+ m_data.m_value.array->clear();
break;
}
case value_t::object:
{
- m_value.object->clear();
+ m_data.m_value.object->clear();
break;
}
@@ -3088,15 +3096,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// transform null object into an array
if (is_null())
{
- m_type = value_t::array;
- m_value = value_t::array;
+ m_data.m_type = value_t::array;
+ m_data.m_value = value_t::array;
assert_invariant();
}
// add element to array (move semantics)
- const auto old_capacity = m_value.array->capacity();
- m_value.array->push_back(std::move(val));
- set_parent(m_value.array->back(), old_capacity);
+ const auto old_capacity = m_data.m_value.array->capacity();
+ m_data.m_value.array->push_back(std::move(val));
+ set_parent(m_data.m_value.array->back(), old_capacity);
// if val is moved from, basic_json move constructor marks it null, so we do not call the destructor
}
@@ -3121,15 +3129,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// transform null object into an array
if (is_null())
{
- m_type = value_t::array;
- m_value = value_t::array;
+ m_data.m_type = value_t::array;
+ m_data.m_value = value_t::array;
assert_invariant();
}
// add element to array
- const auto old_capacity = m_value.array->capacity();
- m_value.array->push_back(val);
- set_parent(m_value.array->back(), old_capacity);
+ const auto old_capacity = m_data.m_value.array->capacity();
+ m_data.m_value.array->push_back(val);
+ set_parent(m_data.m_value.array->back(), old_capacity);
}
/// @brief add an object to an array
@@ -3153,13 +3161,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// transform null object into an object
if (is_null())
{
- m_type = value_t::object;
- m_value = value_t::object;
+ m_data.m_type = value_t::object;
+ m_data.m_value = value_t::object;
assert_invariant();
}
// add element to object
- auto res = m_value.object->insert(val);
+ auto res = m_data.m_value.object->insert(val);
set_parent(res.first->second);
}
@@ -3209,15 +3217,15 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// transform null object into an array
if (is_null())
{
- m_type = value_t::array;
- m_value = value_t::array;
+ m_data.m_type = value_t::array;
+ m_data.m_value = value_t::array;
assert_invariant();
}
// add element to array (perfect forwarding)
- const auto old_capacity = m_value.array->capacity();
- m_value.array->emplace_back(std::forward<Args>(args)...);
- return set_parent(m_value.array->back(), old_capacity);
+ const auto old_capacity = m_data.m_value.array->capacity();
+ m_data.m_value.array->emplace_back(std::forward<Args>(args)...);
+ return set_parent(m_data.m_value.array->back(), old_capacity);
}
/// @brief add an object to an object if key does not exist
@@ -3234,13 +3242,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// transform null object into an object
if (is_null())
{
- m_type = value_t::object;
- m_value = value_t::object;
+ m_data.m_type = value_t::object;
+ m_data.m_value = value_t::object;
assert_invariant();
}
// add element to array (perfect forwarding)
- auto res = m_value.object->emplace(std::forward<Args>(args)...);
+ auto res = m_data.m_value.object->emplace(std::forward<Args>(args)...);
set_parent(res.first->second);
// create result iterator and set iterator to the result of emplace
@@ -3258,14 +3266,14 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
iterator insert_iterator(const_iterator pos, Args&& ... args)
{
iterator result(this);
- JSON_ASSERT(m_value.array != nullptr);
+ JSON_ASSERT(m_data.m_value.array != nullptr);
- auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator);
- m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...);
- result.m_it.array_iterator = m_value.array->begin() + insert_pos;
+ auto insert_pos = std::distance(m_data.m_value.array->begin(), pos.m_it.array_iterator);
+ m_data.m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...);
+ result.m_it.array_iterator = m_data.m_value.array->begin() + insert_pos;
// This could have been written as:
- // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val);
+ // result.m_it.array_iterator = m_data.m_value.array->insert(pos.m_it.array_iterator, cnt, val);
// but the return value of insert is missing in GCC 4.8, so it is written this way instead.
set_parents();
@@ -3392,7 +3400,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", this));
}
- m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator);
+ m_data.m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator);
}
/// @brief updates a JSON object from another object, overwriting existing keys
@@ -3409,8 +3417,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// implicitly convert null value to an empty object
if (is_null())
{
- m_type = value_t::object;
- m_value.object = create<object_t>();
+ m_data.m_type = value_t::object;
+ m_data.m_value.object = create<object_t>();
assert_invariant();
}
@@ -3435,16 +3443,16 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
if (merge_objects && it.value().is_object())
{
- auto it2 = m_value.object->find(it.key());
- if (it2 != m_value.object->end())
+ auto it2 = m_data.m_value.object->find(it.key());
+ if (it2 != m_data.m_value.object->end())
{
it2->second.update(it.value(), true);
continue;
}
}
- m_value.object->operator[](it.key()) = it.value();
+ m_data.m_value.object->operator[](it.key()) = it.value();
#if JSON_DIAGNOSTICS
- m_value.object->operator[](it.key()).m_parent = this;
+ m_data.m_value.object->operator[](it.key()).m_parent = this;
#endif
}
}
@@ -3454,12 +3462,12 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
void swap(reference other) noexcept (
std::is_nothrow_move_constructible<value_t>::value&&
std::is_nothrow_move_assignable<value_t>::value&&
- std::is_nothrow_move_constructible<json_value>::value&&
+ std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value
)
{
- std::swap(m_type, other.m_type);
- std::swap(m_value, other.m_value);
+ std::swap(m_data.m_type, other.m_data.m_type);
+ std::swap(m_data.m_value, other.m_data.m_value);
set_parents();
other.set_parents();
@@ -3471,7 +3479,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
friend void swap(reference left, reference right) noexcept (
std::is_nothrow_move_constructible<value_t>::value&&
std::is_nothrow_move_assignable<value_t>::value&&
- std::is_nothrow_move_constructible<json_value>::value&&
+ std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value
)
{
@@ -3480,13 +3488,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
- void swap(array_t& other) // NOLINT(bugprone-exception-escape)
+ void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
{
// swap only works for arrays
if (JSON_HEDLEY_LIKELY(is_array()))
{
using std::swap;
- swap(*(m_value.array), other);
+ swap(*(m_data.m_value.array), other);
}
else
{
@@ -3496,13 +3504,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
- void swap(object_t& other) // NOLINT(bugprone-exception-escape)
+ void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
{
// swap only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
using std::swap;
- swap(*(m_value.object), other);
+ swap(*(m_data.m_value.object), other);
}
else
{
@@ -3512,13 +3520,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
- void swap(string_t& other) // NOLINT(bugprone-exception-escape)
+ void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
{
// swap only works for strings
if (JSON_HEDLEY_LIKELY(is_string()))
{
using std::swap;
- swap(*(m_value.string), other);
+ swap(*(m_data.m_value.string), other);
}
else
{
@@ -3528,13 +3536,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
- void swap(binary_t& other) // NOLINT(bugprone-exception-escape)
+ void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
{
// swap only works for strings
if (JSON_HEDLEY_LIKELY(is_binary()))
{
using std::swap;
- swap(*(m_value.binary), other);
+ swap(*(m_data.m_value.binary), other);
}
else
{
@@ -3550,7 +3558,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (JSON_HEDLEY_LIKELY(is_binary()))
{
using std::swap;
- swap(*(m_value.binary), other);
+ swap(*(m_data.m_value.binary), other);
}
else
{
@@ -3578,31 +3586,31 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
switch (lhs_type) \
{ \
case value_t::array: \
- return (*lhs.m_value.array) op (*rhs.m_value.array); \
+ return (*lhs.m_data.m_value.array) op (*rhs.m_data.m_value.array); \
\
case value_t::object: \
- return (*lhs.m_value.object) op (*rhs.m_value.object); \
+ return (*lhs.m_data.m_value.object) op (*rhs.m_data.m_value.object); \
\
case value_t::null: \
return (null_result); \
\
case value_t::string: \
- return (*lhs.m_value.string) op (*rhs.m_value.string); \
+ return (*lhs.m_data.m_value.string) op (*rhs.m_data.m_value.string); \
\
case value_t::boolean: \
- return (lhs.m_value.boolean) op (rhs.m_value.boolean); \
+ return (lhs.m_data.m_value.boolean) op (rhs.m_data.m_value.boolean); \
\
case value_t::number_integer: \
- return (lhs.m_value.number_integer) op (rhs.m_value.number_integer); \
+ return (lhs.m_data.m_value.number_integer) op (rhs.m_data.m_value.number_integer); \
\
case value_t::number_unsigned: \
- return (lhs.m_value.number_unsigned) op (rhs.m_value.number_unsigned); \
+ return (lhs.m_data.m_value.number_unsigned) op (rhs.m_data.m_value.number_unsigned); \
\
case value_t::number_float: \
- return (lhs.m_value.number_float) op (rhs.m_value.number_float); \
+ return (lhs.m_data.m_value.number_float) op (rhs.m_data.m_value.number_float); \
\
case value_t::binary: \
- return (*lhs.m_value.binary) op (*rhs.m_value.binary); \
+ return (*lhs.m_data.m_value.binary) op (*rhs.m_data.m_value.binary); \
\
case value_t::discarded: \
default: \
@@ -3611,27 +3619,27 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
} \
else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
{ \
- return static_cast<number_float_t>(lhs.m_value.number_integer) op rhs.m_value.number_float; \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
} \
else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
{ \
- return lhs.m_value.number_float op static_cast<number_float_t>(rhs.m_value.number_integer); \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
} \
else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
{ \
- return static_cast<number_float_t>(lhs.m_value.number_unsigned) op rhs.m_value.number_float; \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
} \
else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
{ \
- return lhs.m_value.number_float op static_cast<number_float_t>(rhs.m_value.number_unsigned); \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
} \
else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
{ \
- return static_cast<number_integer_t>(lhs.m_value.number_unsigned) op rhs.m_value.number_integer; \
+ return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
} \
else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
{ \
- return lhs.m_value.number_integer op static_cast<number_integer_t>(rhs.m_value.number_unsigned); \
+ return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
} \
else if(compares_unordered(lhs, rhs))\
{\
@@ -3648,8 +3656,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// an operation is computed as an odd number of inverses of others
static bool compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept
{
- if ((lhs.is_number_float() && std::isnan(lhs.m_value.number_float) && rhs.is_number())
- || (rhs.is_number_float() && std::isnan(rhs.m_value.number_float) && lhs.is_number()))
+ if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number())
+ || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
{
return true;
}
@@ -3993,7 +4001,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
#endif // JSON_NO_IO
/// @}
-
/////////////////////
// deserialization //
/////////////////////
@@ -4150,7 +4157,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_HEDLEY_RETURNS_NON_NULL
const char* type_name() const noexcept
{
- switch (m_type)
+ switch (m_data.m_type)
{
case value_t::null:
return "null";
@@ -4174,17 +4181,43 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
}
-
JSON_PRIVATE_UNLESS_TESTED:
//////////////////////
// member variables //
//////////////////////
- /// the type of the current element
- value_t m_type = value_t::null;
+ struct data
+ {
+ /// the type of the current element
+ value_t m_type = value_t::null;
+
+ /// the value of the current element
+ json_value m_value = {};
+
+ data(const value_t v)
+ : m_type(v), m_value(v)
+ {
+ }
- /// the value of the current element
- json_value m_value = {};
+ data(size_type cnt, const basic_json& val)
+ : m_type(value_t::array)
+ {
+ m_value.array = create<array_t>(cnt, val);
+ }
+
+ data() noexcept = default;
+ data(data&&) noexcept = default;
+ data(const data&) noexcept = delete;
+ data& operator=(data&&) noexcept = delete;
+ data& operator=(const data&) noexcept = delete;
+
+ ~data() noexcept
+ {
+ m_value.destroy(m_type);
+ }
+ };
+
+ data m_data = {};
#if JSON_DIAGNOSTICS
/// a pointer to a parent value (for debugging purposes)
@@ -4365,7 +4398,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);
}
-
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))
static basic_json from_cbor(detail::span_input_adapter&& i,
@@ -4489,7 +4521,6 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
return res ? result : basic_json(value_t::discarded);
}
-
/// @brief create a JSON value from an input in BJData format
/// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
template<typename InputType>
@@ -4712,7 +4743,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
// make sure the top element of the pointer exists
- json_pointer top_pointer = ptr.top();
+ json_pointer const top_pointer = ptr.top();
if (top_pointer != ptr)
{
result.at(top_pointer);
@@ -4724,7 +4755,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// parent must exist when performing patch add per RFC6902 specs
basic_json& parent = result.at(ptr);
- switch (parent.m_type)
+ switch (parent.m_data.m_type)
{
case value_t::null:
case value_t::object:
@@ -4770,7 +4801,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
};
// wrapper for "remove" operation; remove value at ptr
- const auto operation_remove = [this, &result](json_pointer & ptr)
+ const auto operation_remove = [this, & result](json_pointer & ptr)
{
// get reference to parent of JSON pointer ptr
const auto last_path = ptr.back();
@@ -4813,13 +4844,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
bool string_type) -> basic_json &
{
// find value
- auto it = val.m_value.object->find(member);
+ auto it = val.m_data.m_value.object->find(member);
// context-sensitive error message
const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\'');
// check if desired value is present
- if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end()))
+ if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))
{
// NOLINTNEXTLINE(performance-inefficient-string-concatenation)
JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val));
@@ -4874,7 +4905,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
json_pointer from_ptr(from_path);
// the "from" location must exist - use at()
- basic_json v = result.at(from_ptr);
+ basic_json const v = result.at(from_ptr);
// The move operation is functionally identical to a
// "remove" operation on the "from" location, followed
@@ -4891,7 +4922,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
const json_pointer from_ptr(from_path);
// the "from" location must exist - use at()
- basic_json v = result.at(from_ptr);
+ basic_json const v = result.at(from_ptr);
// The copy is functionally identical to an "add"
// operation at the target location using the value
@@ -5133,7 +5164,11 @@ inline namespace json_literals
/// @brief user-defined string literal for JSON values
/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/
JSON_HEDLEY_NON_NULL(1)
-inline nlohmann::json operator "" _json(const char* s, std::size_t n)
+#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+ inline nlohmann::json operator ""_json(const char* s, std::size_t n)
+#else
+ inline nlohmann::json operator "" _json(const char* s, std::size_t n)
+#endif
{
return nlohmann::json::parse(s, s + n);
}
@@ -5141,7 +5176,11 @@ inline nlohmann::json operator "" _json(const char* s, std::size_t n)
/// @brief user-defined string literal for JSON pointer
/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/
JSON_HEDLEY_NON_NULL(1)
-inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
+#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+ inline nlohmann::json::json_pointer operator ""_json_pointer(const char* s, std::size_t n)
+#else
+ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
+#endif
{
return nlohmann::json::json_pointer(std::string(s, n));
}
@@ -5160,7 +5199,7 @@ namespace std // NOLINT(cert-dcl58-cpp)
/// @brief hash value for JSON objects
/// @sa https://json.nlohmann.me/api/basic_json/std_hash/
NLOHMANN_BASIC_JSON_TPL_DECLARATION
-struct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL>
+struct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL> // NOLINT(cert-dcl58-cpp)
{
std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const
{
@@ -5193,8 +5232,8 @@ struct less< ::nlohmann::detail::value_t> // do not remove the space after '<',
/// @brief exchanges the values of two JSON objects
/// @sa https://json.nlohmann.me/api/basic_json/std_swap/
NLOHMANN_BASIC_JSON_TPL_DECLARATION
-inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name)
- is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&& // NOLINT(misc-redundant-expression)
+inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
+ is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&& // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)
{
j1.swap(j2);
@@ -5205,8 +5244,13 @@ inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC
} // namespace std
#if JSON_USE_GLOBAL_UDLS
- using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
- using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+ #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+ using nlohmann::literals::json_literals::operator ""_json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+ using nlohmann::literals::json_literals::operator ""_json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+ #else
+ using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+ using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+ #endif
#endif
#include <nlohmann/detail/macro_unscope.hpp>
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/json_fwd.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/json_fwd.hpp
index 67172b14f5..32bde590f8 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/json_fwd.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/json_fwd.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
@@ -46,7 +46,8 @@ template<template<typename U, typename V, typename... Args> class ObjectType =
template<typename U> class AllocatorType = std::allocator,
template<typename T, typename SFINAE = void> class JSONSerializer =
adl_serializer,
- class BinaryType = std::vector<std::uint8_t>>
+ class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
+ class CustomBaseClass = void>
class basic_json;
/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/ordered_map.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/ordered_map.hpp
index 55c630d90d..39e4a50a14 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/ordered_map.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/ordered_map.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
@@ -118,7 +118,7 @@ template <class Key, class T, class IgnoredLess = std::less<Key>,
template<class KeyType, detail::enable_if_t<
detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
- T & at(KeyType && key)
+ T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
{
for (auto it = this->begin(); it != this->end(); ++it)
{
@@ -146,7 +146,7 @@ template <class Key, class T, class IgnoredLess = std::less<Key>,
template<class KeyType, detail::enable_if_t<
detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
- const T & at(KeyType && key) const
+ const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)
{
for (auto it = this->begin(); it != this->end(); ++it)
{
@@ -180,7 +180,7 @@ template <class Key, class T, class IgnoredLess = std::less<Key>,
template<class KeyType, detail::enable_if_t<
detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
- size_type erase(KeyType && key)
+ size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
{
for (auto it = this->begin(); it != this->end(); ++it)
{
@@ -271,7 +271,7 @@ template <class Key, class T, class IgnoredLess = std::less<Key>,
template<class KeyType, detail::enable_if_t<
detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
- size_type count(KeyType && key) const
+ size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)
{
for (auto it = this->begin(); it != this->end(); ++it)
{
@@ -297,7 +297,7 @@ template <class Key, class T, class IgnoredLess = std::less<Key>,
template<class KeyType, detail::enable_if_t<
detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
- iterator find(KeyType && key)
+ iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
{
for (auto it = this->begin(); it != this->end(); ++it)
{
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley.hpp
index f1377f1e45..a1dc64f600 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley.hpp
@@ -2,10 +2,10 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson <evan@nemerson.com>
// SPDX-License-Identifier: MIT
diff --git a/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp b/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp
index d0c58ff843..c0aee2bb30 100644
--- a/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp
+++ b/contrib/restricted/nlohmann_json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp
@@ -1,9 +1,9 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
-// | | |__ | | | | | | version 3.11.2
+// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
-// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
+// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#pragma once
diff --git a/contrib/restricted/nlohmann_json/ya.make b/contrib/restricted/nlohmann_json/ya.make
index 8e1b4e67cf..a5a0f12931 100644
--- a/contrib/restricted/nlohmann_json/ya.make
+++ b/contrib/restricted/nlohmann_json/ya.make
@@ -1,4 +1,4 @@
-# Generated by devtools/yamaker from nixpkgs 22.05.
+# Generated by devtools/yamaker from nixpkgs 22.11.
LIBRARY()
@@ -10,9 +10,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(3.11.2)
+VERSION(3.11.3)
-ORIGINAL_SOURCE(https://github.com/nlohmann/json/archive/v3.11.2.tar.gz)
+ORIGINAL_SOURCE(https://github.com/nlohmann/json/archive/v3.11.3.tar.gz)
ADDINCL(
ONE_LEVEL