aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/nlohmann_json/include
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 /contrib/restricted/nlohmann_json/include
parente938f3027e06f8f4f3f2f0d79d0262d91caac192 (diff)
downloadydb-db7f91de8c86629d479db1daf8dddf9704186478.tar.gz
Update contrib/restricted/nlohmann_json to 3.11.3
Diffstat (limited to 'contrib/restricted/nlohmann_json/include')
-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
45 files changed, 909 insertions, 744 deletions
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