mqt-core 3.3.2__cp314-cp314t-macosx_11_0_x86_64.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,34 @@
|
|
|
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 <spdlog/details/log_msg.h>
|
|
7
|
+
#include <spdlog/formatter.h>
|
|
8
|
+
|
|
9
|
+
namespace spdlog {
|
|
10
|
+
|
|
11
|
+
namespace sinks {
|
|
12
|
+
class SPDLOG_API sink {
|
|
13
|
+
public:
|
|
14
|
+
virtual ~sink() = default;
|
|
15
|
+
virtual void log(const details::log_msg &msg) = 0;
|
|
16
|
+
virtual void flush() = 0;
|
|
17
|
+
virtual void set_pattern(const std::string &pattern) = 0;
|
|
18
|
+
virtual void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) = 0;
|
|
19
|
+
|
|
20
|
+
void set_level(level::level_enum log_level);
|
|
21
|
+
level::level_enum level() const;
|
|
22
|
+
bool should_log(level::level_enum msg_level) const;
|
|
23
|
+
|
|
24
|
+
protected:
|
|
25
|
+
// sink log level - default is all
|
|
26
|
+
level_t level_{level::trace};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
} // namespace sinks
|
|
30
|
+
} // namespace spdlog
|
|
31
|
+
|
|
32
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
33
|
+
#include "sink-inl.h"
|
|
34
|
+
#endif
|
|
@@ -0,0 +1,38 @@
|
|
|
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/sinks/stdout_color_sinks.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#include <spdlog/common.h>
|
|
11
|
+
#include <spdlog/logger.h>
|
|
12
|
+
|
|
13
|
+
namespace spdlog {
|
|
14
|
+
|
|
15
|
+
template <typename Factory>
|
|
16
|
+
SPDLOG_INLINE std::shared_ptr<logger> stdout_color_mt(const std::string &logger_name,
|
|
17
|
+
color_mode mode) {
|
|
18
|
+
return Factory::template create<sinks::stdout_color_sink_mt>(logger_name, mode);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
template <typename Factory>
|
|
22
|
+
SPDLOG_INLINE std::shared_ptr<logger> stdout_color_st(const std::string &logger_name,
|
|
23
|
+
color_mode mode) {
|
|
24
|
+
return Factory::template create<sinks::stdout_color_sink_st>(logger_name, mode);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
template <typename Factory>
|
|
28
|
+
SPDLOG_INLINE std::shared_ptr<logger> stderr_color_mt(const std::string &logger_name,
|
|
29
|
+
color_mode mode) {
|
|
30
|
+
return Factory::template create<sinks::stderr_color_sink_mt>(logger_name, mode);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
template <typename Factory>
|
|
34
|
+
SPDLOG_INLINE std::shared_ptr<logger> stderr_color_st(const std::string &logger_name,
|
|
35
|
+
color_mode mode) {
|
|
36
|
+
return Factory::template create<sinks::stderr_color_sink_st>(logger_name, mode);
|
|
37
|
+
}
|
|
38
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
#ifdef _WIN32
|
|
7
|
+
#include <spdlog/sinks/wincolor_sink.h>
|
|
8
|
+
#else
|
|
9
|
+
#include <spdlog/sinks/ansicolor_sink.h>
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
13
|
+
|
|
14
|
+
namespace spdlog {
|
|
15
|
+
namespace sinks {
|
|
16
|
+
#ifdef _WIN32
|
|
17
|
+
using stdout_color_sink_mt = wincolor_stdout_sink_mt;
|
|
18
|
+
using stdout_color_sink_st = wincolor_stdout_sink_st;
|
|
19
|
+
using stderr_color_sink_mt = wincolor_stderr_sink_mt;
|
|
20
|
+
using stderr_color_sink_st = wincolor_stderr_sink_st;
|
|
21
|
+
#else
|
|
22
|
+
using stdout_color_sink_mt = ansicolor_stdout_sink_mt;
|
|
23
|
+
using stdout_color_sink_st = ansicolor_stdout_sink_st;
|
|
24
|
+
using stderr_color_sink_mt = ansicolor_stderr_sink_mt;
|
|
25
|
+
using stderr_color_sink_st = ansicolor_stderr_sink_st;
|
|
26
|
+
#endif
|
|
27
|
+
} // namespace sinks
|
|
28
|
+
|
|
29
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
30
|
+
std::shared_ptr<logger> stdout_color_mt(const std::string &logger_name,
|
|
31
|
+
color_mode mode = color_mode::automatic);
|
|
32
|
+
|
|
33
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
34
|
+
std::shared_ptr<logger> stdout_color_st(const std::string &logger_name,
|
|
35
|
+
color_mode mode = color_mode::automatic);
|
|
36
|
+
|
|
37
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
38
|
+
std::shared_ptr<logger> stderr_color_mt(const std::string &logger_name,
|
|
39
|
+
color_mode mode = color_mode::automatic);
|
|
40
|
+
|
|
41
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
42
|
+
std::shared_ptr<logger> stderr_color_st(const std::string &logger_name,
|
|
43
|
+
color_mode mode = color_mode::automatic);
|
|
44
|
+
|
|
45
|
+
} // namespace spdlog
|
|
46
|
+
|
|
47
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
48
|
+
#include "stdout_color_sinks-inl.h"
|
|
49
|
+
#endif
|
|
@@ -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
|
+
#ifndef SPDLOG_HEADER_ONLY
|
|
7
|
+
#include <spdlog/sinks/stdout_sinks.h>
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <spdlog/details/console_globals.h>
|
|
12
|
+
#include <spdlog/pattern_formatter.h>
|
|
13
|
+
#include <spdlog/details/os.h>
|
|
14
|
+
|
|
15
|
+
#ifdef _WIN32
|
|
16
|
+
// under windows using fwrite to non-binary stream results in \r\r\n (see issue #1675)
|
|
17
|
+
// so instead we use ::FileWrite
|
|
18
|
+
#include <spdlog/details/windows_include.h>
|
|
19
|
+
|
|
20
|
+
#ifndef _USING_V110_SDK71_ // fileapi.h doesn't exist in winxp
|
|
21
|
+
#include <fileapi.h> // WriteFile (..)
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#include <io.h> // _get_osfhandle(..)
|
|
25
|
+
#include <stdio.h> // _fileno(..)
|
|
26
|
+
#endif // _WIN32
|
|
27
|
+
|
|
28
|
+
namespace spdlog {
|
|
29
|
+
|
|
30
|
+
namespace sinks {
|
|
31
|
+
|
|
32
|
+
template <typename ConsoleMutex>
|
|
33
|
+
SPDLOG_INLINE stdout_sink_base<ConsoleMutex>::stdout_sink_base(FILE *file)
|
|
34
|
+
: mutex_(ConsoleMutex::mutex()),
|
|
35
|
+
file_(file),
|
|
36
|
+
formatter_(details::make_unique<spdlog::pattern_formatter>()) {
|
|
37
|
+
#ifdef _WIN32
|
|
38
|
+
// get windows handle from the FILE* object
|
|
39
|
+
|
|
40
|
+
handle_ = reinterpret_cast<HANDLE>(::_get_osfhandle(::_fileno(file_)));
|
|
41
|
+
|
|
42
|
+
// don't throw to support cases where no console is attached,
|
|
43
|
+
// and let the log method to do nothing if (handle_ == INVALID_HANDLE_VALUE).
|
|
44
|
+
// throw only if non stdout/stderr target is requested (probably regular file and not console).
|
|
45
|
+
if (handle_ == INVALID_HANDLE_VALUE && file != stdout && file != stderr) {
|
|
46
|
+
throw_spdlog_ex("spdlog::stdout_sink_base: _get_osfhandle() failed", errno);
|
|
47
|
+
}
|
|
48
|
+
#endif // _WIN32
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
template <typename ConsoleMutex>
|
|
52
|
+
SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::log(const details::log_msg &msg) {
|
|
53
|
+
#ifdef _WIN32
|
|
54
|
+
if (handle_ == INVALID_HANDLE_VALUE) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
std::lock_guard<mutex_t> lock(mutex_);
|
|
58
|
+
memory_buf_t formatted;
|
|
59
|
+
formatter_->format(msg, formatted);
|
|
60
|
+
auto size = static_cast<DWORD>(formatted.size());
|
|
61
|
+
DWORD bytes_written = 0;
|
|
62
|
+
bool ok = ::WriteFile(handle_, formatted.data(), size, &bytes_written, nullptr) != 0;
|
|
63
|
+
if (!ok) {
|
|
64
|
+
throw_spdlog_ex("stdout_sink_base: WriteFile() failed. GetLastError(): " +
|
|
65
|
+
std::to_string(::GetLastError()));
|
|
66
|
+
}
|
|
67
|
+
#else
|
|
68
|
+
std::lock_guard<mutex_t> lock(mutex_);
|
|
69
|
+
memory_buf_t formatted;
|
|
70
|
+
formatter_->format(msg, formatted);
|
|
71
|
+
details::os::fwrite_bytes(formatted.data(), formatted.size(), file_);
|
|
72
|
+
#endif // _WIN32
|
|
73
|
+
::fflush(file_); // flush every line to terminal
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <typename ConsoleMutex>
|
|
77
|
+
SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::flush() {
|
|
78
|
+
std::lock_guard<mutex_t> lock(mutex_);
|
|
79
|
+
fflush(file_);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template <typename ConsoleMutex>
|
|
83
|
+
SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_pattern(const std::string &pattern) {
|
|
84
|
+
std::lock_guard<mutex_t> lock(mutex_);
|
|
85
|
+
formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
template <typename ConsoleMutex>
|
|
89
|
+
SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_formatter(
|
|
90
|
+
std::unique_ptr<spdlog::formatter> sink_formatter) {
|
|
91
|
+
std::lock_guard<mutex_t> lock(mutex_);
|
|
92
|
+
formatter_ = std::move(sink_formatter);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// stdout sink
|
|
96
|
+
template <typename ConsoleMutex>
|
|
97
|
+
SPDLOG_INLINE stdout_sink<ConsoleMutex>::stdout_sink()
|
|
98
|
+
: stdout_sink_base<ConsoleMutex>(stdout) {}
|
|
99
|
+
|
|
100
|
+
// stderr sink
|
|
101
|
+
template <typename ConsoleMutex>
|
|
102
|
+
SPDLOG_INLINE stderr_sink<ConsoleMutex>::stderr_sink()
|
|
103
|
+
: stdout_sink_base<ConsoleMutex>(stderr) {}
|
|
104
|
+
|
|
105
|
+
} // namespace sinks
|
|
106
|
+
|
|
107
|
+
// factory methods
|
|
108
|
+
template <typename Factory>
|
|
109
|
+
SPDLOG_INLINE std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name) {
|
|
110
|
+
return Factory::template create<sinks::stdout_sink_mt>(logger_name);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
template <typename Factory>
|
|
114
|
+
SPDLOG_INLINE std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name) {
|
|
115
|
+
return Factory::template create<sinks::stdout_sink_st>(logger_name);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
template <typename Factory>
|
|
119
|
+
SPDLOG_INLINE std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name) {
|
|
120
|
+
return Factory::template create<sinks::stderr_sink_mt>(logger_name);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
template <typename Factory>
|
|
124
|
+
SPDLOG_INLINE std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name) {
|
|
125
|
+
return Factory::template create<sinks::stderr_sink_st>(logger_name);
|
|
126
|
+
}
|
|
127
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,84 @@
|
|
|
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 <cstdio>
|
|
7
|
+
#include <spdlog/details/console_globals.h>
|
|
8
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
9
|
+
#include <spdlog/sinks/sink.h>
|
|
10
|
+
|
|
11
|
+
#ifdef _WIN32
|
|
12
|
+
#include <spdlog/details/windows_include.h>
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
namespace spdlog {
|
|
16
|
+
|
|
17
|
+
namespace sinks {
|
|
18
|
+
|
|
19
|
+
template <typename ConsoleMutex>
|
|
20
|
+
class stdout_sink_base : public sink {
|
|
21
|
+
public:
|
|
22
|
+
using mutex_t = typename ConsoleMutex::mutex_t;
|
|
23
|
+
explicit stdout_sink_base(FILE *file);
|
|
24
|
+
~stdout_sink_base() override = default;
|
|
25
|
+
|
|
26
|
+
stdout_sink_base(const stdout_sink_base &other) = delete;
|
|
27
|
+
stdout_sink_base(stdout_sink_base &&other) = delete;
|
|
28
|
+
|
|
29
|
+
stdout_sink_base &operator=(const stdout_sink_base &other) = delete;
|
|
30
|
+
stdout_sink_base &operator=(stdout_sink_base &&other) = delete;
|
|
31
|
+
|
|
32
|
+
void log(const details::log_msg &msg) override;
|
|
33
|
+
void flush() override;
|
|
34
|
+
void set_pattern(const std::string &pattern) override;
|
|
35
|
+
|
|
36
|
+
void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
|
|
37
|
+
|
|
38
|
+
protected:
|
|
39
|
+
mutex_t &mutex_;
|
|
40
|
+
FILE *file_;
|
|
41
|
+
std::unique_ptr<spdlog::formatter> formatter_;
|
|
42
|
+
#ifdef _WIN32
|
|
43
|
+
HANDLE handle_;
|
|
44
|
+
#endif // WIN32
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
template <typename ConsoleMutex>
|
|
48
|
+
class stdout_sink : public stdout_sink_base<ConsoleMutex> {
|
|
49
|
+
public:
|
|
50
|
+
stdout_sink();
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
template <typename ConsoleMutex>
|
|
54
|
+
class stderr_sink : public stdout_sink_base<ConsoleMutex> {
|
|
55
|
+
public:
|
|
56
|
+
stderr_sink();
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
using stdout_sink_mt = stdout_sink<details::console_mutex>;
|
|
60
|
+
using stdout_sink_st = stdout_sink<details::console_nullmutex>;
|
|
61
|
+
|
|
62
|
+
using stderr_sink_mt = stderr_sink<details::console_mutex>;
|
|
63
|
+
using stderr_sink_st = stderr_sink<details::console_nullmutex>;
|
|
64
|
+
|
|
65
|
+
} // namespace sinks
|
|
66
|
+
|
|
67
|
+
// factory methods
|
|
68
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
69
|
+
std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name);
|
|
70
|
+
|
|
71
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
72
|
+
std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name);
|
|
73
|
+
|
|
74
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
75
|
+
std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name);
|
|
76
|
+
|
|
77
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
78
|
+
std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name);
|
|
79
|
+
|
|
80
|
+
} // namespace spdlog
|
|
81
|
+
|
|
82
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
83
|
+
#include "stdout_sinks-inl.h"
|
|
84
|
+
#endif
|
|
@@ -0,0 +1,104 @@
|
|
|
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 <spdlog/details/null_mutex.h>
|
|
7
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
8
|
+
#include <spdlog/sinks/base_sink.h>
|
|
9
|
+
|
|
10
|
+
#include <array>
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <syslog.h>
|
|
13
|
+
|
|
14
|
+
namespace spdlog {
|
|
15
|
+
namespace sinks {
|
|
16
|
+
/**
|
|
17
|
+
* Sink that write to syslog using the `syscall()` library call.
|
|
18
|
+
*/
|
|
19
|
+
template <typename Mutex>
|
|
20
|
+
class syslog_sink : public base_sink<Mutex> {
|
|
21
|
+
public:
|
|
22
|
+
syslog_sink(std::string ident, int syslog_option, int syslog_facility, bool enable_formatting)
|
|
23
|
+
: enable_formatting_{enable_formatting},
|
|
24
|
+
syslog_levels_{{/* spdlog::level::trace */ LOG_DEBUG,
|
|
25
|
+
/* spdlog::level::debug */ LOG_DEBUG,
|
|
26
|
+
/* spdlog::level::info */ LOG_INFO,
|
|
27
|
+
/* spdlog::level::warn */ LOG_WARNING,
|
|
28
|
+
/* spdlog::level::err */ LOG_ERR,
|
|
29
|
+
/* spdlog::level::critical */ LOG_CRIT,
|
|
30
|
+
/* spdlog::level::off */ LOG_INFO}},
|
|
31
|
+
ident_{std::move(ident)} {
|
|
32
|
+
// set ident to be program name if empty
|
|
33
|
+
::openlog(ident_.empty() ? nullptr : ident_.c_str(), syslog_option, syslog_facility);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
~syslog_sink() override { ::closelog(); }
|
|
37
|
+
|
|
38
|
+
syslog_sink(const syslog_sink &) = delete;
|
|
39
|
+
syslog_sink &operator=(const syslog_sink &) = delete;
|
|
40
|
+
|
|
41
|
+
protected:
|
|
42
|
+
void sink_it_(const details::log_msg &msg) override {
|
|
43
|
+
string_view_t payload;
|
|
44
|
+
memory_buf_t formatted;
|
|
45
|
+
if (enable_formatting_) {
|
|
46
|
+
base_sink<Mutex>::formatter_->format(msg, formatted);
|
|
47
|
+
payload = string_view_t(formatted.data(), formatted.size());
|
|
48
|
+
} else {
|
|
49
|
+
payload = msg.payload;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
size_t length = payload.size();
|
|
53
|
+
// limit to max int
|
|
54
|
+
if (length > static_cast<size_t>(std::numeric_limits<int>::max())) {
|
|
55
|
+
length = static_cast<size_t>(std::numeric_limits<int>::max());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
::syslog(syslog_prio_from_level(msg), "%.*s", static_cast<int>(length), payload.data());
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void flush_() override {}
|
|
62
|
+
bool enable_formatting_ = false;
|
|
63
|
+
|
|
64
|
+
//
|
|
65
|
+
// Simply maps spdlog's log level to syslog priority level.
|
|
66
|
+
//
|
|
67
|
+
virtual int syslog_prio_from_level(const details::log_msg &msg) const {
|
|
68
|
+
return syslog_levels_.at(static_cast<levels_array::size_type>(msg.level));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
using levels_array = std::array<int, 7>;
|
|
72
|
+
levels_array syslog_levels_;
|
|
73
|
+
|
|
74
|
+
private:
|
|
75
|
+
// must store the ident because the man says openlog might use the pointer as
|
|
76
|
+
// is and not a string copy
|
|
77
|
+
const std::string ident_;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
using syslog_sink_mt = syslog_sink<std::mutex>;
|
|
81
|
+
using syslog_sink_st = syslog_sink<details::null_mutex>;
|
|
82
|
+
} // namespace sinks
|
|
83
|
+
|
|
84
|
+
// Create and register a syslog logger
|
|
85
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
86
|
+
inline std::shared_ptr<logger> syslog_logger_mt(const std::string &logger_name,
|
|
87
|
+
const std::string &syslog_ident = "",
|
|
88
|
+
int syslog_option = 0,
|
|
89
|
+
int syslog_facility = LOG_USER,
|
|
90
|
+
bool enable_formatting = false) {
|
|
91
|
+
return Factory::template create<sinks::syslog_sink_mt>(logger_name, syslog_ident, syslog_option,
|
|
92
|
+
syslog_facility, enable_formatting);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
96
|
+
inline std::shared_ptr<logger> syslog_logger_st(const std::string &logger_name,
|
|
97
|
+
const std::string &syslog_ident = "",
|
|
98
|
+
int syslog_option = 0,
|
|
99
|
+
int syslog_facility = LOG_USER,
|
|
100
|
+
bool enable_formatting = false) {
|
|
101
|
+
return Factory::template create<sinks::syslog_sink_st>(logger_name, syslog_ident, syslog_option,
|
|
102
|
+
syslog_facility, enable_formatting);
|
|
103
|
+
}
|
|
104
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Copyright(c) 2019 ZVYAGIN.Alexander@gmail.com
|
|
2
|
+
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include <spdlog/details/null_mutex.h>
|
|
7
|
+
#include <spdlog/details/os.h>
|
|
8
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
9
|
+
#include <spdlog/sinks/base_sink.h>
|
|
10
|
+
|
|
11
|
+
#include <array>
|
|
12
|
+
#ifndef SD_JOURNAL_SUPPRESS_LOCATION
|
|
13
|
+
#define SD_JOURNAL_SUPPRESS_LOCATION
|
|
14
|
+
#endif
|
|
15
|
+
#include <systemd/sd-journal.h>
|
|
16
|
+
|
|
17
|
+
namespace spdlog {
|
|
18
|
+
namespace sinks {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Sink that write to systemd journal using the `sd_journal_send()` library call.
|
|
22
|
+
*/
|
|
23
|
+
template <typename Mutex>
|
|
24
|
+
class systemd_sink : public base_sink<Mutex> {
|
|
25
|
+
public:
|
|
26
|
+
systemd_sink(std::string ident = "", bool enable_formatting = false)
|
|
27
|
+
: ident_{std::move(ident)},
|
|
28
|
+
enable_formatting_{enable_formatting},
|
|
29
|
+
syslog_levels_{{/* spdlog::level::trace */ LOG_DEBUG,
|
|
30
|
+
/* spdlog::level::debug */ LOG_DEBUG,
|
|
31
|
+
/* spdlog::level::info */ LOG_INFO,
|
|
32
|
+
/* spdlog::level::warn */ LOG_WARNING,
|
|
33
|
+
/* spdlog::level::err */ LOG_ERR,
|
|
34
|
+
/* spdlog::level::critical */ LOG_CRIT,
|
|
35
|
+
/* spdlog::level::off */ LOG_INFO}} {}
|
|
36
|
+
|
|
37
|
+
~systemd_sink() override {}
|
|
38
|
+
|
|
39
|
+
systemd_sink(const systemd_sink &) = delete;
|
|
40
|
+
systemd_sink &operator=(const systemd_sink &) = delete;
|
|
41
|
+
|
|
42
|
+
protected:
|
|
43
|
+
const std::string ident_;
|
|
44
|
+
bool enable_formatting_ = false;
|
|
45
|
+
using levels_array = std::array<int, 7>;
|
|
46
|
+
levels_array syslog_levels_;
|
|
47
|
+
|
|
48
|
+
void sink_it_(const details::log_msg &msg) override {
|
|
49
|
+
int err;
|
|
50
|
+
string_view_t payload;
|
|
51
|
+
memory_buf_t formatted;
|
|
52
|
+
if (enable_formatting_) {
|
|
53
|
+
base_sink<Mutex>::formatter_->format(msg, formatted);
|
|
54
|
+
payload = string_view_t(formatted.data(), formatted.size());
|
|
55
|
+
} else {
|
|
56
|
+
payload = msg.payload;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
size_t length = payload.size();
|
|
60
|
+
// limit to max int
|
|
61
|
+
if (length > static_cast<size_t>(std::numeric_limits<int>::max())) {
|
|
62
|
+
length = static_cast<size_t>(std::numeric_limits<int>::max());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const string_view_t syslog_identifier = ident_.empty() ? msg.logger_name : ident_;
|
|
66
|
+
|
|
67
|
+
// Do not send source location if not available
|
|
68
|
+
if (msg.source.empty()) {
|
|
69
|
+
// Note: function call inside '()' to avoid macro expansion
|
|
70
|
+
err = (sd_journal_send)("MESSAGE=%.*s", static_cast<int>(length), payload.data(),
|
|
71
|
+
"PRIORITY=%d", syslog_level(msg.level),
|
|
72
|
+
#ifndef SPDLOG_NO_THREAD_ID
|
|
73
|
+
"TID=%zu", msg.thread_id,
|
|
74
|
+
#endif
|
|
75
|
+
"SYSLOG_IDENTIFIER=%.*s",
|
|
76
|
+
static_cast<int>(syslog_identifier.size()),
|
|
77
|
+
syslog_identifier.data(), nullptr);
|
|
78
|
+
} else {
|
|
79
|
+
err = (sd_journal_send)("MESSAGE=%.*s", static_cast<int>(length), payload.data(),
|
|
80
|
+
"PRIORITY=%d", syslog_level(msg.level),
|
|
81
|
+
#ifndef SPDLOG_NO_THREAD_ID
|
|
82
|
+
"TID=%zu", msg.thread_id,
|
|
83
|
+
#endif
|
|
84
|
+
"SYSLOG_IDENTIFIER=%.*s",
|
|
85
|
+
static_cast<int>(syslog_identifier.size()),
|
|
86
|
+
syslog_identifier.data(), "CODE_FILE=%s", msg.source.filename,
|
|
87
|
+
"CODE_LINE=%d", msg.source.line, "CODE_FUNC=%s",
|
|
88
|
+
msg.source.funcname, nullptr);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (err) {
|
|
92
|
+
throw_spdlog_ex("Failed writing to systemd", errno);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
int syslog_level(level::level_enum l) {
|
|
97
|
+
return syslog_levels_.at(static_cast<levels_array::size_type>(l));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void flush_() override {}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
using systemd_sink_mt = systemd_sink<std::mutex>;
|
|
104
|
+
using systemd_sink_st = systemd_sink<details::null_mutex>;
|
|
105
|
+
} // namespace sinks
|
|
106
|
+
|
|
107
|
+
// Create and register a syslog logger
|
|
108
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
109
|
+
inline std::shared_ptr<logger> systemd_logger_mt(const std::string &logger_name,
|
|
110
|
+
const std::string &ident = "",
|
|
111
|
+
bool enable_formatting = false) {
|
|
112
|
+
return Factory::template create<sinks::systemd_sink_mt>(logger_name, ident, enable_formatting);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
116
|
+
inline std::shared_ptr<logger> systemd_logger_st(const std::string &logger_name,
|
|
117
|
+
const std::string &ident = "",
|
|
118
|
+
bool enable_formatting = false) {
|
|
119
|
+
return Factory::template create<sinks::systemd_sink_st>(logger_name, ident, enable_formatting);
|
|
120
|
+
}
|
|
121
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,75 @@
|
|
|
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 <spdlog/common.h>
|
|
7
|
+
#include <spdlog/details/null_mutex.h>
|
|
8
|
+
#include <spdlog/sinks/base_sink.h>
|
|
9
|
+
#ifdef _WIN32
|
|
10
|
+
#include <spdlog/details/tcp_client-windows.h>
|
|
11
|
+
#else
|
|
12
|
+
#include <spdlog/details/tcp_client.h>
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
#include <chrono>
|
|
16
|
+
#include <functional>
|
|
17
|
+
#include <mutex>
|
|
18
|
+
#include <string>
|
|
19
|
+
|
|
20
|
+
#pragma once
|
|
21
|
+
|
|
22
|
+
// Simple tcp client sink
|
|
23
|
+
// Connects to remote address and send the formatted log.
|
|
24
|
+
// Will attempt to reconnect if connection drops.
|
|
25
|
+
// If more complicated behaviour is needed (i.e get responses), you can inherit it and override the
|
|
26
|
+
// sink_it_ method.
|
|
27
|
+
|
|
28
|
+
namespace spdlog {
|
|
29
|
+
namespace sinks {
|
|
30
|
+
|
|
31
|
+
struct tcp_sink_config {
|
|
32
|
+
std::string server_host;
|
|
33
|
+
int server_port;
|
|
34
|
+
bool lazy_connect = false; // if true connect on first log call instead of on construction
|
|
35
|
+
|
|
36
|
+
tcp_sink_config(std::string host, int port)
|
|
37
|
+
: server_host{std::move(host)},
|
|
38
|
+
server_port{port} {}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
template <typename Mutex>
|
|
42
|
+
class tcp_sink : public spdlog::sinks::base_sink<Mutex> {
|
|
43
|
+
public:
|
|
44
|
+
// connect to tcp host/port or throw if failed
|
|
45
|
+
// host can be hostname or ip address
|
|
46
|
+
|
|
47
|
+
explicit tcp_sink(tcp_sink_config sink_config)
|
|
48
|
+
: config_{std::move(sink_config)} {
|
|
49
|
+
if (!config_.lazy_connect) {
|
|
50
|
+
this->client_.connect(config_.server_host, config_.server_port);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
~tcp_sink() override = default;
|
|
55
|
+
|
|
56
|
+
protected:
|
|
57
|
+
void sink_it_(const spdlog::details::log_msg &msg) override {
|
|
58
|
+
spdlog::memory_buf_t formatted;
|
|
59
|
+
spdlog::sinks::base_sink<Mutex>::formatter_->format(msg, formatted);
|
|
60
|
+
if (!client_.is_connected()) {
|
|
61
|
+
client_.connect(config_.server_host, config_.server_port);
|
|
62
|
+
}
|
|
63
|
+
client_.send(formatted.data(), formatted.size());
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void flush_() override {}
|
|
67
|
+
tcp_sink_config config_;
|
|
68
|
+
details::tcp_client client_;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
using tcp_sink_mt = tcp_sink<std::mutex>;
|
|
72
|
+
using tcp_sink_st = tcp_sink<spdlog::details::null_mutex>;
|
|
73
|
+
|
|
74
|
+
} // namespace sinks
|
|
75
|
+
} // namespace spdlog
|