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,66 @@
|
|
|
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/file_helper.h>
|
|
7
|
+
#include <spdlog/details/null_mutex.h>
|
|
8
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
9
|
+
#include <spdlog/sinks/base_sink.h>
|
|
10
|
+
|
|
11
|
+
#include <mutex>
|
|
12
|
+
#include <string>
|
|
13
|
+
|
|
14
|
+
namespace spdlog {
|
|
15
|
+
namespace sinks {
|
|
16
|
+
/*
|
|
17
|
+
* Trivial file sink with single file as target
|
|
18
|
+
*/
|
|
19
|
+
template <typename Mutex>
|
|
20
|
+
class basic_file_sink final : public base_sink<Mutex> {
|
|
21
|
+
public:
|
|
22
|
+
explicit basic_file_sink(const filename_t &filename,
|
|
23
|
+
bool truncate = false,
|
|
24
|
+
const file_event_handlers &event_handlers = {});
|
|
25
|
+
const filename_t &filename() const;
|
|
26
|
+
void truncate();
|
|
27
|
+
|
|
28
|
+
protected:
|
|
29
|
+
void sink_it_(const details::log_msg &msg) override;
|
|
30
|
+
void flush_() override;
|
|
31
|
+
|
|
32
|
+
private:
|
|
33
|
+
details::file_helper file_helper_;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
using basic_file_sink_mt = basic_file_sink<std::mutex>;
|
|
37
|
+
using basic_file_sink_st = basic_file_sink<details::null_mutex>;
|
|
38
|
+
|
|
39
|
+
} // namespace sinks
|
|
40
|
+
|
|
41
|
+
//
|
|
42
|
+
// factory functions
|
|
43
|
+
//
|
|
44
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
45
|
+
inline std::shared_ptr<logger> basic_logger_mt(const std::string &logger_name,
|
|
46
|
+
const filename_t &filename,
|
|
47
|
+
bool truncate = false,
|
|
48
|
+
const file_event_handlers &event_handlers = {}) {
|
|
49
|
+
return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate,
|
|
50
|
+
event_handlers);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
54
|
+
inline std::shared_ptr<logger> basic_logger_st(const std::string &logger_name,
|
|
55
|
+
const filename_t &filename,
|
|
56
|
+
bool truncate = false,
|
|
57
|
+
const file_event_handlers &event_handlers = {}) {
|
|
58
|
+
return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate,
|
|
59
|
+
event_handlers);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
} // namespace spdlog
|
|
63
|
+
|
|
64
|
+
#ifdef SPDLOG_HEADER_ONLY
|
|
65
|
+
#include "basic_file_sink-inl.h"
|
|
66
|
+
#endif
|
|
@@ -0,0 +1,56 @@
|
|
|
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 <mutex>
|
|
11
|
+
#include <string>
|
|
12
|
+
|
|
13
|
+
namespace spdlog {
|
|
14
|
+
|
|
15
|
+
// callbacks type
|
|
16
|
+
typedef std::function<void(const details::log_msg &msg)> custom_log_callback;
|
|
17
|
+
|
|
18
|
+
namespace sinks {
|
|
19
|
+
/*
|
|
20
|
+
* Trivial callback sink, gets a callback function and calls it on each log
|
|
21
|
+
*/
|
|
22
|
+
template <typename Mutex>
|
|
23
|
+
class callback_sink final : public base_sink<Mutex> {
|
|
24
|
+
public:
|
|
25
|
+
explicit callback_sink(const custom_log_callback &callback)
|
|
26
|
+
: callback_{callback} {}
|
|
27
|
+
|
|
28
|
+
protected:
|
|
29
|
+
void sink_it_(const details::log_msg &msg) override { callback_(msg); }
|
|
30
|
+
void flush_() override {}
|
|
31
|
+
|
|
32
|
+
private:
|
|
33
|
+
custom_log_callback callback_;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
using callback_sink_mt = callback_sink<std::mutex>;
|
|
37
|
+
using callback_sink_st = callback_sink<details::null_mutex>;
|
|
38
|
+
|
|
39
|
+
} // namespace sinks
|
|
40
|
+
|
|
41
|
+
//
|
|
42
|
+
// factory functions
|
|
43
|
+
//
|
|
44
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
45
|
+
inline std::shared_ptr<logger> callback_logger_mt(const std::string &logger_name,
|
|
46
|
+
const custom_log_callback &callback) {
|
|
47
|
+
return Factory::template create<sinks::callback_sink_mt>(logger_name, callback);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
51
|
+
inline std::shared_ptr<logger> callback_logger_st(const std::string &logger_name,
|
|
52
|
+
const custom_log_callback &callback) {
|
|
53
|
+
return Factory::template create<sinks::callback_sink_st>(logger_name, callback);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,254 @@
|
|
|
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/circular_q.h>
|
|
8
|
+
#include <spdlog/details/file_helper.h>
|
|
9
|
+
#include <spdlog/details/null_mutex.h>
|
|
10
|
+
#include <spdlog/details/os.h>
|
|
11
|
+
#include <spdlog/details/synchronous_factory.h>
|
|
12
|
+
#include <spdlog/fmt/chrono.h>
|
|
13
|
+
#include <spdlog/fmt/fmt.h>
|
|
14
|
+
#include <spdlog/sinks/base_sink.h>
|
|
15
|
+
|
|
16
|
+
#include <chrono>
|
|
17
|
+
#include <cstdio>
|
|
18
|
+
#include <iomanip>
|
|
19
|
+
#include <mutex>
|
|
20
|
+
#include <sstream>
|
|
21
|
+
#include <string>
|
|
22
|
+
|
|
23
|
+
namespace spdlog {
|
|
24
|
+
namespace sinks {
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* Generator of daily log file names in format basename.YYYY-MM-DD.ext
|
|
28
|
+
*/
|
|
29
|
+
struct daily_filename_calculator {
|
|
30
|
+
// Create filename for the form basename.YYYY-MM-DD
|
|
31
|
+
static filename_t calc_filename(const filename_t &filename, const tm &now_tm) {
|
|
32
|
+
filename_t basename, ext;
|
|
33
|
+
std::tie(basename, ext) = details::file_helper::split_by_extension(filename);
|
|
34
|
+
return fmt_lib::format(SPDLOG_FMT_STRING(SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}{}")),
|
|
35
|
+
basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday,
|
|
36
|
+
ext);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* Generator of daily log file names with strftime format.
|
|
42
|
+
* Usages:
|
|
43
|
+
* auto sink =
|
|
44
|
+
* std::make_shared<spdlog::sinks::daily_file_format_sink_mt>("myapp-%Y-%m-%d:%H:%M:%S.log", hour,
|
|
45
|
+
* minute);" auto logger = spdlog::daily_logger_format_mt("loggername, "myapp-%Y-%m-%d:%X.log",
|
|
46
|
+
* hour, minute)"
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
struct daily_filename_format_calculator {
|
|
50
|
+
static filename_t calc_filename(const filename_t &file_path, const tm &now_tm) {
|
|
51
|
+
#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES)
|
|
52
|
+
std::wstringstream stream;
|
|
53
|
+
#else
|
|
54
|
+
std::stringstream stream;
|
|
55
|
+
#endif
|
|
56
|
+
stream << std::put_time(&now_tm, file_path.c_str());
|
|
57
|
+
return stream.str();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
* Rotating file sink based on date.
|
|
63
|
+
* If truncate != false , the created file will be truncated.
|
|
64
|
+
* If max_files > 0, retain only the last max_files and delete previous.
|
|
65
|
+
* Note that old log files from previous executions will not be deleted by this class,
|
|
66
|
+
* rotation and deletion is only applied while the program is running.
|
|
67
|
+
*/
|
|
68
|
+
template <typename Mutex, typename FileNameCalc = daily_filename_calculator>
|
|
69
|
+
class daily_file_sink final : public base_sink<Mutex> {
|
|
70
|
+
public:
|
|
71
|
+
// create daily file sink which rotates on given time
|
|
72
|
+
daily_file_sink(filename_t base_filename,
|
|
73
|
+
int rotation_hour,
|
|
74
|
+
int rotation_minute,
|
|
75
|
+
bool truncate = false,
|
|
76
|
+
uint16_t max_files = 0,
|
|
77
|
+
const file_event_handlers &event_handlers = {})
|
|
78
|
+
: base_filename_(std::move(base_filename)),
|
|
79
|
+
rotation_h_(rotation_hour),
|
|
80
|
+
rotation_m_(rotation_minute),
|
|
81
|
+
file_helper_{event_handlers},
|
|
82
|
+
truncate_(truncate),
|
|
83
|
+
max_files_(max_files),
|
|
84
|
+
filenames_q_() {
|
|
85
|
+
if (rotation_hour < 0 || rotation_hour > 23 || rotation_minute < 0 ||
|
|
86
|
+
rotation_minute > 59) {
|
|
87
|
+
throw_spdlog_ex("daily_file_sink: Invalid rotation time in ctor");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
auto now = log_clock::now();
|
|
91
|
+
auto filename = FileNameCalc::calc_filename(base_filename_, now_tm(now));
|
|
92
|
+
file_helper_.open(filename, truncate_);
|
|
93
|
+
rotation_tp_ = next_rotation_tp_();
|
|
94
|
+
|
|
95
|
+
if (max_files_ > 0) {
|
|
96
|
+
init_filenames_q_();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
filename_t filename() {
|
|
101
|
+
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
|
102
|
+
return file_helper_.filename();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
protected:
|
|
106
|
+
void sink_it_(const details::log_msg &msg) override {
|
|
107
|
+
auto time = msg.time;
|
|
108
|
+
bool should_rotate = time >= rotation_tp_;
|
|
109
|
+
if (should_rotate) {
|
|
110
|
+
auto filename = FileNameCalc::calc_filename(base_filename_, now_tm(time));
|
|
111
|
+
file_helper_.open(filename, truncate_);
|
|
112
|
+
rotation_tp_ = next_rotation_tp_();
|
|
113
|
+
}
|
|
114
|
+
memory_buf_t formatted;
|
|
115
|
+
base_sink<Mutex>::formatter_->format(msg, formatted);
|
|
116
|
+
file_helper_.write(formatted);
|
|
117
|
+
|
|
118
|
+
// Do the cleaning only at the end because it might throw on failure.
|
|
119
|
+
if (should_rotate && max_files_ > 0) {
|
|
120
|
+
delete_old_();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
void flush_() override { file_helper_.flush(); }
|
|
125
|
+
|
|
126
|
+
private:
|
|
127
|
+
void init_filenames_q_() {
|
|
128
|
+
using details::os::path_exists;
|
|
129
|
+
|
|
130
|
+
filenames_q_ = details::circular_q<filename_t>(static_cast<size_t>(max_files_));
|
|
131
|
+
std::vector<filename_t> filenames;
|
|
132
|
+
auto now = log_clock::now();
|
|
133
|
+
while (filenames.size() < max_files_) {
|
|
134
|
+
auto filename = FileNameCalc::calc_filename(base_filename_, now_tm(now));
|
|
135
|
+
if (!path_exists(filename)) {
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
filenames.emplace_back(filename);
|
|
139
|
+
now -= std::chrono::hours(24);
|
|
140
|
+
}
|
|
141
|
+
for (auto iter = filenames.rbegin(); iter != filenames.rend(); ++iter) {
|
|
142
|
+
filenames_q_.push_back(std::move(*iter));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
tm now_tm(log_clock::time_point tp) {
|
|
147
|
+
time_t tnow = log_clock::to_time_t(tp);
|
|
148
|
+
return spdlog::details::os::localtime(tnow);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
log_clock::time_point next_rotation_tp_() {
|
|
152
|
+
auto now = log_clock::now();
|
|
153
|
+
tm date = now_tm(now);
|
|
154
|
+
date.tm_hour = rotation_h_;
|
|
155
|
+
date.tm_min = rotation_m_;
|
|
156
|
+
date.tm_sec = 0;
|
|
157
|
+
auto rotation_time = log_clock::from_time_t(std::mktime(&date));
|
|
158
|
+
if (rotation_time > now) {
|
|
159
|
+
return rotation_time;
|
|
160
|
+
}
|
|
161
|
+
return {rotation_time + std::chrono::hours(24)};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Delete the file N rotations ago.
|
|
165
|
+
// Throw spdlog_ex on failure to delete the old file.
|
|
166
|
+
void delete_old_() {
|
|
167
|
+
using details::os::filename_to_str;
|
|
168
|
+
using details::os::remove_if_exists;
|
|
169
|
+
|
|
170
|
+
filename_t current_file = file_helper_.filename();
|
|
171
|
+
if (filenames_q_.full()) {
|
|
172
|
+
auto old_filename = std::move(filenames_q_.front());
|
|
173
|
+
filenames_q_.pop_front();
|
|
174
|
+
bool ok = remove_if_exists(old_filename) == 0;
|
|
175
|
+
if (!ok) {
|
|
176
|
+
filenames_q_.push_back(std::move(current_file));
|
|
177
|
+
throw_spdlog_ex("Failed removing daily file " + filename_to_str(old_filename),
|
|
178
|
+
errno);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
filenames_q_.push_back(std::move(current_file));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
filename_t base_filename_;
|
|
185
|
+
int rotation_h_;
|
|
186
|
+
int rotation_m_;
|
|
187
|
+
log_clock::time_point rotation_tp_;
|
|
188
|
+
details::file_helper file_helper_;
|
|
189
|
+
bool truncate_;
|
|
190
|
+
uint16_t max_files_;
|
|
191
|
+
details::circular_q<filename_t> filenames_q_;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
using daily_file_sink_mt = daily_file_sink<std::mutex>;
|
|
195
|
+
using daily_file_sink_st = daily_file_sink<details::null_mutex>;
|
|
196
|
+
using daily_file_format_sink_mt = daily_file_sink<std::mutex, daily_filename_format_calculator>;
|
|
197
|
+
using daily_file_format_sink_st =
|
|
198
|
+
daily_file_sink<details::null_mutex, daily_filename_format_calculator>;
|
|
199
|
+
|
|
200
|
+
} // namespace sinks
|
|
201
|
+
|
|
202
|
+
//
|
|
203
|
+
// factory functions
|
|
204
|
+
//
|
|
205
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
206
|
+
inline std::shared_ptr<logger> daily_logger_mt(const std::string &logger_name,
|
|
207
|
+
const filename_t &filename,
|
|
208
|
+
int hour = 0,
|
|
209
|
+
int minute = 0,
|
|
210
|
+
bool truncate = false,
|
|
211
|
+
uint16_t max_files = 0,
|
|
212
|
+
const file_event_handlers &event_handlers = {}) {
|
|
213
|
+
return Factory::template create<sinks::daily_file_sink_mt>(logger_name, filename, hour, minute,
|
|
214
|
+
truncate, max_files, event_handlers);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
218
|
+
inline std::shared_ptr<logger> daily_logger_format_mt(
|
|
219
|
+
const std::string &logger_name,
|
|
220
|
+
const filename_t &filename,
|
|
221
|
+
int hour = 0,
|
|
222
|
+
int minute = 0,
|
|
223
|
+
bool truncate = false,
|
|
224
|
+
uint16_t max_files = 0,
|
|
225
|
+
const file_event_handlers &event_handlers = {}) {
|
|
226
|
+
return Factory::template create<sinks::daily_file_format_sink_mt>(
|
|
227
|
+
logger_name, filename, hour, minute, truncate, max_files, event_handlers);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
231
|
+
inline std::shared_ptr<logger> daily_logger_st(const std::string &logger_name,
|
|
232
|
+
const filename_t &filename,
|
|
233
|
+
int hour = 0,
|
|
234
|
+
int minute = 0,
|
|
235
|
+
bool truncate = false,
|
|
236
|
+
uint16_t max_files = 0,
|
|
237
|
+
const file_event_handlers &event_handlers = {}) {
|
|
238
|
+
return Factory::template create<sinks::daily_file_sink_st>(logger_name, filename, hour, minute,
|
|
239
|
+
truncate, max_files, event_handlers);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
template <typename Factory = spdlog::synchronous_factory>
|
|
243
|
+
inline std::shared_ptr<logger> daily_logger_format_st(
|
|
244
|
+
const std::string &logger_name,
|
|
245
|
+
const filename_t &filename,
|
|
246
|
+
int hour = 0,
|
|
247
|
+
int minute = 0,
|
|
248
|
+
bool truncate = false,
|
|
249
|
+
uint16_t max_files = 0,
|
|
250
|
+
const file_event_handlers &event_handlers = {}) {
|
|
251
|
+
return Factory::template create<sinks::daily_file_format_sink_st>(
|
|
252
|
+
logger_name, filename, hour, minute, truncate, max_files, event_handlers);
|
|
253
|
+
}
|
|
254
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,81 @@
|
|
|
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 "base_sink.h"
|
|
7
|
+
#include <spdlog/details/log_msg.h>
|
|
8
|
+
#include <spdlog/details/null_mutex.h>
|
|
9
|
+
#include <spdlog/pattern_formatter.h>
|
|
10
|
+
|
|
11
|
+
#include <algorithm>
|
|
12
|
+
#include <memory>
|
|
13
|
+
#include <mutex>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
// Distribution sink (mux). Stores a vector of sinks which get called when log
|
|
17
|
+
// is called
|
|
18
|
+
|
|
19
|
+
namespace spdlog {
|
|
20
|
+
namespace sinks {
|
|
21
|
+
|
|
22
|
+
template <typename Mutex>
|
|
23
|
+
class dist_sink : public base_sink<Mutex> {
|
|
24
|
+
public:
|
|
25
|
+
dist_sink() = default;
|
|
26
|
+
explicit dist_sink(std::vector<std::shared_ptr<sink>> sinks)
|
|
27
|
+
: sinks_(sinks) {}
|
|
28
|
+
|
|
29
|
+
dist_sink(const dist_sink &) = delete;
|
|
30
|
+
dist_sink &operator=(const dist_sink &) = delete;
|
|
31
|
+
|
|
32
|
+
void add_sink(std::shared_ptr<sink> sub_sink) {
|
|
33
|
+
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
|
34
|
+
sinks_.push_back(sub_sink);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void remove_sink(std::shared_ptr<sink> sub_sink) {
|
|
38
|
+
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
|
39
|
+
sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sub_sink), sinks_.end());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void set_sinks(std::vector<std::shared_ptr<sink>> sinks) {
|
|
43
|
+
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
|
44
|
+
sinks_ = std::move(sinks);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
std::vector<std::shared_ptr<sink>> &sinks() { return sinks_; }
|
|
48
|
+
|
|
49
|
+
protected:
|
|
50
|
+
void sink_it_(const details::log_msg &msg) override {
|
|
51
|
+
for (auto &sub_sink : sinks_) {
|
|
52
|
+
if (sub_sink->should_log(msg.level)) {
|
|
53
|
+
sub_sink->log(msg);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void flush_() override {
|
|
59
|
+
for (auto &sub_sink : sinks_) {
|
|
60
|
+
sub_sink->flush();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void set_pattern_(const std::string &pattern) override {
|
|
65
|
+
set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override {
|
|
69
|
+
base_sink<Mutex>::formatter_ = std::move(sink_formatter);
|
|
70
|
+
for (auto &sub_sink : sinks_) {
|
|
71
|
+
sub_sink->set_formatter(base_sink<Mutex>::formatter_->clone());
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
std::vector<std::shared_ptr<sink>> sinks_;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
using dist_sink_mt = dist_sink<std::mutex>;
|
|
78
|
+
using dist_sink_st = dist_sink<details::null_mutex>;
|
|
79
|
+
|
|
80
|
+
} // namespace sinks
|
|
81
|
+
} // namespace spdlog
|
|
@@ -0,0 +1,91 @@
|
|
|
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 "dist_sink.h"
|
|
7
|
+
#include <spdlog/details/log_msg.h>
|
|
8
|
+
#include <spdlog/details/null_mutex.h>
|
|
9
|
+
|
|
10
|
+
#include <chrono>
|
|
11
|
+
#include <cstdio>
|
|
12
|
+
#include <mutex>
|
|
13
|
+
#include <string>
|
|
14
|
+
|
|
15
|
+
// Duplicate message removal sink.
|
|
16
|
+
// Skip the message if previous one is identical and less than "max_skip_duration" have passed
|
|
17
|
+
//
|
|
18
|
+
// Example:
|
|
19
|
+
//
|
|
20
|
+
// #include <spdlog/sinks/dup_filter_sink.h>
|
|
21
|
+
//
|
|
22
|
+
// int main() {
|
|
23
|
+
// auto dup_filter = std::make_shared<dup_filter_sink_st>(std::chrono::seconds(5),
|
|
24
|
+
// level::info); dup_filter->add_sink(std::make_shared<stdout_color_sink_mt>());
|
|
25
|
+
// spdlog::logger l("logger", dup_filter);
|
|
26
|
+
// l.info("Hello");
|
|
27
|
+
// l.info("Hello");
|
|
28
|
+
// l.info("Hello");
|
|
29
|
+
// l.info("Different Hello");
|
|
30
|
+
// }
|
|
31
|
+
//
|
|
32
|
+
// Will produce:
|
|
33
|
+
// [2019-06-25 17:50:56.511] [logger] [info] Hello
|
|
34
|
+
// [2019-06-25 17:50:56.512] [logger] [info] Skipped 3 duplicate messages..
|
|
35
|
+
// [2019-06-25 17:50:56.512] [logger] [info] Different Hello
|
|
36
|
+
|
|
37
|
+
namespace spdlog {
|
|
38
|
+
namespace sinks {
|
|
39
|
+
template <typename Mutex>
|
|
40
|
+
class dup_filter_sink : public dist_sink<Mutex> {
|
|
41
|
+
public:
|
|
42
|
+
template <class Rep, class Period>
|
|
43
|
+
explicit dup_filter_sink(std::chrono::duration<Rep, Period> max_skip_duration)
|
|
44
|
+
: max_skip_duration_{max_skip_duration} {}
|
|
45
|
+
|
|
46
|
+
protected:
|
|
47
|
+
std::chrono::microseconds max_skip_duration_;
|
|
48
|
+
log_clock::time_point last_msg_time_;
|
|
49
|
+
std::string last_msg_payload_;
|
|
50
|
+
size_t skip_counter_ = 0;
|
|
51
|
+
level::level_enum skipped_msg_log_level_ = spdlog::level::level_enum::off;
|
|
52
|
+
|
|
53
|
+
void sink_it_(const details::log_msg &msg) override {
|
|
54
|
+
bool filtered = filter_(msg);
|
|
55
|
+
if (!filtered) {
|
|
56
|
+
skip_counter_ += 1;
|
|
57
|
+
skipped_msg_log_level_ = msg.level;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// log the "skipped.." message
|
|
62
|
+
if (skip_counter_ > 0) {
|
|
63
|
+
char buf[64];
|
|
64
|
+
auto msg_size = ::snprintf(buf, sizeof(buf), "Skipped %u duplicate messages..",
|
|
65
|
+
static_cast<unsigned>(skip_counter_));
|
|
66
|
+
if (msg_size > 0 && static_cast<size_t>(msg_size) < sizeof(buf)) {
|
|
67
|
+
details::log_msg skipped_msg{msg.source, msg.logger_name, skipped_msg_log_level_,
|
|
68
|
+
string_view_t{buf, static_cast<size_t>(msg_size)}};
|
|
69
|
+
dist_sink<Mutex>::sink_it_(skipped_msg);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// log current message
|
|
74
|
+
dist_sink<Mutex>::sink_it_(msg);
|
|
75
|
+
last_msg_time_ = msg.time;
|
|
76
|
+
skip_counter_ = 0;
|
|
77
|
+
last_msg_payload_.assign(msg.payload.data(), msg.payload.data() + msg.payload.size());
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// return whether the log msg should be displayed (true) or skipped (false)
|
|
81
|
+
bool filter_(const details::log_msg &msg) {
|
|
82
|
+
auto filter_duration = msg.time - last_msg_time_;
|
|
83
|
+
return (filter_duration > max_skip_duration_) || (msg.payload != last_msg_payload_);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
using dup_filter_sink_mt = dup_filter_sink<std::mutex>;
|
|
88
|
+
using dup_filter_sink_st = dup_filter_sink<details::null_mutex>;
|
|
89
|
+
|
|
90
|
+
} // namespace sinks
|
|
91
|
+
} // namespace spdlog
|