mqt-core 3.3.2__cp313-cp313t-win_amd64.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.
Files changed (537) hide show
  1. mqt/core/__init__.py +89 -0
  2. mqt/core/__main__.py +55 -0
  3. mqt/core/_commands.py +52 -0
  4. mqt/core/_compat/__init__.py +11 -0
  5. mqt/core/_compat/typing.py +29 -0
  6. mqt/core/_version.py +34 -0
  7. mqt/core/_version.pyi +12 -0
  8. mqt/core/bin/mqt-core-algorithms.dll +0 -0
  9. mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
  10. mqt/core/bin/mqt-core-dd.dll +0 -0
  11. mqt/core/bin/mqt-core-ds.dll +0 -0
  12. mqt/core/bin/mqt-core-fomac.dll +0 -0
  13. mqt/core/bin/mqt-core-ir.dll +0 -0
  14. mqt/core/bin/mqt-core-na-fomac.dll +0 -0
  15. mqt/core/bin/mqt-core-na.dll +0 -0
  16. mqt/core/bin/mqt-core-qasm.dll +0 -0
  17. mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
  18. mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
  19. mqt/core/bin/mqt-core-zx.dll +0 -0
  20. mqt/core/dd.cp313t-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp313t-win_amd64.pyd +0 -0
  24. mqt/core/fomac.pyi +125 -0
  25. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  26. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  27. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  28. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  29. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  30. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  31. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  32. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  33. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  34. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  35. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  36. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  37. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  38. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  39. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  40. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  41. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  42. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  43. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  44. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  45. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  46. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  47. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  63. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  64. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  65. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  66. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  67. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  68. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  69. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  70. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  71. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  72. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  73. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  74. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  75. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  76. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  77. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  78. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  79. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  80. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  81. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  82. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  83. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  84. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  85. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  86. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  87. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  88. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  89. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  90. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  91. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  92. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  93. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  94. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  95. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  96. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  97. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  98. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  99. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  100. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  101. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  102. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  103. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  104. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  105. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  106. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  107. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  108. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  109. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  110. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  111. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  112. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  113. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  114. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  115. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  116. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  117. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  118. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  119. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  120. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  121. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  122. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  123. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  124. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  125. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  126. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  127. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  128. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  203. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  204. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  205. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  206. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  207. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  208. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  209. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  210. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  211. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  212. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  213. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  214. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  215. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  216. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  217. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  218. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  219. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  220. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  221. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  222. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  223. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  224. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  225. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  226. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  227. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  228. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  229. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  230. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  231. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  232. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  233. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  234. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  235. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  236. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  237. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  238. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  239. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  240. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  241. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  242. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  243. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  244. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  245. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  246. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  247. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  248. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  249. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  250. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  251. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  252. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  253. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  254. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  255. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  256. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  257. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  258. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  259. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  260. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  261. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
  262. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  263. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  264. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  265. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  266. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  267. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  268. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  269. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  270. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  271. mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
  272. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  273. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  274. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  275. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  276. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  277. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  278. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  279. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  280. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  281. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  282. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  283. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  284. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  285. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  286. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  287. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  288. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  289. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  290. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  291. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  292. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  293. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  294. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  295. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  296. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  297. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  298. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  299. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  300. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  301. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  302. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  303. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  304. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  305. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  306. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  307. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  308. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  309. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  310. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  311. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  312. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  313. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  314. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  315. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  316. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  317. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  318. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  319. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  320. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  321. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  322. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  323. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  324. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  325. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  326. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  327. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  328. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  329. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  330. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  331. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  332. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  333. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  334. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  335. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  336. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  337. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  338. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  339. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  340. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  341. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  342. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  343. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  344. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  345. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  346. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  347. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  348. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  349. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  350. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  351. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  352. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  353. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  354. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  355. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  356. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  357. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  358. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  359. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  360. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  361. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  362. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  363. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  364. mqt/core/include/nlohmann/json.hpp +5306 -0
  365. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  366. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  367. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  368. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  369. mqt/core/include/qdmi/qdmi/client.h +990 -0
  370. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  371. mqt/core/include/qdmi/qdmi/device.h +602 -0
  372. mqt/core/include/qdmi/qdmi/types.h +78 -0
  373. mqt/core/include/spdlog/async.h +99 -0
  374. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  375. mqt/core/include/spdlog/async_logger.h +74 -0
  376. mqt/core/include/spdlog/cfg/argv.h +40 -0
  377. mqt/core/include/spdlog/cfg/env.h +36 -0
  378. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  379. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  380. mqt/core/include/spdlog/common-inl.h +68 -0
  381. mqt/core/include/spdlog/common.h +406 -0
  382. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  383. mqt/core/include/spdlog/details/backtracer.h +45 -0
  384. mqt/core/include/spdlog/details/circular_q.h +115 -0
  385. mqt/core/include/spdlog/details/console_globals.h +28 -0
  386. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  387. mqt/core/include/spdlog/details/file_helper.h +61 -0
  388. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  389. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  390. mqt/core/include/spdlog/details/log_msg.h +40 -0
  391. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  392. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  393. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  394. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  395. mqt/core/include/spdlog/details/os-inl.h +606 -0
  396. mqt/core/include/spdlog/details/os.h +127 -0
  397. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  398. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  399. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  400. mqt/core/include/spdlog/details/registry.h +131 -0
  401. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  402. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  403. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  404. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  405. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  406. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  407. mqt/core/include/spdlog/details/udp_client.h +81 -0
  408. mqt/core/include/spdlog/details/windows_include.h +11 -0
  409. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  410. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  411. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  412. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  413. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  414. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  415. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  416. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  417. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  418. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  419. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  420. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  421. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  422. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  423. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  424. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  425. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  426. mqt/core/include/spdlog/fmt/compile.h +23 -0
  427. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  428. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  429. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  430. mqt/core/include/spdlog/fmt/std.h +24 -0
  431. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  432. mqt/core/include/spdlog/formatter.h +17 -0
  433. mqt/core/include/spdlog/fwd.h +18 -0
  434. mqt/core/include/spdlog/logger-inl.h +198 -0
  435. mqt/core/include/spdlog/logger.h +379 -0
  436. mqt/core/include/spdlog/mdc.h +52 -0
  437. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  438. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  439. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  440. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  441. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  442. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  443. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  444. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  445. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  446. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  447. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  448. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  449. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  450. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  451. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  452. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  453. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  454. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  455. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  456. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  457. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  458. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  459. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  460. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  461. mqt/core/include/spdlog/sinks/sink.h +34 -0
  462. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  463. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  464. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  465. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  466. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  467. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  468. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  469. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  470. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  471. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  472. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  473. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  474. mqt/core/include/spdlog/spdlog.h +357 -0
  475. mqt/core/include/spdlog/stopwatch.h +66 -0
  476. mqt/core/include/spdlog/tweakme.h +148 -0
  477. mqt/core/include/spdlog/version.h +11 -0
  478. mqt/core/ir/__init__.pyi +2078 -0
  479. mqt/core/ir/operations.pyi +1011 -0
  480. mqt/core/ir/registers.pyi +91 -0
  481. mqt/core/ir/symbolic.pyi +177 -0
  482. mqt/core/ir.cp313t-win_amd64.pyd +0 -0
  483. mqt/core/lib/mqt-core-algorithms.lib +0 -0
  484. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  485. mqt/core/lib/mqt-core-dd.lib +0 -0
  486. mqt/core/lib/mqt-core-ds.lib +0 -0
  487. mqt/core/lib/mqt-core-fomac.lib +0 -0
  488. mqt/core/lib/mqt-core-ir.lib +0 -0
  489. mqt/core/lib/mqt-core-na-fomac.lib +0 -0
  490. mqt/core/lib/mqt-core-na.lib +0 -0
  491. mqt/core/lib/mqt-core-qasm.lib +0 -0
  492. mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
  493. mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
  494. mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
  495. mqt/core/lib/mqt-core-zx.lib +0 -0
  496. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  497. mqt/core/lib/spdlog.lib +0 -0
  498. mqt/core/na/__init__.py +12 -0
  499. mqt/core/na/fomac.cp313t-win_amd64.pyd +0 -0
  500. mqt/core/na/fomac.pyi +117 -0
  501. mqt/core/nlohmann_json.natvis +278 -0
  502. mqt/core/plugins/__init__.py +9 -0
  503. mqt/core/plugins/qiskit/__init__.py +19 -0
  504. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  505. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  506. mqt/core/py.typed +2 -0
  507. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  508. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  509. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  510. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  511. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  512. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  513. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  514. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  515. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
  516. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +445 -0
  517. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  518. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  519. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
  520. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  521. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  522. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  523. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  524. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  525. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  526. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  527. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  528. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
  529. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  530. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  531. mqt_core-3.3.2.dist-info/DELVEWHEEL +2 -0
  532. mqt_core-3.3.2.dist-info/METADATA +210 -0
  533. mqt_core-3.3.2.dist-info/RECORD +537 -0
  534. mqt_core-3.3.2.dist-info/WHEEL +5 -0
  535. mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
  536. mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
  537. mqt_core.libs/msvcp140.dll +0 -0
