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,127 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include <ctime> // std::time_t
|
|
7
|
+
#include <spdlog/common.h>
|
|
8
|
+
|
|
9
|
+
namespace spdlog {
|
|
10
|
+
namespace details {
|
|
11
|
+
namespace os {
|
|
12
|
+
|
|
13
|
+
SPDLOG_API spdlog::log_clock::time_point now() SPDLOG_NOEXCEPT;
|
|
14
|
+
|
|
15
|
+
SPDLOG_API std::tm localtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT;
|
|
16
|
+
|
|
17
|
+
SPDLOG_API std::tm localtime() SPDLOG_NOEXCEPT;
|
|
18
|
+
|
|
19
|
+
SPDLOG_API std::tm gmtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT;
|
|
20
|
+
|
|
21
|
+
SPDLOG_API std::tm gmtime() SPDLOG_NOEXCEPT;
|
|
22
|
+
|
|
23
|
+
// eol definition
|
|
24
|
+
#if !defined(SPDLOG_EOL)
|
|
25
|
+
#ifdef _WIN32
|
|
26
|
+
#define SPDLOG_EOL "\r\n"
|
|
27
|
+
#else
|
|
28
|
+
#define SPDLOG_EOL "\n"
|
|
29
|
+
#endif
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
SPDLOG_CONSTEXPR static const char *default_eol = SPDLOG_EOL;
|
|
33
|
+
|
|
34
|
+
// folder separator
|
|
35
|
+
#if !defined(SPDLOG_FOLDER_SEPS)
|
|
36
|
+
#ifdef _WIN32
|
|
37
|
+
#define SPDLOG_FOLDER_SEPS "\\/"
|
|
38
|
+
#else
|
|
39
|
+
#define SPDLOG_FOLDER_SEPS "/"
|
|
40
|
+
#endif
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
SPDLOG_CONSTEXPR static const char folder_seps[] = SPDLOG_FOLDER_SEPS;
|
|
44
|
+
SPDLOG_CONSTEXPR static const filename_t::value_type folder_seps_filename[] =
|
|
45
|
+
SPDLOG_FILENAME_T(SPDLOG_FOLDER_SEPS);
|
|
46
|
+
|
|
47
|
+
// fopen_s on non windows for writing
|
|
48
|
+
SPDLOG_API bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode);
|
|
49
|
+
|
|
50
|
+
// Remove filename. return 0 on success
|
|
51
|
+
SPDLOG_API int remove(const filename_t &filename) SPDLOG_NOEXCEPT;
|
|
52
|
+
|
|
53
|
+
// Remove file if exists. return 0 on success
|
|
54
|
+
// Note: Non atomic (might return failure to delete if concurrently deleted by other process/thread)
|
|
55
|
+
SPDLOG_API int remove_if_exists(const filename_t &filename) SPDLOG_NOEXCEPT;
|
|
56
|
+
|
|
57
|
+
SPDLOG_API int rename(const filename_t &filename1, const filename_t &filename2) SPDLOG_NOEXCEPT;
|
|
58
|
+
|
|
59
|
+
// Return if file exists.
|
|
60
|
+
SPDLOG_API bool path_exists(const filename_t &filename) SPDLOG_NOEXCEPT;
|
|
61
|
+
|
|
62
|
+
// Return file size according to open FILE* object
|
|
63
|
+
SPDLOG_API size_t filesize(FILE *f);
|
|
64
|
+
|
|
65
|
+
// Return utc offset in minutes or throw spdlog_ex on failure
|
|
66
|
+
SPDLOG_API int utc_minutes_offset(const std::tm &tm = details::os::localtime());
|
|
67
|
+
|
|
68
|
+
// Return current thread id as size_t
|
|
69
|
+
// It exists because the std::this_thread::get_id() is much slower(especially
|
|
70
|
+
// under VS 2013)
|
|
71
|
+
SPDLOG_API size_t _thread_id() SPDLOG_NOEXCEPT;
|
|
72
|
+
|
|
73
|
+
// Return current thread id as size_t (from thread local storage)
|
|
74
|
+
SPDLOG_API size_t thread_id() SPDLOG_NOEXCEPT;
|
|
75
|
+
|
|
76
|
+
// This is avoid msvc issue in sleep_for that happens if the clock changes.
|
|
77
|
+
// See https://github.com/gabime/spdlog/issues/609
|
|
78
|
+
SPDLOG_API void sleep_for_millis(unsigned int milliseconds) SPDLOG_NOEXCEPT;
|
|
79
|
+
|
|
80
|
+
SPDLOG_API std::string filename_to_str(const filename_t &filename);
|
|
81
|
+
|
|
82
|
+
SPDLOG_API int pid() SPDLOG_NOEXCEPT;
|
|
83
|
+
|
|
84
|
+
// Determine if the terminal supports colors
|
|
85
|
+
// Source: https://github.com/agauniyal/rang/
|
|
86
|
+
SPDLOG_API bool is_color_terminal() SPDLOG_NOEXCEPT;
|
|
87
|
+
|
|
88
|
+
// Determine if the terminal attached
|
|
89
|
+
// Source: https://github.com/agauniyal/rang/
|
|
90
|
+
SPDLOG_API bool in_terminal(FILE *file) SPDLOG_NOEXCEPT;
|
|
91
|
+
|
|
92
|
+
#if (defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) || defined(SPDLOG_WCHAR_FILENAMES)) && defined(_WIN32)
|
|
93
|
+
SPDLOG_API void wstr_to_utf8buf(wstring_view_t wstr, memory_buf_t &target);
|
|
94
|
+
|
|
95
|
+
SPDLOG_API void utf8_to_wstrbuf(string_view_t str, wmemory_buf_t &target);
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
// Return directory name from given path or empty string
|
|
99
|
+
// "abc/file" => "abc"
|
|
100
|
+
// "abc/" => "abc"
|
|
101
|
+
// "abc" => ""
|
|
102
|
+
// "abc///" => "abc//"
|
|
103
|
+
SPDLOG_API filename_t dir_name(const filename_t &path);
|
|
104
|
+
|
|
105
|
+
// Create a dir from the given path.
|
|
106
|
+
// Return true if succeeded or if this dir already exists.
|
|
107
|
+
SPDLOG_API bool create_dir(const filename_t &path);
|
|
108
|
+
|
|
109
|
+
// non thread safe, cross platform getenv/getenv_s
|
|
110
|
+
// return empty string if field not found
|
|
111
|
+
SPDLOG_API std::string getenv(const char *field);
|
|
112
|
+
|
|
113
|
+
// Do fsync by FILE objectpointer.
|
|
114
|
+
// Return true on success.
|
|
115
|
+
SPDLOG_API bool fsync(FILE *fp);
|
|
116
|
+
|
|
117
|
+
// Do non-locking fwrite if possible by the os or use the regular locking fwrite
|
|
118
|
+
// Return true on success.
|
|
119
|
+
SPDLOG_API bool fwrite_bytes(const void *ptr, const size_t n_bytes, FILE *fp);
|
|
120
|
+
|
|
121
|
+
} // namespace os
|
|
122
|
+
} // namespace details
|
|
123
|
+
} // namespace spdlog
|
|
124
|
+
|
|
125
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
126
|
+
#include "os-inl.h"
|
|
127
|
+
#endif
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#ifndef SPDLOG_HEADER_ONLY
|
|
7
|
+
#include <spdlog/details/periodic_worker.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
namespace spdlog {
|
|
11
|
+
namespace details {
|
|
12
|
+
|
|
13
|
+
// stop the worker thread and join it
|
|
14
|
+
SPDLOG_INLINE periodic_worker::~periodic_worker() {
|
|
15
|
+
if (worker_thread_.joinable()) {
|
|
16
|
+
{
|
|
17
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
18
|
+
active_ = false;
|
|
19
|
+
}
|
|
20
|
+
cv_.notify_one();
|
|
21
|
+
worker_thread_.join();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
} // namespace details
|
|
26
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
// periodic worker thread - periodically executes the given callback function.
|
|
7
|
+
//
|
|
8
|
+
// RAII over the owned thread:
|
|
9
|
+
// creates the thread on construction.
|
|
10
|
+
// stops and joins the thread on destruction (if the thread is executing a callback, wait for it
|
|
11
|
+
// to finish first).
|
|
12
|
+
|
|
13
|
+
#include <chrono>
|
|
14
|
+
#include <condition_variable>
|
|
15
|
+
#include <functional>
|
|
16
|
+
#include <mutex>
|
|
17
|
+
#include <thread>
|
|
18
|
+
namespace spdlog {
|
|
19
|
+
namespace details {
|
|
20
|
+
|
|
21
|
+
class SPDLOG_API periodic_worker {
|
|
22
|
+
public:
|
|
23
|
+
template <typename Rep, typename Period>
|
|
24
|
+
periodic_worker(const std::function<void()> &callback_fun,
|
|
25
|
+
std::chrono::duration<Rep, Period> interval) {
|
|
26
|
+
active_ = (interval > std::chrono::duration<Rep, Period>::zero());
|
|
27
|
+
if (!active_) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
worker_thread_ = std::thread([this, callback_fun, interval]() {
|
|
32
|
+
for (;;) {
|
|
33
|
+
std::unique_lock<std::mutex> lock(this->mutex_);
|
|
34
|
+
if (this->cv_.wait_for(lock, interval, [this] { return !this->active_; })) {
|
|
35
|
+
return; // active_ == false, so exit this thread
|
|
36
|
+
}
|
|
37
|
+
callback_fun();
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
std::thread &get_thread() { return worker_thread_; }
|
|
42
|
+
periodic_worker(const periodic_worker &) = delete;
|
|
43
|
+
periodic_worker &operator=(const periodic_worker &) = delete;
|
|
44
|
+
// stop the worker thread and join it
|
|
45
|
+
~periodic_worker();
|
|
46
|
+
|
|
47
|
+
private:
|
|
48
|
+
bool active_;
|
|
49
|
+
std::thread worker_thread_;
|
|
50
|
+
std::mutex mutex_;
|
|
51
|
+
std::condition_variable cv_;
|
|
52
|
+
};
|
|
53
|
+
} // namespace details
|
|
54
|
+
} // namespace spdlog
|
|
55
|
+
|
|
56
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
57
|
+
#include "periodic_worker-inl.h"
|
|
58
|
+
#endif
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#ifndef SPDLOG_HEADER_ONLY
|
|
7
|
+
#include <spdlog/details/registry.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#include <spdlog/common.h>
|
|
11
|
+
#include <spdlog/details/periodic_worker.h>
|
|
12
|
+
#include <spdlog/logger.h>
|
|
13
|
+
#include <spdlog/pattern_formatter.h>
|
|
14
|
+
|
|
15
|
+
#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER
|
|
16
|
+
// support for the default stdout color logger
|
|
17
|
+
#ifdef _WIN32
|
|
18
|
+
#include <spdlog/sinks/wincolor_sink.h>
|
|
19
|
+
#else
|
|
20
|
+
#include <spdlog/sinks/ansicolor_sink.h>
|
|
21
|
+
#endif
|
|
22
|
+
#endif // SPDLOG_DISABLE_DEFAULT_LOGGER
|
|
23
|
+
|
|
24
|
+
#include <chrono>
|
|
25
|
+
#include <functional>
|
|
26
|
+
#include <memory>
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <unordered_map>
|
|
29
|
+
|
|
30
|
+
namespace spdlog {
|
|
31
|
+
namespace details {
|
|
32
|
+
|
|
33
|
+
SPDLOG_INLINE registry::registry()
|
|
34
|
+
: formatter_(new pattern_formatter()) {
|
|
35
|
+
#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER
|
|
36
|
+
// create default logger (ansicolor_stdout_sink_mt or wincolor_stdout_sink_mt in windows).
|
|
37
|
+
#ifdef _WIN32
|
|
38
|
+
auto color_sink = std::make_shared<sinks::wincolor_stdout_sink_mt>();
|
|
39
|
+
#else
|
|
40
|
+
auto color_sink = std::make_shared<sinks::ansicolor_stdout_sink_mt>();
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
const char *default_logger_name = "";
|
|
44
|
+
default_logger_ = std::make_shared<spdlog::logger>(default_logger_name, std::move(color_sink));
|
|
45
|
+
loggers_[default_logger_name] = default_logger_;
|
|
46
|
+
|
|
47
|
+
#endif // SPDLOG_DISABLE_DEFAULT_LOGGER
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
SPDLOG_INLINE registry::~registry() = default;
|
|
51
|
+
|
|
52
|
+
SPDLOG_INLINE void registry::register_logger(std::shared_ptr<logger> new_logger) {
|
|
53
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
54
|
+
register_logger_(std::move(new_logger));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
SPDLOG_INLINE void registry::register_or_replace(std::shared_ptr<logger> new_logger) {
|
|
58
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
59
|
+
register_or_replace_(std::move(new_logger));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
SPDLOG_INLINE void registry::initialize_logger(std::shared_ptr<logger> new_logger) {
|
|
63
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
64
|
+
new_logger->set_formatter(formatter_->clone());
|
|
65
|
+
|
|
66
|
+
if (err_handler_) {
|
|
67
|
+
new_logger->set_error_handler(err_handler_);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// set new level according to previously configured level or default level
|
|
71
|
+
auto it = log_levels_.find(new_logger->name());
|
|
72
|
+
auto new_level = it != log_levels_.end() ? it->second : global_log_level_;
|
|
73
|
+
new_logger->set_level(new_level);
|
|
74
|
+
|
|
75
|
+
new_logger->flush_on(flush_level_);
|
|
76
|
+
|
|
77
|
+
if (backtrace_n_messages_ > 0) {
|
|
78
|
+
new_logger->enable_backtrace(backtrace_n_messages_);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (automatic_registration_) {
|
|
82
|
+
register_logger_(std::move(new_logger));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
SPDLOG_INLINE std::shared_ptr<logger> registry::get(const std::string &logger_name) {
|
|
87
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
88
|
+
auto found = loggers_.find(logger_name);
|
|
89
|
+
return found == loggers_.end() ? nullptr : found->second;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
SPDLOG_INLINE std::shared_ptr<logger> registry::default_logger() {
|
|
93
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
94
|
+
return default_logger_;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Return raw ptr to the default logger.
|
|
98
|
+
// To be used directly by the spdlog default api (e.g. spdlog::info)
|
|
99
|
+
// This make the default API faster, but cannot be used concurrently with set_default_logger().
|
|
100
|
+
// e.g do not call set_default_logger() from one thread while calling spdlog::info() from another.
|
|
101
|
+
SPDLOG_INLINE logger *registry::get_default_raw() { return default_logger_.get(); }
|
|
102
|
+
|
|
103
|
+
// set default logger.
|
|
104
|
+
// default logger is stored in default_logger_ (for faster retrieval) and in the loggers_ map.
|
|
105
|
+
SPDLOG_INLINE void registry::set_default_logger(std::shared_ptr<logger> new_default_logger) {
|
|
106
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
107
|
+
if (new_default_logger != nullptr) {
|
|
108
|
+
loggers_[new_default_logger->name()] = new_default_logger;
|
|
109
|
+
}
|
|
110
|
+
default_logger_ = std::move(new_default_logger);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
SPDLOG_INLINE void registry::set_tp(std::shared_ptr<thread_pool> tp) {
|
|
114
|
+
std::lock_guard<std::recursive_mutex> lock(tp_mutex_);
|
|
115
|
+
tp_ = std::move(tp);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
SPDLOG_INLINE std::shared_ptr<thread_pool> registry::get_tp() {
|
|
119
|
+
std::lock_guard<std::recursive_mutex> lock(tp_mutex_);
|
|
120
|
+
return tp_;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Set global formatter. Each sink in each logger will get a clone of this object
|
|
124
|
+
SPDLOG_INLINE void registry::set_formatter(std::unique_ptr<formatter> formatter) {
|
|
125
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
126
|
+
formatter_ = std::move(formatter);
|
|
127
|
+
for (auto &l : loggers_) {
|
|
128
|
+
l.second->set_formatter(formatter_->clone());
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
SPDLOG_INLINE void registry::enable_backtrace(size_t n_messages) {
|
|
133
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
134
|
+
backtrace_n_messages_ = n_messages;
|
|
135
|
+
|
|
136
|
+
for (auto &l : loggers_) {
|
|
137
|
+
l.second->enable_backtrace(n_messages);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
SPDLOG_INLINE void registry::disable_backtrace() {
|
|
142
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
143
|
+
backtrace_n_messages_ = 0;
|
|
144
|
+
for (auto &l : loggers_) {
|
|
145
|
+
l.second->disable_backtrace();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
SPDLOG_INLINE void registry::set_level(level::level_enum log_level) {
|
|
150
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
151
|
+
for (auto &l : loggers_) {
|
|
152
|
+
l.second->set_level(log_level);
|
|
153
|
+
}
|
|
154
|
+
global_log_level_ = log_level;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
SPDLOG_INLINE void registry::flush_on(level::level_enum log_level) {
|
|
158
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
159
|
+
for (auto &l : loggers_) {
|
|
160
|
+
l.second->flush_on(log_level);
|
|
161
|
+
}
|
|
162
|
+
flush_level_ = log_level;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
SPDLOG_INLINE void registry::set_error_handler(err_handler handler) {
|
|
166
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
167
|
+
for (auto &l : loggers_) {
|
|
168
|
+
l.second->set_error_handler(handler);
|
|
169
|
+
}
|
|
170
|
+
err_handler_ = std::move(handler);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
SPDLOG_INLINE void registry::apply_all(
|
|
174
|
+
const std::function<void(const std::shared_ptr<logger>)> &fun) {
|
|
175
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
176
|
+
for (auto &l : loggers_) {
|
|
177
|
+
fun(l.second);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
SPDLOG_INLINE void registry::flush_all() {
|
|
182
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
183
|
+
for (auto &l : loggers_) {
|
|
184
|
+
l.second->flush();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
SPDLOG_INLINE void registry::drop(const std::string &logger_name) {
|
|
189
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
190
|
+
auto is_default_logger = default_logger_ && default_logger_->name() == logger_name;
|
|
191
|
+
loggers_.erase(logger_name);
|
|
192
|
+
if (is_default_logger) {
|
|
193
|
+
default_logger_.reset();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
SPDLOG_INLINE void registry::drop_all() {
|
|
198
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
199
|
+
loggers_.clear();
|
|
200
|
+
default_logger_.reset();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// clean all resources and threads started by the registry
|
|
204
|
+
SPDLOG_INLINE void registry::shutdown() {
|
|
205
|
+
{
|
|
206
|
+
std::lock_guard<std::mutex> lock(flusher_mutex_);
|
|
207
|
+
periodic_flusher_.reset();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
drop_all();
|
|
211
|
+
|
|
212
|
+
{
|
|
213
|
+
std::lock_guard<std::recursive_mutex> lock(tp_mutex_);
|
|
214
|
+
tp_.reset();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
SPDLOG_INLINE std::recursive_mutex ®istry::tp_mutex() { return tp_mutex_; }
|
|
219
|
+
|
|
220
|
+
SPDLOG_INLINE void registry::set_automatic_registration(bool automatic_registration) {
|
|
221
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
222
|
+
automatic_registration_ = automatic_registration;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
SPDLOG_INLINE void registry::set_levels(log_levels levels, level::level_enum *global_level) {
|
|
226
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
227
|
+
log_levels_ = std::move(levels);
|
|
228
|
+
auto global_level_requested = global_level != nullptr;
|
|
229
|
+
global_log_level_ = global_level_requested ? *global_level : global_log_level_;
|
|
230
|
+
|
|
231
|
+
for (auto &logger : loggers_) {
|
|
232
|
+
auto logger_entry = log_levels_.find(logger.first);
|
|
233
|
+
if (logger_entry != log_levels_.end()) {
|
|
234
|
+
logger.second->set_level(logger_entry->second);
|
|
235
|
+
} else if (global_level_requested) {
|
|
236
|
+
logger.second->set_level(*global_level);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
SPDLOG_INLINE registry ®istry::instance() {
|
|
242
|
+
static registry s_instance;
|
|
243
|
+
return s_instance;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
SPDLOG_INLINE void registry::apply_logger_env_levels(std::shared_ptr<logger> new_logger) {
|
|
247
|
+
std::lock_guard<std::mutex> lock(logger_map_mutex_);
|
|
248
|
+
auto it = log_levels_.find(new_logger->name());
|
|
249
|
+
auto new_level = it != log_levels_.end() ? it->second : global_log_level_;
|
|
250
|
+
new_logger->set_level(new_level);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
SPDLOG_INLINE void registry::throw_if_exists_(const std::string &logger_name) {
|
|
254
|
+
if (loggers_.find(logger_name) != loggers_.end()) {
|
|
255
|
+
throw_spdlog_ex("logger with name '" + logger_name + "' already exists");
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
SPDLOG_INLINE void registry::register_logger_(std::shared_ptr<logger> new_logger) {
|
|
260
|
+
auto &logger_name = new_logger->name();
|
|
261
|
+
throw_if_exists_(logger_name);
|
|
262
|
+
loggers_[logger_name] = std::move(new_logger);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
SPDLOG_INLINE void registry::register_or_replace_(std::shared_ptr<logger> new_logger) {
|
|
266
|
+
loggers_[new_logger->name()] = std::move(new_logger);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
} // namespace details
|
|
270
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
// Loggers registry of unique name->logger pointer
|
|
7
|
+
// An attempt to create a logger with an already existing name will result with spdlog_ex exception.
|
|
8
|
+
// If user requests a non existing logger, nullptr will be returned
|
|
9
|
+
// This class is thread safe
|
|
10
|
+
|
|
11
|
+
#include <spdlog/common.h>
|
|
12
|
+
#include <spdlog/details/periodic_worker.h>
|
|
13
|
+
|
|
14
|
+
#include <chrono>
|
|
15
|
+
#include <functional>
|
|
16
|
+
#include <memory>
|
|
17
|
+
#include <mutex>
|
|
18
|
+
#include <string>
|
|
19
|
+
#include <unordered_map>
|
|
20
|
+
|
|
21
|
+
namespace spdlog {
|
|
22
|
+
class logger;
|
|
23
|
+
|
|
24
|
+
namespace details {
|
|
25
|
+
class thread_pool;
|
|
26
|
+
|
|
27
|
+
class SPDLOG_API registry {
|
|
28
|
+
public:
|
|
29
|
+
using log_levels = std::unordered_map<std::string, level::level_enum>;
|
|
30
|
+
registry(const registry &) = delete;
|
|
31
|
+
registry &operator=(const registry &) = delete;
|
|
32
|
+
|
|
33
|
+
void register_logger(std::shared_ptr<logger> new_logger);
|
|
34
|
+
void register_or_replace(std::shared_ptr<logger> new_logger);
|
|
35
|
+
void initialize_logger(std::shared_ptr<logger> new_logger);
|
|
36
|
+
std::shared_ptr<logger> get(const std::string &logger_name);
|
|
37
|
+
std::shared_ptr<logger> default_logger();
|
|
38
|
+
|
|
39
|
+
// Return raw ptr to the default logger.
|
|
40
|
+
// To be used directly by the spdlog default api (e.g. spdlog::info)
|
|
41
|
+
// This make the default API faster, but cannot be used concurrently with set_default_logger().
|
|
42
|
+
// e.g do not call set_default_logger() from one thread while calling spdlog::info() from
|
|
43
|
+
// another.
|
|
44
|
+
logger *get_default_raw();
|
|
45
|
+
|
|
46
|
+
// set default logger and add it to the registry if not registered already.
|
|
47
|
+
// default logger is stored in default_logger_ (for faster retrieval) and in the loggers_ map.
|
|
48
|
+
// Note: Make sure to unregister it when no longer needed or before calling again with a new
|
|
49
|
+
// logger.
|
|
50
|
+
void set_default_logger(std::shared_ptr<logger> new_default_logger);
|
|
51
|
+
|
|
52
|
+
void set_tp(std::shared_ptr<thread_pool> tp);
|
|
53
|
+
|
|
54
|
+
std::shared_ptr<thread_pool> get_tp();
|
|
55
|
+
|
|
56
|
+
// Set global formatter. Each sink in each logger will get a clone of this object
|
|
57
|
+
void set_formatter(std::unique_ptr<formatter> formatter);
|
|
58
|
+
|
|
59
|
+
void enable_backtrace(size_t n_messages);
|
|
60
|
+
|
|
61
|
+
void disable_backtrace();
|
|
62
|
+
|
|
63
|
+
void set_level(level::level_enum log_level);
|
|
64
|
+
|
|
65
|
+
void flush_on(level::level_enum log_level);
|
|
66
|
+
|
|
67
|
+
template <typename Rep, typename Period>
|
|
68
|
+
void flush_every(std::chrono::duration<Rep, Period> interval) {
|
|
69
|
+
std::lock_guard<std::mutex> lock(flusher_mutex_);
|
|
70
|
+
auto clbk = [this]() { this->flush_all(); };
|
|
71
|
+
periodic_flusher_ = details::make_unique<periodic_worker>(clbk, interval);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
std::unique_ptr<periodic_worker> &get_flusher() {
|
|
75
|
+
std::lock_guard<std::mutex> lock(flusher_mutex_);
|
|
76
|
+
return periodic_flusher_;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void set_error_handler(err_handler handler);
|
|
80
|
+
|
|
81
|
+
void apply_all(const std::function<void(const std::shared_ptr<logger>)> &fun);
|
|
82
|
+
|
|
83
|
+
void flush_all();
|
|
84
|
+
|
|
85
|
+
void drop(const std::string &logger_name);
|
|
86
|
+
|
|
87
|
+
void drop_all();
|
|
88
|
+
|
|
89
|
+
// clean all resources and threads started by the registry
|
|
90
|
+
void shutdown();
|
|
91
|
+
|
|
92
|
+
std::recursive_mutex &tp_mutex();
|
|
93
|
+
|
|
94
|
+
void set_automatic_registration(bool automatic_registration);
|
|
95
|
+
|
|
96
|
+
// set levels for all existing/future loggers. global_level can be null if should not set.
|
|
97
|
+
void set_levels(log_levels levels, level::level_enum *global_level);
|
|
98
|
+
|
|
99
|
+
static registry &instance();
|
|
100
|
+
|
|
101
|
+
void apply_logger_env_levels(std::shared_ptr<logger> new_logger);
|
|
102
|
+
|
|
103
|
+
private:
|
|
104
|
+
registry();
|
|
105
|
+
~registry();
|
|
106
|
+
|
|
107
|
+
void throw_if_exists_(const std::string &logger_name);
|
|
108
|
+
void register_logger_(std::shared_ptr<logger> new_logger);
|
|
109
|
+
void register_or_replace_(std::shared_ptr<logger> new_logger);
|
|
110
|
+
bool set_level_from_cfg_(logger *logger);
|
|
111
|
+
std::mutex logger_map_mutex_, flusher_mutex_;
|
|
112
|
+
std::recursive_mutex tp_mutex_;
|
|
113
|
+
std::unordered_map<std::string, std::shared_ptr<logger>> loggers_;
|
|
114
|
+
log_levels log_levels_;
|
|
115
|
+
std::unique_ptr<formatter> formatter_;
|
|
116
|
+
spdlog::level::level_enum global_log_level_ = level::info;
|
|
117
|
+
level::level_enum flush_level_ = level::off;
|
|
118
|
+
err_handler err_handler_;
|
|
119
|
+
std::shared_ptr<thread_pool> tp_;
|
|
120
|
+
std::unique_ptr<periodic_worker> periodic_flusher_;
|
|
121
|
+
std::shared_ptr<logger> default_logger_;
|
|
122
|
+
bool automatic_registration_ = true;
|
|
123
|
+
size_t backtrace_n_messages_ = 0;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace details
|
|
127
|
+
} // namespace spdlog
|
|
128
|
+
|
|
129
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
130
|
+
#include "registry-inl.h"
|
|
131
|
+
#endif
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include "registry.h"
|
|
7
|
+
|
|
8
|
+
namespace spdlog {
|
|
9
|
+
|
|
10
|
+
// Default logger factory- creates synchronous loggers
|
|
11
|
+
class logger;
|
|
12
|
+
|
|
13
|
+
struct synchronous_factory {
|
|
14
|
+
template <typename Sink, typename... SinkArgs>
|
|
15
|
+
static std::shared_ptr<spdlog::logger> create(std::string logger_name, SinkArgs &&...args) {
|
|
16
|
+
auto sink = std::make_shared<Sink>(std::forward<SinkArgs>(args)...);
|
|
17
|
+
auto new_logger = std::make_shared<spdlog::logger>(std::move(logger_name), std::move(sink));
|
|
18
|
+
details::registry::instance().initialize_logger(new_logger);
|
|
19
|
+
return new_logger;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
} // namespace spdlog
|