mqt-core 3.3.2__cp314-cp314t-macosx_11_0_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.
- mqt/core/__init__.py +77 -0
- mqt/core/__main__.py +55 -0
- mqt/core/_commands.py +52 -0
- mqt/core/_compat/__init__.py +11 -0
- mqt/core/_compat/typing.py +29 -0
- mqt/core/_version.py +34 -0
- mqt/core/_version.pyi +12 -0
- mqt/core/dd.cpython-314t-darwin.so +0 -0
- mqt/core/dd.pyi +1016 -0
- mqt/core/dd_evaluation.py +368 -0
- mqt/core/fomac.cpython-314t-darwin.so +0 -0
- mqt/core/fomac.pyi +125 -0
- mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
- mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
- mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
- mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
- mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
- mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
- mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
- mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
- mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
- mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
- mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
- mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
- mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
- mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
- mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
- mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
- mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
- mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
- mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
- mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
- mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
- mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
- mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
- mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
- mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
- mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
- mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
- mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
- mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
- mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
- mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
- mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
- mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
- mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
- mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
- mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
- mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
- mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
- mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
- mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
- mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
- mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
- mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
- mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
- mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
- mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
- mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
- mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
- mqt/core/include/mqt-core/boost/config.hpp +67 -0
- mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
- mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
- mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
- mqt/core/include/mqt-core/boost/limits.hpp +146 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
- mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
- mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
- mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
- mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
- mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
- mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
- mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
- mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
- mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
- mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
- mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
- mqt/core/include/mqt-core/boost/version.hpp +32 -0
- mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
- mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
- mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
- mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
- mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
- mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
- mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
- mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
- mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
- mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
- mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
- mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
- mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
- mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
- mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
- mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
- mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
- mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
- mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
- mqt/core/include/mqt-core/dd/Export.hpp +438 -0
- mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
- mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
- mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
- mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
- mqt/core/include/mqt-core/dd/Node.hpp +223 -0
- mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
- mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
- mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
- mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
- mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
- mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
- mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
- mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
- mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
- mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
- mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
- mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
- mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
- mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
- mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
- mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
- mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
- mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
- mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
- mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
- mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
- mqt/core/include/mqt-core/ir/Register.hpp +125 -0
- mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
- mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
- mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
- mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
- mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
- mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
- mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
- mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
- mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
- mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
- mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
- mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -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/NAComputation.hpp +185 -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/entities/Atom.hpp +62 -0
- mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
- mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
- mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
- mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
- mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
- mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
- mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
- mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
- mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
- mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
- mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
- mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
- mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
- mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
- mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
- mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
- mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
- mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
- mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
- mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
- mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
- mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
- mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
- mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
- mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
- mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
- mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
- mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
- mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
- mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
- mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
- mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
- mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
- mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
- mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
- mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
- mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -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 +2078 -0
- mqt/core/ir/operations.pyi +1011 -0
- mqt/core/ir/registers.pyi +91 -0
- mqt/core/ir/symbolic.pyi +177 -0
- mqt/core/ir.cpython-314t-darwin.so +0 -0
- mqt/core/lib/libmqt-core-algorithms.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-algorithms.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-algorithms.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.dylib +0 -0
- mqt/core/lib/libmqt-core-na.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-na.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-na.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device-gen.a +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.dylib +0 -0
- mqt/core/lib/libspdlog.a +0 -0
- mqt/core/lib/pkgconfig/spdlog.pc +13 -0
- mqt/core/na/__init__.py +12 -0
- mqt/core/na/fomac.cpython-314t-darwin.so +0 -0
- mqt/core/na/fomac.pyi +117 -0
- mqt/core/plugins/__init__.py +9 -0
- mqt/core/plugins/qiskit/__init__.py +19 -0
- mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
- mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
- mqt/core/py.typed +2 -0
- mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
- mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
- mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
- mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
- mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
- mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +446 -0
- 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 +109 -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 +118 -0
- mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
- mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
- mqt_core-3.3.2.dist-info/METADATA +210 -0
- mqt_core-3.3.2.dist-info/RECORD +546 -0
- mqt_core-3.3.2.dist-info/WHEEL +6 -0
- mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
- mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
|
@@ -0,0 +1,549 @@
|
|
|
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 <array> // array
|
|
12
|
+
#include <cstddef> // size_t
|
|
13
|
+
#include <cstring> // strlen
|
|
14
|
+
#include <iterator> // begin, end, iterator_traits, random_access_iterator_tag, distance, next
|
|
15
|
+
#include <memory> // shared_ptr, make_shared, addressof
|
|
16
|
+
#include <numeric> // accumulate
|
|
17
|
+
#include <string> // string, char_traits
|
|
18
|
+
#include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer
|
|
19
|
+
#include <utility> // pair, declval
|
|
20
|
+
|
|
21
|
+
#ifndef JSON_NO_IO
|
|
22
|
+
#include <cstdio> // FILE *
|
|
23
|
+
#include <istream> // istream
|
|
24
|
+
#endif // JSON_NO_IO
|
|
25
|
+
|
|
26
|
+
#include <nlohmann/detail/exceptions.hpp>
|
|
27
|
+
#include <nlohmann/detail/iterators/iterator_traits.hpp>
|
|
28
|
+
#include <nlohmann/detail/macro_scope.hpp>
|
|
29
|
+
#include <nlohmann/detail/meta/type_traits.hpp>
|
|
30
|
+
|
|
31
|
+
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
32
|
+
namespace detail
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
/// the supported input formats
|
|
36
|
+
enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata };
|
|
37
|
+
|
|
38
|
+
////////////////////
|
|
39
|
+
// input adapters //
|
|
40
|
+
////////////////////
|
|
41
|
+
|
|
42
|
+
#ifndef JSON_NO_IO
|
|
43
|
+
/*!
|
|
44
|
+
Input adapter for stdio file access. This adapter read only 1 byte and do not use any
|
|
45
|
+
buffer. This adapter is a very low level adapter.
|
|
46
|
+
*/
|
|
47
|
+
class file_input_adapter
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
using char_type = char;
|
|
51
|
+
|
|
52
|
+
JSON_HEDLEY_NON_NULL(2)
|
|
53
|
+
explicit file_input_adapter(std::FILE* f) noexcept
|
|
54
|
+
: m_file(f)
|
|
55
|
+
{
|
|
56
|
+
JSON_ASSERT(m_file != nullptr);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// make class move-only
|
|
60
|
+
file_input_adapter(const file_input_adapter&) = delete;
|
|
61
|
+
file_input_adapter(file_input_adapter&&) noexcept = default;
|
|
62
|
+
file_input_adapter& operator=(const file_input_adapter&) = delete;
|
|
63
|
+
file_input_adapter& operator=(file_input_adapter&&) = delete;
|
|
64
|
+
~file_input_adapter() = default;
|
|
65
|
+
|
|
66
|
+
std::char_traits<char>::int_type get_character() noexcept
|
|
67
|
+
{
|
|
68
|
+
return std::fgetc(m_file);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// returns the number of characters successfully read
|
|
72
|
+
template<class T>
|
|
73
|
+
std::size_t get_elements(T* dest, std::size_t count = 1)
|
|
74
|
+
{
|
|
75
|
+
return fread(dest, 1, sizeof(T) * count, m_file);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private:
|
|
79
|
+
/// the file pointer to read from
|
|
80
|
+
std::FILE* m_file;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/*!
|
|
84
|
+
Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at
|
|
85
|
+
beginning of input. Does not support changing the underlying std::streambuf
|
|
86
|
+
in mid-input. Maintains underlying std::istream and std::streambuf to support
|
|
87
|
+
subsequent use of standard std::istream operations to process any input
|
|
88
|
+
characters following those used in parsing the JSON input. Clears the
|
|
89
|
+
std::istream flags; any input errors (e.g., EOF) will be detected by the first
|
|
90
|
+
subsequent call for input from the std::istream.
|
|
91
|
+
*/
|
|
92
|
+
class input_stream_adapter
|
|
93
|
+
{
|
|
94
|
+
public:
|
|
95
|
+
using char_type = char;
|
|
96
|
+
|
|
97
|
+
~input_stream_adapter()
|
|
98
|
+
{
|
|
99
|
+
// clear stream flags; we use underlying streambuf I/O, do not
|
|
100
|
+
// maintain ifstream flags, except eof
|
|
101
|
+
if (is != nullptr)
|
|
102
|
+
{
|
|
103
|
+
is->clear(is->rdstate() & std::ios::eofbit);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
explicit input_stream_adapter(std::istream& i)
|
|
108
|
+
: is(&i), sb(i.rdbuf())
|
|
109
|
+
{}
|
|
110
|
+
|
|
111
|
+
// delete because of pointer members
|
|
112
|
+
input_stream_adapter(const input_stream_adapter&) = delete;
|
|
113
|
+
input_stream_adapter& operator=(input_stream_adapter&) = delete;
|
|
114
|
+
input_stream_adapter& operator=(input_stream_adapter&&) = delete;
|
|
115
|
+
|
|
116
|
+
input_stream_adapter(input_stream_adapter&& rhs) noexcept
|
|
117
|
+
: is(rhs.is), sb(rhs.sb)
|
|
118
|
+
{
|
|
119
|
+
rhs.is = nullptr;
|
|
120
|
+
rhs.sb = nullptr;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// std::istream/std::streambuf use std::char_traits<char>::to_int_type, to
|
|
124
|
+
// ensure that std::char_traits<char>::eof() and the character 0xFF do not
|
|
125
|
+
// end up as the same value, e.g. 0xFFFFFFFF.
|
|
126
|
+
std::char_traits<char>::int_type get_character()
|
|
127
|
+
{
|
|
128
|
+
auto res = sb->sbumpc();
|
|
129
|
+
// set eof manually, as we don't use the istream interface.
|
|
130
|
+
if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof()))
|
|
131
|
+
{
|
|
132
|
+
is->clear(is->rdstate() | std::ios::eofbit);
|
|
133
|
+
}
|
|
134
|
+
return res;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template<class T>
|
|
138
|
+
std::size_t get_elements(T* dest, std::size_t count = 1)
|
|
139
|
+
{
|
|
140
|
+
auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
|
|
141
|
+
if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
|
|
142
|
+
{
|
|
143
|
+
is->clear(is->rdstate() | std::ios::eofbit);
|
|
144
|
+
}
|
|
145
|
+
return res;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private:
|
|
149
|
+
/// the associated input stream
|
|
150
|
+
std::istream* is = nullptr;
|
|
151
|
+
std::streambuf* sb = nullptr;
|
|
152
|
+
};
|
|
153
|
+
#endif // JSON_NO_IO
|
|
154
|
+
|
|
155
|
+
// General-purpose iterator-based adapter. It might not be as fast as
|
|
156
|
+
// theoretically possible for some containers, but it is extremely versatile.
|
|
157
|
+
template<typename IteratorType>
|
|
158
|
+
class iterator_input_adapter
|
|
159
|
+
{
|
|
160
|
+
public:
|
|
161
|
+
using char_type = typename std::iterator_traits<IteratorType>::value_type;
|
|
162
|
+
|
|
163
|
+
iterator_input_adapter(IteratorType first, IteratorType last)
|
|
164
|
+
: current(std::move(first)), end(std::move(last))
|
|
165
|
+
{}
|
|
166
|
+
|
|
167
|
+
typename char_traits<char_type>::int_type get_character()
|
|
168
|
+
{
|
|
169
|
+
if (JSON_HEDLEY_LIKELY(current != end))
|
|
170
|
+
{
|
|
171
|
+
auto result = char_traits<char_type>::to_int_type(*current);
|
|
172
|
+
std::advance(current, 1);
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return char_traits<char_type>::eof();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// for general iterators, we cannot really do something better than falling back to processing the range one-by-one
|
|
180
|
+
template<class T>
|
|
181
|
+
std::size_t get_elements(T* dest, std::size_t count = 1)
|
|
182
|
+
{
|
|
183
|
+
auto* ptr = reinterpret_cast<char*>(dest);
|
|
184
|
+
for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
|
|
185
|
+
{
|
|
186
|
+
if (JSON_HEDLEY_LIKELY(current != end))
|
|
187
|
+
{
|
|
188
|
+
ptr[read_index] = static_cast<char>(*current);
|
|
189
|
+
std::advance(current, 1);
|
|
190
|
+
}
|
|
191
|
+
else
|
|
192
|
+
{
|
|
193
|
+
return read_index;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return count * sizeof(T);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private:
|
|
200
|
+
IteratorType current;
|
|
201
|
+
IteratorType end;
|
|
202
|
+
|
|
203
|
+
template<typename BaseInputAdapter, size_t T>
|
|
204
|
+
friend struct wide_string_input_helper;
|
|
205
|
+
|
|
206
|
+
bool empty() const
|
|
207
|
+
{
|
|
208
|
+
return current == end;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
template<typename BaseInputAdapter, size_t T>
|
|
213
|
+
struct wide_string_input_helper;
|
|
214
|
+
|
|
215
|
+
template<typename BaseInputAdapter>
|
|
216
|
+
struct wide_string_input_helper<BaseInputAdapter, 4>
|
|
217
|
+
{
|
|
218
|
+
// UTF-32
|
|
219
|
+
static void fill_buffer(BaseInputAdapter& input,
|
|
220
|
+
std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
|
|
221
|
+
size_t& utf8_bytes_index,
|
|
222
|
+
size_t& utf8_bytes_filled)
|
|
223
|
+
{
|
|
224
|
+
utf8_bytes_index = 0;
|
|
225
|
+
|
|
226
|
+
if (JSON_HEDLEY_UNLIKELY(input.empty()))
|
|
227
|
+
{
|
|
228
|
+
utf8_bytes[0] = std::char_traits<char>::eof();
|
|
229
|
+
utf8_bytes_filled = 1;
|
|
230
|
+
}
|
|
231
|
+
else
|
|
232
|
+
{
|
|
233
|
+
// get the current character
|
|
234
|
+
const auto wc = input.get_character();
|
|
235
|
+
|
|
236
|
+
// UTF-32 to UTF-8 encoding
|
|
237
|
+
if (wc < 0x80)
|
|
238
|
+
{
|
|
239
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
|
|
240
|
+
utf8_bytes_filled = 1;
|
|
241
|
+
}
|
|
242
|
+
else if (wc <= 0x7FF)
|
|
243
|
+
{
|
|
244
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u) & 0x1Fu));
|
|
245
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
|
|
246
|
+
utf8_bytes_filled = 2;
|
|
247
|
+
}
|
|
248
|
+
else if (wc <= 0xFFFF)
|
|
249
|
+
{
|
|
250
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u) & 0x0Fu));
|
|
251
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
|
|
252
|
+
utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
|
|
253
|
+
utf8_bytes_filled = 3;
|
|
254
|
+
}
|
|
255
|
+
else if (wc <= 0x10FFFF)
|
|
256
|
+
{
|
|
257
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | ((static_cast<unsigned int>(wc) >> 18u) & 0x07u));
|
|
258
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 12u) & 0x3Fu));
|
|
259
|
+
utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
|
|
260
|
+
utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
|
|
261
|
+
utf8_bytes_filled = 4;
|
|
262
|
+
}
|
|
263
|
+
else
|
|
264
|
+
{
|
|
265
|
+
// unknown character
|
|
266
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
|
|
267
|
+
utf8_bytes_filled = 1;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
template<typename BaseInputAdapter>
|
|
274
|
+
struct wide_string_input_helper<BaseInputAdapter, 2>
|
|
275
|
+
{
|
|
276
|
+
// UTF-16
|
|
277
|
+
static void fill_buffer(BaseInputAdapter& input,
|
|
278
|
+
std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
|
|
279
|
+
size_t& utf8_bytes_index,
|
|
280
|
+
size_t& utf8_bytes_filled)
|
|
281
|
+
{
|
|
282
|
+
utf8_bytes_index = 0;
|
|
283
|
+
|
|
284
|
+
if (JSON_HEDLEY_UNLIKELY(input.empty()))
|
|
285
|
+
{
|
|
286
|
+
utf8_bytes[0] = std::char_traits<char>::eof();
|
|
287
|
+
utf8_bytes_filled = 1;
|
|
288
|
+
}
|
|
289
|
+
else
|
|
290
|
+
{
|
|
291
|
+
// get the current character
|
|
292
|
+
const auto wc = input.get_character();
|
|
293
|
+
|
|
294
|
+
// UTF-16 to UTF-8 encoding
|
|
295
|
+
if (wc < 0x80)
|
|
296
|
+
{
|
|
297
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
|
|
298
|
+
utf8_bytes_filled = 1;
|
|
299
|
+
}
|
|
300
|
+
else if (wc <= 0x7FF)
|
|
301
|
+
{
|
|
302
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u)));
|
|
303
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
|
|
304
|
+
utf8_bytes_filled = 2;
|
|
305
|
+
}
|
|
306
|
+
else if (0xD800 > wc || wc >= 0xE000)
|
|
307
|
+
{
|
|
308
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u)));
|
|
309
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
|
|
310
|
+
utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
|
|
311
|
+
utf8_bytes_filled = 3;
|
|
312
|
+
}
|
|
313
|
+
else
|
|
314
|
+
{
|
|
315
|
+
if (JSON_HEDLEY_UNLIKELY(!input.empty()))
|
|
316
|
+
{
|
|
317
|
+
const auto wc2 = static_cast<unsigned int>(input.get_character());
|
|
318
|
+
const auto charcode = 0x10000u + (((static_cast<unsigned int>(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu));
|
|
319
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | (charcode >> 18u));
|
|
320
|
+
utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu));
|
|
321
|
+
utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu));
|
|
322
|
+
utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (charcode & 0x3Fu));
|
|
323
|
+
utf8_bytes_filled = 4;
|
|
324
|
+
}
|
|
325
|
+
else
|
|
326
|
+
{
|
|
327
|
+
utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
|
|
328
|
+
utf8_bytes_filled = 1;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
// Wraps another input adapter to convert wide character types into individual bytes.
|
|
336
|
+
template<typename BaseInputAdapter, typename WideCharType>
|
|
337
|
+
class wide_string_input_adapter
|
|
338
|
+
{
|
|
339
|
+
public:
|
|
340
|
+
using char_type = char;
|
|
341
|
+
|
|
342
|
+
wide_string_input_adapter(BaseInputAdapter base)
|
|
343
|
+
: base_adapter(base) {}
|
|
344
|
+
|
|
345
|
+
typename std::char_traits<char>::int_type get_character() noexcept
|
|
346
|
+
{
|
|
347
|
+
// check if buffer needs to be filled
|
|
348
|
+
if (utf8_bytes_index == utf8_bytes_filled)
|
|
349
|
+
{
|
|
350
|
+
fill_buffer<sizeof(WideCharType)>();
|
|
351
|
+
|
|
352
|
+
JSON_ASSERT(utf8_bytes_filled > 0);
|
|
353
|
+
JSON_ASSERT(utf8_bytes_index == 0);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// use buffer
|
|
357
|
+
JSON_ASSERT(utf8_bytes_filled > 0);
|
|
358
|
+
JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled);
|
|
359
|
+
return utf8_bytes[utf8_bytes_index++];
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// parsing binary with wchar doesn't make sense, but since the parsing mode can be runtime, we need something here
|
|
363
|
+
template<class T>
|
|
364
|
+
std::size_t get_elements(T* /*dest*/, std::size_t /*count*/ = 1)
|
|
365
|
+
{
|
|
366
|
+
JSON_THROW(parse_error::create(112, 1, "wide string type cannot be interpreted as binary data", nullptr));
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
private:
|
|
370
|
+
BaseInputAdapter base_adapter;
|
|
371
|
+
|
|
372
|
+
template<size_t T>
|
|
373
|
+
void fill_buffer()
|
|
374
|
+
{
|
|
375
|
+
wide_string_input_helper<BaseInputAdapter, T>::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/// a buffer for UTF-8 bytes
|
|
379
|
+
std::array<std::char_traits<char>::int_type, 4> utf8_bytes = {{0, 0, 0, 0}};
|
|
380
|
+
|
|
381
|
+
/// index to the utf8_codes array for the next valid byte
|
|
382
|
+
std::size_t utf8_bytes_index = 0;
|
|
383
|
+
/// number of valid bytes in the utf8_codes array
|
|
384
|
+
std::size_t utf8_bytes_filled = 0;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
template<typename IteratorType, typename Enable = void>
|
|
388
|
+
struct iterator_input_adapter_factory
|
|
389
|
+
{
|
|
390
|
+
using iterator_type = IteratorType;
|
|
391
|
+
using char_type = typename std::iterator_traits<iterator_type>::value_type;
|
|
392
|
+
using adapter_type = iterator_input_adapter<iterator_type>;
|
|
393
|
+
|
|
394
|
+
static adapter_type create(IteratorType first, IteratorType last)
|
|
395
|
+
{
|
|
396
|
+
return adapter_type(std::move(first), std::move(last));
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
template<typename T>
|
|
401
|
+
struct is_iterator_of_multibyte
|
|
402
|
+
{
|
|
403
|
+
using value_type = typename std::iterator_traits<T>::value_type;
|
|
404
|
+
enum
|
|
405
|
+
{
|
|
406
|
+
value = sizeof(value_type) > 1
|
|
407
|
+
};
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
template<typename IteratorType>
|
|
411
|
+
struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>>
|
|
412
|
+
{
|
|
413
|
+
using iterator_type = IteratorType;
|
|
414
|
+
using char_type = typename std::iterator_traits<iterator_type>::value_type;
|
|
415
|
+
using base_adapter_type = iterator_input_adapter<iterator_type>;
|
|
416
|
+
using adapter_type = wide_string_input_adapter<base_adapter_type, char_type>;
|
|
417
|
+
|
|
418
|
+
static adapter_type create(IteratorType first, IteratorType last)
|
|
419
|
+
{
|
|
420
|
+
return adapter_type(base_adapter_type(std::move(first), std::move(last)));
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
// General purpose iterator-based input
|
|
425
|
+
template<typename IteratorType>
|
|
426
|
+
typename iterator_input_adapter_factory<IteratorType>::adapter_type input_adapter(IteratorType first, IteratorType last)
|
|
427
|
+
{
|
|
428
|
+
using factory_type = iterator_input_adapter_factory<IteratorType>;
|
|
429
|
+
return factory_type::create(first, last);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Convenience shorthand from container to iterator
|
|
433
|
+
// Enables ADL on begin(container) and end(container)
|
|
434
|
+
// Encloses the using declarations in namespace for not to leak them to outside scope
|
|
435
|
+
|
|
436
|
+
namespace container_input_adapter_factory_impl
|
|
437
|
+
{
|
|
438
|
+
|
|
439
|
+
using std::begin;
|
|
440
|
+
using std::end;
|
|
441
|
+
|
|
442
|
+
template<typename ContainerType, typename Enable = void>
|
|
443
|
+
struct container_input_adapter_factory {};
|
|
444
|
+
|
|
445
|
+
template<typename ContainerType>
|
|
446
|
+
struct container_input_adapter_factory< ContainerType,
|
|
447
|
+
void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
|
|
448
|
+
{
|
|
449
|
+
using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>())));
|
|
450
|
+
|
|
451
|
+
static adapter_type create(const ContainerType& container)
|
|
452
|
+
{
|
|
453
|
+
return input_adapter(begin(container), end(container));
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
} // namespace container_input_adapter_factory_impl
|
|
458
|
+
|
|
459
|
+
template<typename ContainerType>
|
|
460
|
+
typename container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::adapter_type input_adapter(const ContainerType& container)
|
|
461
|
+
{
|
|
462
|
+
return container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::create(container);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// specialization for std::string
|
|
466
|
+
using string_input_adapter_type = decltype(input_adapter(std::declval<std::string>()));
|
|
467
|
+
|
|
468
|
+
#ifndef JSON_NO_IO
|
|
469
|
+
// Special cases with fast paths
|
|
470
|
+
inline file_input_adapter input_adapter(std::FILE* file)
|
|
471
|
+
{
|
|
472
|
+
if (file == nullptr)
|
|
473
|
+
{
|
|
474
|
+
JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
|
|
475
|
+
}
|
|
476
|
+
return file_input_adapter(file);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
inline input_stream_adapter input_adapter(std::istream& stream)
|
|
480
|
+
{
|
|
481
|
+
return input_stream_adapter(stream);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
inline input_stream_adapter input_adapter(std::istream&& stream)
|
|
485
|
+
{
|
|
486
|
+
return input_stream_adapter(stream);
|
|
487
|
+
}
|
|
488
|
+
#endif // JSON_NO_IO
|
|
489
|
+
|
|
490
|
+
using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>()));
|
|
491
|
+
|
|
492
|
+
// Null-delimited strings, and the like.
|
|
493
|
+
template < typename CharT,
|
|
494
|
+
typename std::enable_if <
|
|
495
|
+
std::is_pointer<CharT>::value&&
|
|
496
|
+
!std::is_array<CharT>::value&&
|
|
497
|
+
std::is_integral<typename std::remove_pointer<CharT>::type>::value&&
|
|
498
|
+
sizeof(typename std::remove_pointer<CharT>::type) == 1,
|
|
499
|
+
int >::type = 0 >
|
|
500
|
+
contiguous_bytes_input_adapter input_adapter(CharT b)
|
|
501
|
+
{
|
|
502
|
+
if (b == nullptr)
|
|
503
|
+
{
|
|
504
|
+
JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
|
|
505
|
+
}
|
|
506
|
+
auto length = std::strlen(reinterpret_cast<const char*>(b));
|
|
507
|
+
const auto* ptr = reinterpret_cast<const char*>(b);
|
|
508
|
+
return input_adapter(ptr, ptr + length); // cppcheck-suppress[nullPointerArithmeticRedundantCheck]
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
template<typename T, std::size_t N>
|
|
512
|
+
auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
|
|
513
|
+
{
|
|
514
|
+
return input_adapter(array, array + N);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// This class only handles inputs of input_buffer_adapter type.
|
|
518
|
+
// It's required so that expressions like {ptr, len} can be implicitly cast
|
|
519
|
+
// to the correct adapter.
|
|
520
|
+
class span_input_adapter
|
|
521
|
+
{
|
|
522
|
+
public:
|
|
523
|
+
template < typename CharT,
|
|
524
|
+
typename std::enable_if <
|
|
525
|
+
std::is_pointer<CharT>::value&&
|
|
526
|
+
std::is_integral<typename std::remove_pointer<CharT>::type>::value&&
|
|
527
|
+
sizeof(typename std::remove_pointer<CharT>::type) == 1,
|
|
528
|
+
int >::type = 0 >
|
|
529
|
+
span_input_adapter(CharT b, std::size_t l)
|
|
530
|
+
: ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l) {}
|
|
531
|
+
|
|
532
|
+
template<class IteratorType,
|
|
533
|
+
typename std::enable_if<
|
|
534
|
+
std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value,
|
|
535
|
+
int>::type = 0>
|
|
536
|
+
span_input_adapter(IteratorType first, IteratorType last)
|
|
537
|
+
: ia(input_adapter(first, last)) {}
|
|
538
|
+
|
|
539
|
+
contiguous_bytes_input_adapter&& get()
|
|
540
|
+
{
|
|
541
|
+
return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg)
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
private:
|
|
545
|
+
contiguous_bytes_input_adapter ia;
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
} // namespace detail
|
|
549
|
+
NLOHMANN_JSON_NAMESPACE_END
|