@@ -0,0 +1,304 @@
1
+ // Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors.
2
+ // Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
+
4
+ #pragma once
5
+
6
+ //
7
+ // Custom sink for QPlainTextEdit or QTextEdit and its children (QTextBrowser...
8
+ // etc) Building and using requires Qt library.
9
+ //
10
+ // Warning: the qt_sink won't be notified if the target widget is destroyed.
11
+ // If the widget's lifetime can be shorter than the logger's one, you should provide some permanent
12
+ // QObject, and then use a standard signal/slot.
13
+ //
14
+
15
+ #include "spdlog/common.h"
16
+ #include "spdlog/details/log_msg.h"
17
+ #include "spdlog/details/synchronous_factory.h"
18
+ #include "spdlog/sinks/base_sink.h"
19
+ #include <array>
20
+
21
+ #include <QPlainTextEdit>
22
+ #include <QTextEdit>
23
+
24
+ //
25
+ // qt_sink class
26
+ //
27
+ namespace spdlog {
28
+ namespace sinks {
29
+ template <typename Mutex>
30
+ class qt_sink : public base_sink<Mutex> {
31
+ public:
32
+ qt_sink(QObject *qt_object, std::string meta_method)
33
+ : qt_object_(qt_object),
34
+ meta_method_(std::move(meta_method)) {
35
+ if (!qt_object_) {
36
+ throw_spdlog_ex("qt_sink: qt_object is null");
37
+ }
38
+ }
39
+
40
+ ~qt_sink() { flush_(); }
41
+
42
+ protected:
43
+ void sink_it_(const details::log_msg &msg) override {
44
+ memory_buf_t formatted;
45
+ base_sink<Mutex>::formatter_->format(msg, formatted);
46
+ const string_view_t str = string_view_t(formatted.data(), formatted.size());
47
+ QMetaObject::invokeMethod(
48
+ qt_object_, meta_method_.c_str(), Qt::AutoConnection,
49
+ Q_ARG(QString, QString::fromUtf8(str.data(), static_cast<int>(str.size())).trimmed()));
50
+ }
51
+
52
+ void flush_() override {}
53
+
54
+ private:
55
+ QObject *qt_object_ = nullptr;
56
+ std::string meta_method_;
57
+ };
58
+
59
+ // Qt color sink to QTextEdit.
60
+ // Color location is determined by the sink log pattern like in the rest of spdlog sinks.
61
+ // Colors can be modified if needed using sink->set_color(level, qtTextCharFormat).
62
+ // max_lines is the maximum number of lines that the sink will hold before removing the oldest
63
+ // lines. By default, only ascii (latin1) is supported by this sink. Set is_utf8 to true if utf8
64
+ // support is needed.
65
+ template <typename Mutex>
66
+ class qt_color_sink : public base_sink<Mutex> {
67
+ public:
68
+ qt_color_sink(QTextEdit *qt_text_edit,
69
+ int max_lines,
70
+ bool dark_colors = false,
71
+ bool is_utf8 = false)
72
+ : qt_text_edit_(qt_text_edit),
73
+ max_lines_(max_lines),
74
+ is_utf8_(is_utf8) {
75
+ if (!qt_text_edit_) {
76
+ throw_spdlog_ex("qt_color_text_sink: text_edit is null");
77
+ }
78
+
79
+ default_color_ = qt_text_edit_->currentCharFormat();
80
+ // set colors
81
+ QTextCharFormat format;
82
+ // trace
83
+ format.setForeground(dark_colors ? Qt::darkGray : Qt::gray);
84
+ colors_.at(level::trace) = format;
85
+ // debug
86
+ format.setForeground(dark_colors ? Qt::darkCyan : Qt::cyan);
87
+ colors_.at(level::debug) = format;
88
+ // info
89
+ format.setForeground(dark_colors ? Qt::darkGreen : Qt::green);
90
+ colors_.at(level::info) = format;
91
+ // warn
92
+ format.setForeground(dark_colors ? Qt::darkYellow : Qt::yellow);
93
+ colors_.at(level::warn) = format;
94
+ // err
95
+ format.setForeground(Qt::red);
96
+ colors_.at(level::err) = format;
97
+ // critical
98
+ format.setForeground(Qt::white);
99
+ format.setBackground(Qt::red);
100
+ colors_.at(level::critical) = format;
101
+ }
102
+
103
+ ~qt_color_sink() { flush_(); }
104
+
105
+ void set_default_color(QTextCharFormat format) {
106
+ // std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
107
+ default_color_ = format;
108
+ }
109
+
110
+ void set_level_color(level::level_enum color_level, QTextCharFormat format) {
111
+ // std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
112
+ colors_.at(static_cast<size_t>(color_level)) = format;
113
+ }
114
+
115
+ QTextCharFormat &get_level_color(level::level_enum color_level) {
116
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
117
+ return colors_.at(static_cast<size_t>(color_level));
118
+ }
119
+
120
+ QTextCharFormat &get_default_color() {
121
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
122
+ return default_color_;
123
+ }
124
+
125
+ protected:
126
+ struct invoke_params {
127
+ invoke_params(int max_lines,
128
+ QTextEdit *q_text_edit,
129
+ QString payload,
130
+ QTextCharFormat default_color,
131
+ QTextCharFormat level_color,
132
+ int color_range_start,
133
+ int color_range_end)
134
+ : max_lines(max_lines),
135
+ q_text_edit(q_text_edit),
136
+ payload(std::move(payload)),
137
+ default_color(default_color),
138
+ level_color(level_color),
139
+ color_range_start(color_range_start),
140
+ color_range_end(color_range_end) {}
141
+ int max_lines;
142
+ QTextEdit *q_text_edit;
143
+ QString payload;
144
+ QTextCharFormat default_color;
145
+ QTextCharFormat level_color;
146
+ int color_range_start;
147
+ int color_range_end;
148
+ };
149
+
150
+ void sink_it_(const details::log_msg &msg) override {
151
+ memory_buf_t formatted;
152
+ base_sink<Mutex>::formatter_->format(msg, formatted);
153
+
154
+ const string_view_t str = string_view_t(formatted.data(), formatted.size());
155
+ // apply the color to the color range in the formatted message.
156
+ QString payload;
157
+ int color_range_start = static_cast<int>(msg.color_range_start);
158
+ int color_range_end = static_cast<int>(msg.color_range_end);
159
+ if (is_utf8_) {
160
+ payload = QString::fromUtf8(str.data(), static_cast<int>(str.size()));
161
+ // convert color ranges from byte index to character index.
162
+ if (msg.color_range_start < msg.color_range_end) {
163
+ color_range_start = QString::fromUtf8(str.data(), msg.color_range_start).size();
164
+ color_range_end = QString::fromUtf8(str.data(), msg.color_range_end).size();
165
+ }
166
+ } else {
167
+ payload = QString::fromLatin1(str.data(), static_cast<int>(str.size()));
168
+ }
169
+
170
+ invoke_params params{max_lines_, // max lines
171
+ qt_text_edit_, // text edit to append to
172
+ std::move(payload), // text to append
173
+ default_color_, // default color
174
+ colors_.at(msg.level), // color to apply
175
+ color_range_start, // color range start
176
+ color_range_end}; // color range end
177
+
178
+ QMetaObject::invokeMethod(
179
+ qt_text_edit_, [params]() { invoke_method_(params); }, Qt::AutoConnection);
180
+ }
181
+
182
+ void flush_() override {}
183
+
184
+ // Add colored text to the text edit widget. This method is invoked in the GUI thread.
185
+ // It is a static method to ensure that it is handled correctly even if the sink is destroyed
186
+ // prematurely before it is invoked.
187
+
188
+ static void invoke_method_(invoke_params params) {
189
+ auto *document = params.q_text_edit->document();
190
+ QTextCursor cursor(document);
191
+
192
+ // remove first blocks if number of blocks exceeds max_lines
193
+ while (document->blockCount() > params.max_lines) {
194
+ cursor.select(QTextCursor::BlockUnderCursor);
195
+ cursor.removeSelectedText();
196
+ cursor.deleteChar(); // delete the newline after the block
197
+ }
198
+
199
+ cursor.movePosition(QTextCursor::End);
200
+ cursor.setCharFormat(params.default_color);
201
+
202
+ // if color range not specified or not not valid, just append the text with default color
203
+ if (params.color_range_end <= params.color_range_start) {
204
+ cursor.insertText(params.payload);
205
+ return;
206
+ }
207
+
208
+ // insert the text before the color range
209
+ cursor.insertText(params.payload.left(params.color_range_start));
210
+
211
+ // insert the colorized text
212
+ cursor.setCharFormat(params.level_color);
213
+ cursor.insertText(params.payload.mid(params.color_range_start,
214
+ params.color_range_end - params.color_range_start));
215
+
216
+ // insert the text after the color range with default format
217
+ cursor.setCharFormat(params.default_color);
218
+ cursor.insertText(params.payload.mid(params.color_range_end));
219
+ }
220
+
221
+ QTextEdit *qt_text_edit_;
222
+ int max_lines_;
223
+ bool is_utf8_;
224
+ QTextCharFormat default_color_;
225
+ std::array<QTextCharFormat, level::n_levels> colors_;
226
+ };
227
+
228
+ #include "spdlog/details/null_mutex.h"
229
+ #include <mutex>
230
+
231
+ using qt_sink_mt = qt_sink<std::mutex>;
232
+ using qt_sink_st = qt_sink<details::null_mutex>;
233
+ using qt_color_sink_mt = qt_color_sink<std::mutex>;
234
+ using qt_color_sink_st = qt_color_sink<details::null_mutex>;
235
+ } // namespace sinks
236
+
237
+ //
238
+ // Factory functions
239
+ //
240
+
241
+ // log to QTextEdit
242
+ template <typename Factory = spdlog::synchronous_factory>
243
+ inline std::shared_ptr<logger> qt_logger_mt(const std::string &logger_name,
244
+ QTextEdit *qt_object,
245
+ const std::string &meta_method = "append") {
246
+ return Factory::template create<sinks::qt_sink_mt>(logger_name, qt_object, meta_method);
247
+ }
248
+
249
+ template <typename Factory = spdlog::synchronous_factory>
250
+ inline std::shared_ptr<logger> qt_logger_st(const std::string &logger_name,
251
+ QTextEdit *qt_object,
252
+ const std::string &meta_method = "append") {
253
+ return Factory::template create<sinks::qt_sink_st>(logger_name, qt_object, meta_method);
254
+ }
255
+
256
+ // log to QPlainTextEdit
257
+ template <typename Factory = spdlog::synchronous_factory>
258
+ inline std::shared_ptr<logger> qt_logger_mt(const std::string &logger_name,
259
+ QPlainTextEdit *qt_object,
260
+ const std::string &meta_method = "appendPlainText") {
261
+ return Factory::template create<sinks::qt_sink_mt>(logger_name, qt_object, meta_method);
262
+ }
263
+
264
+ template <typename Factory = spdlog::synchronous_factory>
265
+ inline std::shared_ptr<logger> qt_logger_st(const std::string &logger_name,
266
+ QPlainTextEdit *qt_object,
267
+ const std::string &meta_method = "appendPlainText") {
268
+ return Factory::template create<sinks::qt_sink_st>(logger_name, qt_object, meta_method);
269
+ }
270
+ // log to QObject
271
+ template <typename Factory = spdlog::synchronous_factory>
272
+ inline std::shared_ptr<logger> qt_logger_mt(const std::string &logger_name,
273
+ QObject *qt_object,
274
+ const std::string &meta_method) {
275
+ return Factory::template create<sinks::qt_sink_mt>(logger_name, qt_object, meta_method);
276
+ }
277
+
278
+ template <typename Factory = spdlog::synchronous_factory>
279
+ inline std::shared_ptr<logger> qt_logger_st(const std::string &logger_name,
280
+ QObject *qt_object,
281
+ const std::string &meta_method) {
282
+ return Factory::template create<sinks::qt_sink_st>(logger_name, qt_object, meta_method);
283
+ }
284
+
285
+ // log to QTextEdit with colorized output
286
+ template <typename Factory = spdlog::synchronous_factory>
287
+ inline std::shared_ptr<logger> qt_color_logger_mt(const std::string &logger_name,
288
+ QTextEdit *qt_text_edit,
289
+ int max_lines,
290
+ bool is_utf8 = false) {
291
+ return Factory::template create<sinks::qt_color_sink_mt>(logger_name, qt_text_edit, max_lines,
292
+ false, is_utf8);
293
+ }
294
+
295
+ template <typename Factory = spdlog::synchronous_factory>
296
+ inline std::shared_ptr<logger> qt_color_logger_st(const std::string &logger_name,
297
+ QTextEdit *qt_text_edit,
298
+ int max_lines,
299
+ bool is_utf8 = false) {
300
+ return Factory::template create<sinks::qt_color_sink_st>(logger_name, qt_text_edit, max_lines,
301
+ false, is_utf8);
302
+ }
303
+
304
+ } // namespace spdlog
@@ -0,0 +1,67 @@
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/circular_q.h"
7
+ #include "spdlog/details/log_msg_buffer.h"
8
+ #include "spdlog/details/null_mutex.h"
9
+ #include "spdlog/sinks/base_sink.h"
10
+
11
+ #include <mutex>
12
+ #include <string>
13
+ #include <vector>
14
+
15
+ namespace spdlog {
16
+ namespace sinks {
17
+ /*
18
+ * Ring buffer sink
19
+ */
20
+ template <typename Mutex>
21
+ class ringbuffer_sink final : public base_sink<Mutex> {
22
+ public:
23
+ explicit ringbuffer_sink(size_t n_items)
24
+ : q_{n_items} {}
25
+
26
+ std::vector<details::log_msg_buffer> last_raw(size_t lim = 0) {
27
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
28
+ auto items_available = q_.size();
29
+ auto n_items = lim > 0 ? (std::min)(lim, items_available) : items_available;
30
+ std::vector<details::log_msg_buffer> ret;
31
+ ret.reserve(n_items);
32
+ for (size_t i = (items_available - n_items); i < items_available; i++) {
33
+ ret.push_back(q_.at(i));
34
+ }
35
+ return ret;
36
+ }
37
+
38
+ std::vector<std::string> last_formatted(size_t lim = 0) {
39
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
40
+ auto items_available = q_.size();
41
+ auto n_items = lim > 0 ? (std::min)(lim, items_available) : items_available;
42
+ std::vector<std::string> ret;
43
+ ret.reserve(n_items);
44
+ for (size_t i = (items_available - n_items); i < items_available; i++) {
45
+ memory_buf_t formatted;
46
+ base_sink<Mutex>::formatter_->format(q_.at(i), formatted);
47
+ ret.push_back(SPDLOG_BUF_TO_STRING(formatted));
48
+ }
49
+ return ret;
50
+ }
51
+
52
+ protected:
53
+ void sink_it_(const details::log_msg &msg) override {
54
+ q_.push_back(details::log_msg_buffer{msg});
55
+ }
56
+ void flush_() override {}
57
+
58
+ private:
59
+ details::circular_q<details::log_msg_buffer> q_;
60
+ };
61
+
62
+ using ringbuffer_sink_mt = ringbuffer_sink<std::mutex>;
63
+ using ringbuffer_sink_st = ringbuffer_sink<details::null_mutex>;
64
+
65
+ } // namespace sinks
66
+
67
+ } // namespace spdlog
@@ -0,0 +1,179 @@
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/rotating_file_sink.h>
8
+ #endif
9
+
10
+ #include <spdlog/common.h>
11
+
12
+ #include <spdlog/details/file_helper.h>
13
+ #include <spdlog/details/null_mutex.h>
14
+ #include <spdlog/fmt/fmt.h>
15
+
16
+ #include <cerrno>
17
+ #include <ctime>
18
+ #include <mutex>
19
+ #include <string>
20
+ #include <tuple>
21
+
22
+ namespace spdlog {
23
+ namespace sinks {
24
+
25
+ template <typename Mutex>
26
+ SPDLOG_INLINE rotating_file_sink<Mutex>::rotating_file_sink(
27
+ filename_t base_filename,
28
+ std::size_t max_size,
29
+ std::size_t max_files,
30
+ bool rotate_on_open,
31
+ const file_event_handlers &event_handlers)
32
+ : base_filename_(std::move(base_filename)),
33
+ max_size_(max_size),
34
+ max_files_(max_files),
35
+ file_helper_{event_handlers} {
36
+ if (max_size == 0) {
37
+ throw_spdlog_ex("rotating sink constructor: max_size arg cannot be zero");
38
+ }
39
+
40
+ if (max_files > MaxFiles) {
41
+ throw_spdlog_ex("rotating sink constructor: max_files arg cannot exceed MaxFiles");
42
+ }
43
+ file_helper_.open(calc_filename(base_filename_, 0));
44
+ current_size_ = file_helper_.size(); // expensive. called only once
45
+ if (rotate_on_open && current_size_ > 0) {
46
+ rotate_();
47
+ current_size_ = 0;
48
+ }
49
+ }
50
+
51
+ // calc filename according to index and file extension if exists.
52
+ // e.g. calc_filename("logs/mylog.txt, 3) => "logs/mylog.3.txt".
53
+ template <typename Mutex>
54
+ SPDLOG_INLINE filename_t rotating_file_sink<Mutex>::calc_filename(const filename_t &filename,
55
+ std::size_t index) {
56
+ if (index == 0U) {
57
+ return filename;
58
+ }
59
+
60
+ filename_t basename;
61
+ filename_t ext;
62
+ std::tie(basename, ext) = details::file_helper::split_by_extension(filename);
63
+ return fmt_lib::format(SPDLOG_FMT_STRING(SPDLOG_FILENAME_T("{}.{}{}")), basename, index, ext);
64
+ }
65
+
66
+ template <typename Mutex>
67
+ SPDLOG_INLINE filename_t rotating_file_sink<Mutex>::filename() {
68
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
69
+ return file_helper_.filename();
70
+ }
71
+
72
+ template <typename Mutex>
73
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::rotate_now() {
74
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
75
+ rotate_();
76
+ }
77
+ template <typename Mutex>
78
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::set_max_size(std::size_t max_size) {
79
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
80
+ if (max_size == 0) {
81
+ throw_spdlog_ex("rotating sink set_max_size: max_size arg cannot be zero");
82
+ }
83
+ max_size_ = max_size;
84
+ }
85
+
86
+ template <typename Mutex>
87
+ SPDLOG_INLINE std::size_t rotating_file_sink<Mutex>::get_max_size() {
88
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
89
+ return max_size_;
90
+ }
91
+
92
+ template <typename Mutex>
93
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::set_max_files(std::size_t max_files) {
94
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
95
+ if (max_files > MaxFiles) {
96
+ throw_spdlog_ex("rotating sink set_max_files: max_files arg cannot exceed 200000");
97
+ }
98
+ max_files_ = max_files;
99
+ }
100
+
101
+ template <typename Mutex>
102
+ std::size_t rotating_file_sink<Mutex>::get_max_files() {
103
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
104
+ return max_files_;
105
+ }
106
+
107
+ template <typename Mutex>
108
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
109
+ memory_buf_t formatted;
110
+ base_sink<Mutex>::formatter_->format(msg, formatted);
111
+ auto new_size = current_size_ + formatted.size();
112
+
113
+ // rotate if the new estimated file size exceeds max size.
114
+ // rotate only if the real size > 0 to better deal with full disk (see issue #2261).
115
+ // we only check the real size when new_size > max_size_ because it is relatively expensive.
116
+ if (new_size > max_size_) {
117
+ file_helper_.flush();
118
+ if (file_helper_.size() > 0) {
119
+ rotate_();
120
+ new_size = formatted.size();
121
+ }
122
+ }
123
+ file_helper_.write(formatted);
124
+ current_size_ = new_size;
125
+ }
126
+
127
+ template <typename Mutex>
128
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::flush_() {
129
+ file_helper_.flush();
130
+ }
131
+
132
+ // Rotate files:
133
+ // log.txt -> log.1.txt
134
+ // log.1.txt -> log.2.txt
135
+ // log.2.txt -> log.3.txt
136
+ // log.3.txt -> delete
137
+ template <typename Mutex>
138
+ SPDLOG_INLINE void rotating_file_sink<Mutex>::rotate_() {
139
+ using details::os::filename_to_str;
140
+ using details::os::path_exists;
141
+
142
+ file_helper_.close();
143
+ for (auto i = max_files_; i > 0; --i) {
144
+ filename_t src = calc_filename(base_filename_, i - 1);
145
+ if (!path_exists(src)) {
146
+ continue;
147
+ }
148
+ filename_t target = calc_filename(base_filename_, i);
149
+
150
+ if (!rename_file_(src, target)) {
151
+ // if failed try again after a small delay.
152
+ // this is a workaround to a windows issue, where very high rotation
153
+ // rates can cause the rename to fail with permission denied (because of antivirus?).
154
+ details::os::sleep_for_millis(100);
155
+ if (!rename_file_(src, target)) {
156
+ file_helper_.reopen(
157
+ true); // truncate the log file anyway to prevent it to grow beyond its limit!
158
+ current_size_ = 0;
159
+ throw_spdlog_ex("rotating_file_sink: failed renaming " + filename_to_str(src) +
160
+ " to " + filename_to_str(target),
161
+ errno);
162
+ }
163
+ }
164
+ }
165
+ file_helper_.reopen(true);
166
+ }
167
+
168
+ // delete the target if exists, and rename the src file to target
169
+ // return true on success, false otherwise.
170
+ template <typename Mutex>
171
+ SPDLOG_INLINE bool rotating_file_sink<Mutex>::rename_file_(const filename_t &src_filename,
172
+ const filename_t &target_filename) {
173
+ // try to delete the target file in case it already exists.
174
+ (void)details::os::remove(target_filename);
175
+ return details::os::rename(src_filename, target_filename) == 0;
176
+ }
177
+
178
+ } // namespace sinks
179
+ } // namespace spdlog
@@ -0,0 +1,93 @@
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
+ //
18
+ // Rotating file sink based on size
19
+ //
20
+ template <typename Mutex>
21
+ class rotating_file_sink final : public base_sink<Mutex> {
22
+ public:
23
+ static constexpr size_t MaxFiles = 200000;
24
+ rotating_file_sink(filename_t base_filename,
25
+ std::size_t max_size,
26
+ std::size_t max_files,
27
+ bool rotate_on_open = false,
28
+ const file_event_handlers &event_handlers = {});
29
+ static filename_t calc_filename(const filename_t &filename, std::size_t index);
30
+ filename_t filename();
31
+ void rotate_now();
32
+ void set_max_size(std::size_t max_size);
33
+ std::size_t get_max_size();
34
+ void set_max_files(std::size_t max_files);
35
+ std::size_t get_max_files();
36
+
37
+ protected:
38
+ void sink_it_(const details::log_msg &msg) override;
39
+ void flush_() override;
40
+
41
+ private:
42
+ // Rotate files:
43
+ // log.txt -> log.1.txt
44
+ // log.1.txt -> log.2.txt
45
+ // log.2.txt -> log.3.txt
46
+ // log.3.txt -> delete
47
+ void rotate_();
48
+
49
+ // delete the target if exists, and rename the src file to target
50
+ // return true on success, false otherwise.
51
+ bool rename_file_(const filename_t &src_filename, const filename_t &target_filename);
52
+
53
+ filename_t base_filename_;
54
+ std::size_t max_size_;
55
+ std::size_t max_files_;
56
+ std::size_t current_size_;
57
+ details::file_helper file_helper_;
58
+ };
59
+
60
+ using rotating_file_sink_mt = rotating_file_sink<std::mutex>;
61
+ using rotating_file_sink_st = rotating_file_sink<details::null_mutex>;
62
+
63
+ } // namespace sinks
64
+
65
+ //
66
+ // factory functions
67
+ //
68
+ template <typename Factory = spdlog::synchronous_factory>
69
+ std::shared_ptr<logger> rotating_logger_mt(const std::string &logger_name,
70
+ const filename_t &filename,
71
+ size_t max_file_size,
72
+ size_t max_files,
73
+ bool rotate_on_open = false,
74
+ const file_event_handlers &event_handlers = {}) {
75
+ return Factory::template create<sinks::rotating_file_sink_mt>(
76
+ logger_name, filename, max_file_size, max_files, rotate_on_open, event_handlers);
77
+ }
78
+
79
+ template <typename Factory = spdlog::synchronous_factory>
80
+ std::shared_ptr<logger> rotating_logger_st(const std::string &logger_name,
81
+ const filename_t &filename,
82
+ size_t max_file_size,
83
+ size_t max_files,
84
+ bool rotate_on_open = false,
85
+ const file_event_handlers &event_handlers = {}) {
86
+ return Factory::template create<sinks::rotating_file_sink_st>(
87
+ logger_name, filename, max_file_size, max_files, rotate_on_open, event_handlers);
88
+ }
89
+ } // namespace spdlog
90
+
91
+ #ifdef SPDLOG_HEADER_ONLY
92
+ #include "rotating_file_sink-inl.h"
93
+ #endif
@@ -0,0 +1,22 @@
1
+ // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
2
+ // Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
+
4
+ #pragma once
5
+
6
+ #ifndef SPDLOG_HEADER_ONLY
7
+ #include <spdlog/sinks/sink.h>
8
+ #endif
9
+
10
+ #include <spdlog/common.h>
11
+
12
+ SPDLOG_INLINE bool spdlog::sinks::sink::should_log(spdlog::level::level_enum msg_level) const {
13
+ return msg_level >= level_.load(std::memory_order_relaxed);
14
+ }
15
+
16
+ SPDLOG_INLINE void spdlog::sinks::sink::set_level(level::level_enum log_level) {
17
+ level_.store(log_level, std::memory_order_relaxed);
18
+ }
19
+
20
+ SPDLOG_INLINE spdlog::level::level_enum spdlog::sinks::sink::level() const {
21
+ return static_cast<spdlog::level::level_enum>(level_.load(std::memory_order_relaxed));
22
+ }