mqt-core 3.2.1__cp313-cp313-win_arm64.whl → 3.3.1__cp313-cp313-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mqt-core might be problematic. Click here for more details.
- mqt/core/__init__.py +3 -3
- mqt/core/_commands.py +2 -2
- mqt/core/_version.py +16 -3
- mqt/core/bin/mqt-core-algorithms.dll +0 -0
- mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
- mqt/core/bin/mqt-core-dd.dll +0 -0
- mqt/core/bin/mqt-core-ds.dll +0 -0
- mqt/core/bin/mqt-core-fomac.dll +0 -0
- mqt/core/bin/mqt-core-ir.dll +0 -0
- mqt/core/bin/mqt-core-na-fomac.dll +0 -0
- mqt/core/bin/mqt-core-na.dll +0 -0
- mqt/core/bin/mqt-core-qasm.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
- mqt/core/bin/mqt-core-zx.dll +0 -0
- mqt/core/dd.cp313-win_arm64.pyd +0 -0
- mqt/core/dd.pyi +5 -7
- mqt/core/fomac.cp313-win_arm64.pyd +0 -0
- mqt/core/fomac.pyi +125 -0
- mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +13 -0
- mqt/core/include/mqt-core/dd/CachedEdge.hpp +7 -0
- mqt/core/include/mqt-core/dd/Operations.hpp +12 -14
- mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
- mqt/core/include/mqt-core/ir/QuantumComputation.hpp +29 -28
- mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +2 -0
- mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
- mqt/core/include/mqt-core/ir/operations/OpType.hpp +3 -0
- mqt/core/include/mqt-core/ir/operations/OpType.inc +2 -2
- mqt/core/include/mqt-core/ir/operations/Operation.hpp +3 -1
- mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +2 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
- mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
- mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
- mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
- mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
- mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
- mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
- mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
- mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
- mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
- mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
- mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
- mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
- mqt/core/include/nlohmann/detail/hash.hpp +129 -0
- mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
- mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
- mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
- mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
- mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
- mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
- mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
- mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
- mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
- mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
- mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
- mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
- mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
- mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
- mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
- mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
- mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
- mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
- mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
- mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
- mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
- mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
- mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
- mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
- mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
- mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
- mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
- mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
- mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
- mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
- mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
- mqt/core/include/nlohmann/json.hpp +5306 -0
- mqt/core/include/nlohmann/json_fwd.hpp +75 -0
- mqt/core/include/nlohmann/ordered_map.hpp +359 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
- mqt/core/include/qdmi/qdmi/client.h +990 -0
- mqt/core/include/qdmi/qdmi/constants.h +1139 -0
- mqt/core/include/qdmi/qdmi/device.h +602 -0
- mqt/core/include/qdmi/qdmi/types.h +78 -0
- mqt/core/include/spdlog/async.h +99 -0
- mqt/core/include/spdlog/async_logger-inl.h +84 -0
- mqt/core/include/spdlog/async_logger.h +74 -0
- mqt/core/include/spdlog/cfg/argv.h +40 -0
- mqt/core/include/spdlog/cfg/env.h +36 -0
- mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
- mqt/core/include/spdlog/cfg/helpers.h +29 -0
- mqt/core/include/spdlog/common-inl.h +68 -0
- mqt/core/include/spdlog/common.h +406 -0
- mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
- mqt/core/include/spdlog/details/backtracer.h +45 -0
- mqt/core/include/spdlog/details/circular_q.h +115 -0
- mqt/core/include/spdlog/details/console_globals.h +28 -0
- mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
- mqt/core/include/spdlog/details/file_helper.h +61 -0
- mqt/core/include/spdlog/details/fmt_helper.h +141 -0
- mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
- mqt/core/include/spdlog/details/log_msg.h +40 -0
- mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
- mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
- mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
- mqt/core/include/spdlog/details/null_mutex.h +35 -0
- mqt/core/include/spdlog/details/os-inl.h +606 -0
- mqt/core/include/spdlog/details/os.h +127 -0
- mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
- mqt/core/include/spdlog/details/periodic_worker.h +58 -0
- mqt/core/include/spdlog/details/registry-inl.h +270 -0
- mqt/core/include/spdlog/details/registry.h +131 -0
- mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
- mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
- mqt/core/include/spdlog/details/tcp_client.h +127 -0
- mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
- mqt/core/include/spdlog/details/thread_pool.h +117 -0
- mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
- mqt/core/include/spdlog/details/udp_client.h +81 -0
- mqt/core/include/spdlog/details/windows_include.h +11 -0
- mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
- mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
- mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
- mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
- mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
- mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
- mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
- mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
- mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
- mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
- mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
- mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
- mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
- mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
- mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
- mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
- mqt/core/include/spdlog/fmt/chrono.h +23 -0
- mqt/core/include/spdlog/fmt/compile.h +23 -0
- mqt/core/include/spdlog/fmt/fmt.h +30 -0
- mqt/core/include/spdlog/fmt/ostr.h +23 -0
- mqt/core/include/spdlog/fmt/ranges.h +23 -0
- mqt/core/include/spdlog/fmt/std.h +24 -0
- mqt/core/include/spdlog/fmt/xchar.h +23 -0
- mqt/core/include/spdlog/formatter.h +17 -0
- mqt/core/include/spdlog/fwd.h +18 -0
- mqt/core/include/spdlog/logger-inl.h +198 -0
- mqt/core/include/spdlog/logger.h +379 -0
- mqt/core/include/spdlog/mdc.h +52 -0
- mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
- mqt/core/include/spdlog/pattern_formatter.h +118 -0
- mqt/core/include/spdlog/sinks/android_sink.h +137 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
- mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
- mqt/core/include/spdlog/sinks/base_sink.h +51 -0
- mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
- mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
- mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
- mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
- mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
- mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
- mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
- mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
- mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
- mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
- mqt/core/include/spdlog/sinks/null_sink.h +41 -0
- mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
- mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
- mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
- mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
- mqt/core/include/spdlog/sinks/sink.h +34 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
- mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
- mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
- mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
- mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
- mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
- mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
- mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
- mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
- mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
- mqt/core/include/spdlog/spdlog-inl.h +96 -0
- mqt/core/include/spdlog/spdlog.h +357 -0
- mqt/core/include/spdlog/stopwatch.h +66 -0
- mqt/core/include/spdlog/tweakme.h +148 -0
- mqt/core/include/spdlog/version.h +11 -0
- mqt/core/ir/__init__.pyi +83 -45
- mqt/core/ir/operations.pyi +40 -27
- mqt/core/ir.cp313-win_arm64.pyd +0 -0
- mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
- mqt/core/lib/mqt-core-dd.lib +0 -0
- mqt/core/lib/mqt-core-fomac.lib +0 -0
- mqt/core/lib/mqt-core-ir.lib +0 -0
- mqt/core/lib/mqt-core-na-fomac.lib +0 -0
- mqt/core/lib/mqt-core-qasm.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
- mqt/core/lib/pkgconfig/spdlog.pc +13 -0
- mqt/core/lib/spdlog.lib +0 -0
- mqt/core/na/__init__.py +12 -0
- mqt/core/na/fomac.cp313-win_arm64.pyd +0 -0
- mqt/core/na/fomac.pyi +117 -0
- mqt/core/nlohmann_json.natvis +278 -0
- mqt/core/plugins/qiskit/mqt_to_qiskit.py +75 -11
- mqt/core/plugins/qiskit/qiskit_to_mqt.py +108 -5
- mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +3 -0
- mqt/core/share/cmake/mqt-core/Cache.cmake +17 -16
- mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +6 -0
- mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +1 -1
- mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +3 -3
- mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +3 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +51 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +124 -3
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
- mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
- mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
- mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
- mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
- mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
- mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
- mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
- mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
- mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
- mqt_core-3.3.1.dist-info/DELVEWHEEL +2 -0
- {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/METADATA +74 -33
- {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/RECORD +240 -46
- {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/WHEEL +1 -1
- mqt/core/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +0 -156
- mqt_core-3.2.1.dist-info/DELVEWHEEL +0 -2
- {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/entry_points.txt +0 -0
- {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
// __ _____ _____ _____
|
|
2
|
+
// __| | __| | | | JSON for Modern C++
|
|
3
|
+
// | | |__ | | | | | | version 3.12.0
|
|
4
|
+
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
5
|
+
//
|
|
6
|
+
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <nlohmann/detail/macro_scope.hpp> // JSON_HAS_CPP_17
|
|
12
|
+
#ifdef JSON_HAS_CPP_17
|
|
13
|
+
#include <optional> // optional
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
#include <algorithm> // copy
|
|
17
|
+
#include <iterator> // begin, end
|
|
18
|
+
#include <string> // string
|
|
19
|
+
#include <tuple> // tuple, get
|
|
20
|
+
#include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type
|
|
21
|
+
#include <utility> // move, forward, declval, pair
|
|
22
|
+
#include <valarray> // valarray
|
|
23
|
+
#include <vector> // vector
|
|
24
|
+
|
|
25
|
+
#include <nlohmann/detail/iterators/iteration_proxy.hpp>
|
|
26
|
+
#include <nlohmann/detail/meta/cpp_future.hpp>
|
|
27
|
+
#include <nlohmann/detail/meta/std_fs.hpp>
|
|
28
|
+
#include <nlohmann/detail/meta/type_traits.hpp>
|
|
29
|
+
#include <nlohmann/detail/value_t.hpp>
|
|
30
|
+
|
|
31
|
+
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
32
|
+
namespace detail
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
//////////////////
|
|
36
|
+
// constructors //
|
|
37
|
+
//////////////////
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Note all external_constructor<>::construct functions need to call
|
|
41
|
+
* j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an
|
|
42
|
+
* allocated value (e.g., a string). See bug issue
|
|
43
|
+
* https://github.com/nlohmann/json/issues/2865 for more information.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
template<value_t> struct external_constructor;
|
|
47
|
+
|
|
48
|
+
template<>
|
|
49
|
+
struct external_constructor<value_t::boolean>
|
|
50
|
+
{
|
|
51
|
+
template<typename BasicJsonType>
|
|
52
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept
|
|
53
|
+
{
|
|
54
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
55
|
+
j.m_data.m_type = value_t::boolean;
|
|
56
|
+
j.m_data.m_value = b;
|
|
57
|
+
j.assert_invariant();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
template<>
|
|
62
|
+
struct external_constructor<value_t::string>
|
|
63
|
+
{
|
|
64
|
+
template<typename BasicJsonType>
|
|
65
|
+
static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s)
|
|
66
|
+
{
|
|
67
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
68
|
+
j.m_data.m_type = value_t::string;
|
|
69
|
+
j.m_data.m_value = s;
|
|
70
|
+
j.assert_invariant();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
template<typename BasicJsonType>
|
|
74
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s)
|
|
75
|
+
{
|
|
76
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
77
|
+
j.m_data.m_type = value_t::string;
|
|
78
|
+
j.m_data.m_value = std::move(s);
|
|
79
|
+
j.assert_invariant();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template < typename BasicJsonType, typename CompatibleStringType,
|
|
83
|
+
enable_if_t < !std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value,
|
|
84
|
+
int > = 0 >
|
|
85
|
+
static void construct(BasicJsonType& j, const CompatibleStringType& str)
|
|
86
|
+
{
|
|
87
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
88
|
+
j.m_data.m_type = value_t::string;
|
|
89
|
+
j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
|
|
90
|
+
j.assert_invariant();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
template<>
|
|
95
|
+
struct external_constructor<value_t::binary>
|
|
96
|
+
{
|
|
97
|
+
template<typename BasicJsonType>
|
|
98
|
+
static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b)
|
|
99
|
+
{
|
|
100
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
101
|
+
j.m_data.m_type = value_t::binary;
|
|
102
|
+
j.m_data.m_value = typename BasicJsonType::binary_t(b);
|
|
103
|
+
j.assert_invariant();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template<typename BasicJsonType>
|
|
107
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b)
|
|
108
|
+
{
|
|
109
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
110
|
+
j.m_data.m_type = value_t::binary;
|
|
111
|
+
j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b));
|
|
112
|
+
j.assert_invariant();
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
template<>
|
|
117
|
+
struct external_constructor<value_t::number_float>
|
|
118
|
+
{
|
|
119
|
+
template<typename BasicJsonType>
|
|
120
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept
|
|
121
|
+
{
|
|
122
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
123
|
+
j.m_data.m_type = value_t::number_float;
|
|
124
|
+
j.m_data.m_value = val;
|
|
125
|
+
j.assert_invariant();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
template<>
|
|
130
|
+
struct external_constructor<value_t::number_unsigned>
|
|
131
|
+
{
|
|
132
|
+
template<typename BasicJsonType>
|
|
133
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept
|
|
134
|
+
{
|
|
135
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
136
|
+
j.m_data.m_type = value_t::number_unsigned;
|
|
137
|
+
j.m_data.m_value = val;
|
|
138
|
+
j.assert_invariant();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
template<>
|
|
143
|
+
struct external_constructor<value_t::number_integer>
|
|
144
|
+
{
|
|
145
|
+
template<typename BasicJsonType>
|
|
146
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept
|
|
147
|
+
{
|
|
148
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
149
|
+
j.m_data.m_type = value_t::number_integer;
|
|
150
|
+
j.m_data.m_value = val;
|
|
151
|
+
j.assert_invariant();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
template<>
|
|
156
|
+
struct external_constructor<value_t::array>
|
|
157
|
+
{
|
|
158
|
+
template<typename BasicJsonType>
|
|
159
|
+
static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr)
|
|
160
|
+
{
|
|
161
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
162
|
+
j.m_data.m_type = value_t::array;
|
|
163
|
+
j.m_data.m_value = arr;
|
|
164
|
+
j.set_parents();
|
|
165
|
+
j.assert_invariant();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
template<typename BasicJsonType>
|
|
169
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
|
|
170
|
+
{
|
|
171
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
172
|
+
j.m_data.m_type = value_t::array;
|
|
173
|
+
j.m_data.m_value = std::move(arr);
|
|
174
|
+
j.set_parents();
|
|
175
|
+
j.assert_invariant();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
template < typename BasicJsonType, typename CompatibleArrayType,
|
|
179
|
+
enable_if_t < !std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value,
|
|
180
|
+
int > = 0 >
|
|
181
|
+
static void construct(BasicJsonType& j, const CompatibleArrayType& arr)
|
|
182
|
+
{
|
|
183
|
+
using std::begin;
|
|
184
|
+
using std::end;
|
|
185
|
+
|
|
186
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
187
|
+
j.m_data.m_type = value_t::array;
|
|
188
|
+
j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
|
|
189
|
+
j.set_parents();
|
|
190
|
+
j.assert_invariant();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
template<typename BasicJsonType>
|
|
194
|
+
static void construct(BasicJsonType& j, const std::vector<bool>& arr)
|
|
195
|
+
{
|
|
196
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
197
|
+
j.m_data.m_type = value_t::array;
|
|
198
|
+
j.m_data.m_value = value_t::array;
|
|
199
|
+
j.m_data.m_value.array->reserve(arr.size());
|
|
200
|
+
for (const bool x : arr)
|
|
201
|
+
{
|
|
202
|
+
j.m_data.m_value.array->push_back(x);
|
|
203
|
+
j.set_parent(j.m_data.m_value.array->back());
|
|
204
|
+
}
|
|
205
|
+
j.assert_invariant();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
template<typename BasicJsonType, typename T,
|
|
209
|
+
enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
|
|
210
|
+
static void construct(BasicJsonType& j, const std::valarray<T>& arr)
|
|
211
|
+
{
|
|
212
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
213
|
+
j.m_data.m_type = value_t::array;
|
|
214
|
+
j.m_data.m_value = value_t::array;
|
|
215
|
+
j.m_data.m_value.array->resize(arr.size());
|
|
216
|
+
if (arr.size() > 0)
|
|
217
|
+
{
|
|
218
|
+
std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin());
|
|
219
|
+
}
|
|
220
|
+
j.set_parents();
|
|
221
|
+
j.assert_invariant();
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
template<>
|
|
226
|
+
struct external_constructor<value_t::object>
|
|
227
|
+
{
|
|
228
|
+
template<typename BasicJsonType>
|
|
229
|
+
static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj)
|
|
230
|
+
{
|
|
231
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
232
|
+
j.m_data.m_type = value_t::object;
|
|
233
|
+
j.m_data.m_value = obj;
|
|
234
|
+
j.set_parents();
|
|
235
|
+
j.assert_invariant();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
template<typename BasicJsonType>
|
|
239
|
+
static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
|
|
240
|
+
{
|
|
241
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
242
|
+
j.m_data.m_type = value_t::object;
|
|
243
|
+
j.m_data.m_value = std::move(obj);
|
|
244
|
+
j.set_parents();
|
|
245
|
+
j.assert_invariant();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
template < typename BasicJsonType, typename CompatibleObjectType,
|
|
249
|
+
enable_if_t < !std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int > = 0 >
|
|
250
|
+
static void construct(BasicJsonType& j, const CompatibleObjectType& obj)
|
|
251
|
+
{
|
|
252
|
+
using std::begin;
|
|
253
|
+
using std::end;
|
|
254
|
+
|
|
255
|
+
j.m_data.m_value.destroy(j.m_data.m_type);
|
|
256
|
+
j.m_data.m_type = value_t::object;
|
|
257
|
+
j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
|
|
258
|
+
j.set_parents();
|
|
259
|
+
j.assert_invariant();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/////////////
|
|
264
|
+
// to_json //
|
|
265
|
+
/////////////
|
|
266
|
+
|
|
267
|
+
#ifdef JSON_HAS_CPP_17
|
|
268
|
+
template<typename BasicJsonType, typename T,
|
|
269
|
+
enable_if_t<std::is_constructible<BasicJsonType, T>::value, int> = 0>
|
|
270
|
+
void to_json(BasicJsonType& j, const std::optional<T>& opt)
|
|
271
|
+
{
|
|
272
|
+
if (opt.has_value())
|
|
273
|
+
{
|
|
274
|
+
j = *opt;
|
|
275
|
+
}
|
|
276
|
+
else
|
|
277
|
+
{
|
|
278
|
+
j = nullptr;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
#endif
|
|
282
|
+
|
|
283
|
+
template<typename BasicJsonType, typename T,
|
|
284
|
+
enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value, int> = 0>
|
|
285
|
+
inline void to_json(BasicJsonType& j, T b) noexcept
|
|
286
|
+
{
|
|
287
|
+
external_constructor<value_t::boolean>::construct(j, b);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
template < typename BasicJsonType, typename BoolRef,
|
|
291
|
+
enable_if_t <
|
|
292
|
+
((std::is_same<std::vector<bool>::reference, BoolRef>::value
|
|
293
|
+
&& !std::is_same <std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value)
|
|
294
|
+
|| (std::is_same<std::vector<bool>::const_reference, BoolRef>::value
|
|
295
|
+
&& !std::is_same <detail::uncvref_t<std::vector<bool>::const_reference>,
|
|
296
|
+
typename BasicJsonType::boolean_t >::value))
|
|
297
|
+
&& std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int > = 0 >
|
|
298
|
+
inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept
|
|
299
|
+
{
|
|
300
|
+
external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
template<typename BasicJsonType, typename CompatibleString,
|
|
304
|
+
enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
|
|
305
|
+
inline void to_json(BasicJsonType& j, const CompatibleString& s)
|
|
306
|
+
{
|
|
307
|
+
external_constructor<value_t::string>::construct(j, s);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
template<typename BasicJsonType>
|
|
311
|
+
inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
|
|
312
|
+
{
|
|
313
|
+
external_constructor<value_t::string>::construct(j, std::move(s));
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
template<typename BasicJsonType, typename FloatType,
|
|
317
|
+
enable_if_t<std::is_floating_point<FloatType>::value, int> = 0>
|
|
318
|
+
inline void to_json(BasicJsonType& j, FloatType val) noexcept
|
|
319
|
+
{
|
|
320
|
+
external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
template<typename BasicJsonType, typename CompatibleNumberUnsignedType,
|
|
324
|
+
enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
|
|
325
|
+
inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
|
|
326
|
+
{
|
|
327
|
+
external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
template<typename BasicJsonType, typename CompatibleNumberIntegerType,
|
|
331
|
+
enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
|
|
332
|
+
inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
|
|
333
|
+
{
|
|
334
|
+
external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
#if !JSON_DISABLE_ENUM_SERIALIZATION
|
|
338
|
+
template<typename BasicJsonType, typename EnumType,
|
|
339
|
+
enable_if_t<std::is_enum<EnumType>::value, int> = 0>
|
|
340
|
+
inline void to_json(BasicJsonType& j, EnumType e) noexcept
|
|
341
|
+
{
|
|
342
|
+
using underlying_type = typename std::underlying_type<EnumType>::type;
|
|
343
|
+
static constexpr value_t integral_value_t = std::is_unsigned<underlying_type>::value ? value_t::number_unsigned : value_t::number_integer;
|
|
344
|
+
external_constructor<integral_value_t>::construct(j, static_cast<underlying_type>(e));
|
|
345
|
+
}
|
|
346
|
+
#endif // JSON_DISABLE_ENUM_SERIALIZATION
|
|
347
|
+
|
|
348
|
+
template<typename BasicJsonType>
|
|
349
|
+
inline void to_json(BasicJsonType& j, const std::vector<bool>& e)
|
|
350
|
+
{
|
|
351
|
+
external_constructor<value_t::array>::construct(j, e);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
template < typename BasicJsonType, typename CompatibleArrayType,
|
|
355
|
+
enable_if_t < is_compatible_array_type<BasicJsonType,
|
|
356
|
+
CompatibleArrayType>::value&&
|
|
357
|
+
!is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&&
|
|
358
|
+
!is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value&&
|
|
359
|
+
!std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&&
|
|
360
|
+
!is_basic_json<CompatibleArrayType>::value,
|
|
361
|
+
int > = 0 >
|
|
362
|
+
inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
|
|
363
|
+
{
|
|
364
|
+
external_constructor<value_t::array>::construct(j, arr);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
template<typename BasicJsonType>
|
|
368
|
+
inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin)
|
|
369
|
+
{
|
|
370
|
+
external_constructor<value_t::binary>::construct(j, bin);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
template<typename BasicJsonType, typename T,
|
|
374
|
+
enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
|
|
375
|
+
inline void to_json(BasicJsonType& j, const std::valarray<T>& arr)
|
|
376
|
+
{
|
|
377
|
+
external_constructor<value_t::array>::construct(j, std::move(arr));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
template<typename BasicJsonType>
|
|
381
|
+
inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
|
|
382
|
+
{
|
|
383
|
+
external_constructor<value_t::array>::construct(j, std::move(arr));
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
template < typename BasicJsonType, typename CompatibleObjectType,
|
|
387
|
+
enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value, int > = 0 >
|
|
388
|
+
inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
|
|
389
|
+
{
|
|
390
|
+
external_constructor<value_t::object>::construct(j, obj);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
template<typename BasicJsonType>
|
|
394
|
+
inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
|
|
395
|
+
{
|
|
396
|
+
external_constructor<value_t::object>::construct(j, std::move(obj));
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
template <
|
|
400
|
+
typename BasicJsonType, typename T, std::size_t N,
|
|
401
|
+
enable_if_t < !std::is_constructible<typename BasicJsonType::string_t,
|
|
402
|
+
const T(&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
|
|
403
|
+
int > = 0 >
|
|
404
|
+
inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
|
|
405
|
+
{
|
|
406
|
+
external_constructor<value_t::array>::construct(j, arr);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >
|
|
410
|
+
inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
|
|
411
|
+
{
|
|
412
|
+
j = { p.first, p.second };
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// for https://github.com/nlohmann/json/pull/1134
|
|
416
|
+
template<typename BasicJsonType, typename T,
|
|
417
|
+
enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value, int> = 0>
|
|
418
|
+
inline void to_json(BasicJsonType& j, const T& b)
|
|
419
|
+
{
|
|
420
|
+
j = { {b.key(), b.value()} };
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
|
|
424
|
+
inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...> /*unused*/)
|
|
425
|
+
{
|
|
426
|
+
j = { std::get<Idx>(t)... };
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
template<typename BasicJsonType, typename Tuple>
|
|
430
|
+
inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& /*unused*/, index_sequence<> /*unused*/)
|
|
431
|
+
{
|
|
432
|
+
using array_t = typename BasicJsonType::array_t;
|
|
433
|
+
j = array_t();
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
template<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value, int > = 0>
|
|
437
|
+
inline void to_json(BasicJsonType& j, const T& t)
|
|
438
|
+
{
|
|
439
|
+
to_json_tuple_impl(j, t, make_index_sequence<std::tuple_size<T>::value> {});
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
|
|
443
|
+
template<typename BasicJsonType>
|
|
444
|
+
inline void to_json(BasicJsonType& j, const std_fs::path& p)
|
|
445
|
+
{
|
|
446
|
+
#ifdef JSON_HAS_CPP_20
|
|
447
|
+
const std::u8string s = p.u8string();
|
|
448
|
+
j = std::string(s.begin(), s.end());
|
|
449
|
+
#else
|
|
450
|
+
j = p.u8string(); // returns std::string in C++17
|
|
451
|
+
#endif
|
|
452
|
+
}
|
|
453
|
+
#endif
|
|
454
|
+
|
|
455
|
+
struct to_json_fn
|
|
456
|
+
{
|
|
457
|
+
template<typename BasicJsonType, typename T>
|
|
458
|
+
auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))
|
|
459
|
+
-> decltype(to_json(j, std::forward<T>(val)), void())
|
|
460
|
+
{
|
|
461
|
+
return to_json(j, std::forward<T>(val));
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
} // namespace detail
|
|
465
|
+
|
|
466
|
+
#ifndef JSON_HAS_CPP_17
|
|
467
|
+
/// namespace to hold default `to_json` function
|
|
468
|
+
/// to see why this is required:
|
|
469
|
+
/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
|
|
470
|
+
namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)
|
|
471
|
+
{
|
|
472
|
+
#endif
|
|
473
|
+
JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers)
|
|
474
|
+
detail::static_const<detail::to_json_fn>::value;
|
|
475
|
+
#ifndef JSON_HAS_CPP_17
|
|
476
|
+
} // namespace
|
|
477
|
+
#endif
|
|
478
|
+
|
|
479
|
+
NLOHMANN_JSON_NAMESPACE_END
|