mqt-core 3.3.2__cp314-cp314t-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.cp314t-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp314t-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.cp314t-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.cp314t-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,118 @@
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/log_msg.h>
8
+ #include <spdlog/details/os.h>
9
+ #include <spdlog/formatter.h>
10
+
11
+ #include <chrono>
12
+ #include <ctime>
13
+ #include <memory>
14
+
15
+ #include <string>
16
+ #include <unordered_map>
17
+ #include <vector>
18
+
19
+ namespace spdlog {
20
+ namespace details {
21
+
22
+ // padding information.
23
+ struct padding_info {
24
+ enum class pad_side { left, right, center };
25
+
26
+ padding_info() = default;
27
+ padding_info(size_t width, padding_info::pad_side side, bool truncate)
28
+ : width_(width),
29
+ side_(side),
30
+ truncate_(truncate),
31
+ enabled_(true) {}
32
+
33
+ bool enabled() const { return enabled_; }
34
+ size_t width_ = 0;
35
+ pad_side side_ = pad_side::left;
36
+ bool truncate_ = false;
37
+ bool enabled_ = false;
38
+ };
39
+
40
+ class SPDLOG_API flag_formatter {
41
+ public:
42
+ explicit flag_formatter(padding_info padinfo)
43
+ : padinfo_(padinfo) {}
44
+ flag_formatter() = default;
45
+ virtual ~flag_formatter() = default;
46
+ virtual void format(const details::log_msg &msg,
47
+ const std::tm &tm_time,
48
+ memory_buf_t &dest) = 0;
49
+
50
+ protected:
51
+ padding_info padinfo_;
52
+ };
53
+
54
+ } // namespace details
55
+
56
+ class SPDLOG_API custom_flag_formatter : public details::flag_formatter {
57
+ public:
58
+ virtual std::unique_ptr<custom_flag_formatter> clone() const = 0;
59
+
60
+ void set_padding_info(const details::padding_info &padding) {
61
+ flag_formatter::padinfo_ = padding;
62
+ }
63
+ };
64
+
65
+ class SPDLOG_API pattern_formatter final : public formatter {
66
+ public:
67
+ using custom_flags = std::unordered_map<char, std::unique_ptr<custom_flag_formatter>>;
68
+
69
+ explicit pattern_formatter(std::string pattern,
70
+ pattern_time_type time_type = pattern_time_type::local,
71
+ std::string eol = spdlog::details::os::default_eol,
72
+ custom_flags custom_user_flags = custom_flags());
73
+
74
+ // use default pattern is not given
75
+ explicit pattern_formatter(pattern_time_type time_type = pattern_time_type::local,
76
+ std::string eol = spdlog::details::os::default_eol);
77
+
78
+ pattern_formatter(const pattern_formatter &other) = delete;
79
+ pattern_formatter &operator=(const pattern_formatter &other) = delete;
80
+
81
+ std::unique_ptr<formatter> clone() const override;
82
+ void format(const details::log_msg &msg, memory_buf_t &dest) override;
83
+
84
+ template <typename T, typename... Args>
85
+ pattern_formatter &add_flag(char flag, Args &&...args) {
86
+ custom_handlers_[flag] = details::make_unique<T>(std::forward<Args>(args)...);
87
+ return *this;
88
+ }
89
+ void set_pattern(std::string pattern);
90
+ void need_localtime(bool need = true);
91
+
92
+ private:
93
+ std::string pattern_;
94
+ std::string eol_;
95
+ pattern_time_type pattern_time_type_;
96
+ bool need_localtime_;
97
+ std::tm cached_tm_;
98
+ std::chrono::seconds last_log_secs_;
99
+ std::vector<std::unique_ptr<details::flag_formatter>> formatters_;
100
+ custom_flags custom_handlers_;
101
+
102
+ std::tm get_time_(const details::log_msg &msg);
103
+ template <typename Padder>
104
+ void handle_flag_(char flag, details::padding_info padding);
105
+
106
+ // Extract given pad spec (e.g. %8X)
107
+ // Advance the given it pass the end of the padding spec found (if any)
108
+ // Return padding.
109
+ static details::padding_info handle_padspec_(std::string::const_iterator &it,
110
+ std::string::const_iterator end);
111
+
112
+ void compile_pattern_(const std::string &pattern);
113
+ };
114
+ } // namespace spdlog
115
+
116
+ #ifdef SPDLOG_HEADER_ONLY
117
+ #include "pattern_formatter-inl.h"
118
+ #endif
@@ -0,0 +1,137 @@
1
+ // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
2
+ // Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
+
4
+ #pragma once
5
+
6
+ #ifdef __ANDROID__
7
+
8
+ #include <spdlog/details/fmt_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/sinks/base_sink.h>
13
+
14
+ #include <android/log.h>
15
+ #include <chrono>
16
+ #include <mutex>
17
+ #include <string>
18
+ #include <thread>
19
+ #include <type_traits>
20
+
21
+ #if !defined(SPDLOG_ANDROID_RETRIES)
22
+ #define SPDLOG_ANDROID_RETRIES 2
23
+ #endif
24
+
25
+ namespace spdlog {
26
+ namespace sinks {
27
+
28
+ /*
29
+ * Android sink
30
+ * (logging using __android_log_write or __android_log_buf_write depending on the specified
31
+ * BufferID)
32
+ */
33
+ template <typename Mutex, int BufferID = log_id::LOG_ID_MAIN>
34
+ class android_sink final : public base_sink<Mutex> {
35
+ public:
36
+ explicit android_sink(std::string tag = "spdlog", bool use_raw_msg = false)
37
+ : tag_(std::move(tag)),
38
+ use_raw_msg_(use_raw_msg) {}
39
+
40
+ protected:
41
+ void sink_it_(const details::log_msg &msg) override {
42
+ const android_LogPriority priority = convert_to_android_(msg.level);
43
+ memory_buf_t formatted;
44
+ if (use_raw_msg_) {
45
+ details::fmt_helper::append_string_view(msg.payload, formatted);
46
+ } else {
47
+ base_sink<Mutex>::formatter_->format(msg, formatted);
48
+ }
49
+ formatted.push_back('\0');
50
+ const char *msg_output = formatted.data();
51
+
52
+ // See system/core/liblog/logger_write.c for explanation of return value
53
+ int ret = android_log(priority, tag_.c_str(), msg_output);
54
+ if (ret == -EPERM) {
55
+ return; // !__android_log_is_loggable
56
+ }
57
+ int retry_count = 0;
58
+ while ((ret == -11 /*EAGAIN*/) && (retry_count < SPDLOG_ANDROID_RETRIES)) {
59
+ details::os::sleep_for_millis(5);
60
+ ret = android_log(priority, tag_.c_str(), msg_output);
61
+ retry_count++;
62
+ }
63
+
64
+ if (ret < 0) {
65
+ throw_spdlog_ex("logging to Android failed", ret);
66
+ }
67
+ }
68
+
69
+ void flush_() override {}
70
+
71
+ private:
72
+ // There might be liblog versions used, that do not support __android_log_buf_write. So we only
73
+ // compile and link against
74
+ // __android_log_buf_write, if user explicitly provides a non-default log buffer. Otherwise,
75
+ // when using the default log buffer, always log via __android_log_write.
76
+ template <int ID = BufferID>
77
+ typename std::enable_if<ID == static_cast<int>(log_id::LOG_ID_MAIN), int>::type android_log(
78
+ int prio, const char *tag, const char *text) {
79
+ return __android_log_write(prio, tag, text);
80
+ }
81
+
82
+ template <int ID = BufferID>
83
+ typename std::enable_if<ID != static_cast<int>(log_id::LOG_ID_MAIN), int>::type android_log(
84
+ int prio, const char *tag, const char *text) {
85
+ return __android_log_buf_write(ID, prio, tag, text);
86
+ }
87
+
88
+ static android_LogPriority convert_to_android_(spdlog::level::level_enum level) {
89
+ switch (level) {
90
+ case spdlog::level::trace:
91
+ return ANDROID_LOG_VERBOSE;
92
+ case spdlog::level::debug:
93
+ return ANDROID_LOG_DEBUG;
94
+ case spdlog::level::info:
95
+ return ANDROID_LOG_INFO;
96
+ case spdlog::level::warn:
97
+ return ANDROID_LOG_WARN;
98
+ case spdlog::level::err:
99
+ return ANDROID_LOG_ERROR;
100
+ case spdlog::level::critical:
101
+ return ANDROID_LOG_FATAL;
102
+ default:
103
+ return ANDROID_LOG_DEFAULT;
104
+ }
105
+ }
106
+
107
+ std::string tag_;
108
+ bool use_raw_msg_;
109
+ };
110
+
111
+ using android_sink_mt = android_sink<std::mutex>;
112
+ using android_sink_st = android_sink<details::null_mutex>;
113
+
114
+ template <int BufferId = log_id::LOG_ID_MAIN>
115
+ using android_sink_buf_mt = android_sink<std::mutex, BufferId>;
116
+ template <int BufferId = log_id::LOG_ID_MAIN>
117
+ using android_sink_buf_st = android_sink<details::null_mutex, BufferId>;
118
+
119
+ } // namespace sinks
120
+
121
+ // Create and register android syslog logger
122
+
123
+ template <typename Factory = spdlog::synchronous_factory>
124
+ inline std::shared_ptr<logger> android_logger_mt(const std::string &logger_name,
125
+ const std::string &tag = "spdlog") {
126
+ return Factory::template create<sinks::android_sink_mt>(logger_name, tag);
127
+ }
128
+
129
+ template <typename Factory = spdlog::synchronous_factory>
130
+ inline std::shared_ptr<logger> android_logger_st(const std::string &logger_name,
131
+ const std::string &tag = "spdlog") {
132
+ return Factory::template create<sinks::android_sink_st>(logger_name, tag);
133
+ }
134
+
135
+ } // namespace spdlog
136
+
137
+ #endif // __ANDROID__
@@ -0,0 +1,142 @@
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/ansicolor_sink.h>
8
+ #endif
9
+
10
+ #include <spdlog/details/os.h>
11
+ #include <spdlog/pattern_formatter.h>
12
+
13
+ namespace spdlog {
14
+ namespace sinks {
15
+
16
+ template <typename ConsoleMutex>
17
+ SPDLOG_INLINE ansicolor_sink<ConsoleMutex>::ansicolor_sink(FILE *target_file, color_mode mode)
18
+ : target_file_(target_file),
19
+ mutex_(ConsoleMutex::mutex()),
20
+ formatter_(details::make_unique<spdlog::pattern_formatter>())
21
+
22
+ {
23
+ set_color_mode_(mode);
24
+ colors_.at(level::trace) = to_string_(white);
25
+ colors_.at(level::debug) = to_string_(cyan);
26
+ colors_.at(level::info) = to_string_(green);
27
+ colors_.at(level::warn) = to_string_(yellow_bold);
28
+ colors_.at(level::err) = to_string_(red_bold);
29
+ colors_.at(level::critical) = to_string_(bold_on_red);
30
+ colors_.at(level::off) = to_string_(reset);
31
+ }
32
+
33
+ template <typename ConsoleMutex>
34
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_color(level::level_enum color_level,
35
+ string_view_t color) {
36
+ std::lock_guard<mutex_t> lock(mutex_);
37
+ colors_.at(static_cast<size_t>(color_level)) = to_string_(color);
38
+ }
39
+
40
+ template <typename ConsoleMutex>
41
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::log(const details::log_msg &msg) {
42
+ // Wrap the originally formatted message in color codes.
43
+ // If color is not supported in the terminal, log as is instead.
44
+ std::lock_guard<mutex_t> lock(mutex_);
45
+ msg.color_range_start = 0;
46
+ msg.color_range_end = 0;
47
+ memory_buf_t formatted;
48
+ formatter_->format(msg, formatted);
49
+ if (should_do_colors_ && msg.color_range_end > msg.color_range_start) {
50
+ // before color range
51
+ print_range_(formatted, 0, msg.color_range_start);
52
+ // in color range
53
+ print_ccode_(colors_.at(static_cast<size_t>(msg.level)));
54
+ print_range_(formatted, msg.color_range_start, msg.color_range_end);
55
+ print_ccode_(reset);
56
+ // after color range
57
+ print_range_(formatted, msg.color_range_end, formatted.size());
58
+ } else // no color
59
+ {
60
+ print_range_(formatted, 0, formatted.size());
61
+ }
62
+ fflush(target_file_);
63
+ }
64
+
65
+ template <typename ConsoleMutex>
66
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::flush() {
67
+ std::lock_guard<mutex_t> lock(mutex_);
68
+ fflush(target_file_);
69
+ }
70
+
71
+ template <typename ConsoleMutex>
72
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_pattern(const std::string &pattern) {
73
+ std::lock_guard<mutex_t> lock(mutex_);
74
+ formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
75
+ }
76
+
77
+ template <typename ConsoleMutex>
78
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_formatter(
79
+ std::unique_ptr<spdlog::formatter> sink_formatter) {
80
+ std::lock_guard<mutex_t> lock(mutex_);
81
+ formatter_ = std::move(sink_formatter);
82
+ }
83
+
84
+ template <typename ConsoleMutex>
85
+ SPDLOG_INLINE bool ansicolor_sink<ConsoleMutex>::should_color() const {
86
+ return should_do_colors_;
87
+ }
88
+
89
+ template <typename ConsoleMutex>
90
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_color_mode(color_mode mode) {
91
+ std::lock_guard<mutex_t> lock(mutex_);
92
+ set_color_mode_(mode);
93
+ }
94
+
95
+ template <typename ConsoleMutex>
96
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_color_mode_(color_mode mode) {
97
+ switch (mode) {
98
+ case color_mode::always:
99
+ should_do_colors_ = true;
100
+ return;
101
+ case color_mode::automatic:
102
+ should_do_colors_ =
103
+ details::os::in_terminal(target_file_) && details::os::is_color_terminal();
104
+ return;
105
+ case color_mode::never:
106
+ should_do_colors_ = false;
107
+ return;
108
+ default:
109
+ should_do_colors_ = false;
110
+ }
111
+ }
112
+
113
+ template <typename ConsoleMutex>
114
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::print_ccode_(
115
+ const string_view_t &color_code) const {
116
+ details::os::fwrite_bytes(color_code.data(), color_code.size(), target_file_);
117
+ }
118
+
119
+ template <typename ConsoleMutex>
120
+ SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::print_range_(const memory_buf_t &formatted,
121
+ size_t start,
122
+ size_t end) const {
123
+ details::os::fwrite_bytes(formatted.data() + start, end - start, target_file_);
124
+ }
125
+
126
+ template <typename ConsoleMutex>
127
+ SPDLOG_INLINE std::string ansicolor_sink<ConsoleMutex>::to_string_(const string_view_t &sv) {
128
+ return std::string(sv.data(), sv.size());
129
+ }
130
+
131
+ // ansicolor_stdout_sink
132
+ template <typename ConsoleMutex>
133
+ SPDLOG_INLINE ansicolor_stdout_sink<ConsoleMutex>::ansicolor_stdout_sink(color_mode mode)
134
+ : ansicolor_sink<ConsoleMutex>(stdout, mode) {}
135
+
136
+ // ansicolor_stderr_sink
137
+ template <typename ConsoleMutex>
138
+ SPDLOG_INLINE ansicolor_stderr_sink<ConsoleMutex>::ansicolor_stderr_sink(color_mode mode)
139
+ : ansicolor_sink<ConsoleMutex>(stderr, mode) {}
140
+
141
+ } // namespace sinks
142
+ } // namespace spdlog
@@ -0,0 +1,116 @@
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 <array>
7
+ #include <memory>
8
+ #include <mutex>
9
+ #include <spdlog/details/console_globals.h>
10
+ #include <spdlog/details/null_mutex.h>
11
+ #include <spdlog/sinks/sink.h>
12
+ #include <string>
13
+
14
+ namespace spdlog {
15
+ namespace sinks {
16
+
17
+ /**
18
+ * This sink prefixes the output with an ANSI escape sequence color code
19
+ * depending on the severity
20
+ * of the message.
21
+ * If no color terminal detected, omit the escape codes.
22
+ */
23
+
24
+ template <typename ConsoleMutex>
25
+ class ansicolor_sink : public sink {
26
+ public:
27
+ using mutex_t = typename ConsoleMutex::mutex_t;
28
+ ansicolor_sink(FILE *target_file, color_mode mode);
29
+ ~ansicolor_sink() override = default;
30
+
31
+ ansicolor_sink(const ansicolor_sink &other) = delete;
32
+ ansicolor_sink(ansicolor_sink &&other) = delete;
33
+
34
+ ansicolor_sink &operator=(const ansicolor_sink &other) = delete;
35
+ ansicolor_sink &operator=(ansicolor_sink &&other) = delete;
36
+
37
+ void set_color(level::level_enum color_level, string_view_t color);
38
+ void set_color_mode(color_mode mode);
39
+ bool should_color() const;
40
+
41
+ void log(const details::log_msg &msg) override;
42
+ void flush() override;
43
+ void set_pattern(const std::string &pattern) final override;
44
+ void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
45
+
46
+ // Formatting codes
47
+ const string_view_t reset = "\033[m";
48
+ const string_view_t bold = "\033[1m";
49
+ const string_view_t dark = "\033[2m";
50
+ const string_view_t underline = "\033[4m";
51
+ const string_view_t blink = "\033[5m";
52
+ const string_view_t reverse = "\033[7m";
53
+ const string_view_t concealed = "\033[8m";
54
+ const string_view_t clear_line = "\033[K";
55
+
56
+ // Foreground colors
57
+ const string_view_t black = "\033[30m";
58
+ const string_view_t red = "\033[31m";
59
+ const string_view_t green = "\033[32m";
60
+ const string_view_t yellow = "\033[33m";
61
+ const string_view_t blue = "\033[34m";
62
+ const string_view_t magenta = "\033[35m";
63
+ const string_view_t cyan = "\033[36m";
64
+ const string_view_t white = "\033[37m";
65
+
66
+ /// Background colors
67
+ const string_view_t on_black = "\033[40m";
68
+ const string_view_t on_red = "\033[41m";
69
+ const string_view_t on_green = "\033[42m";
70
+ const string_view_t on_yellow = "\033[43m";
71
+ const string_view_t on_blue = "\033[44m";
72
+ const string_view_t on_magenta = "\033[45m";
73
+ const string_view_t on_cyan = "\033[46m";
74
+ const string_view_t on_white = "\033[47m";
75
+
76
+ /// Bold colors
77
+ const string_view_t yellow_bold = "\033[33m\033[1m";
78
+ const string_view_t red_bold = "\033[31m\033[1m";
79
+ const string_view_t bold_on_red = "\033[1m\033[41m";
80
+
81
+ private:
82
+ FILE *target_file_;
83
+ mutex_t &mutex_;
84
+ bool should_do_colors_;
85
+ std::unique_ptr<spdlog::formatter> formatter_;
86
+ std::array<std::string, level::n_levels> colors_;
87
+ void set_color_mode_(color_mode mode);
88
+ void print_ccode_(const string_view_t &color_code) const;
89
+ void print_range_(const memory_buf_t &formatted, size_t start, size_t end) const;
90
+ static std::string to_string_(const string_view_t &sv);
91
+ };
92
+
93
+ template <typename ConsoleMutex>
94
+ class ansicolor_stdout_sink : public ansicolor_sink<ConsoleMutex> {
95
+ public:
96
+ explicit ansicolor_stdout_sink(color_mode mode = color_mode::automatic);
97
+ };
98
+
99
+ template <typename ConsoleMutex>
100
+ class ansicolor_stderr_sink : public ansicolor_sink<ConsoleMutex> {
101
+ public:
102
+ explicit ansicolor_stderr_sink(color_mode mode = color_mode::automatic);
103
+ };
104
+
105
+ using ansicolor_stdout_sink_mt = ansicolor_stdout_sink<details::console_mutex>;
106
+ using ansicolor_stdout_sink_st = ansicolor_stdout_sink<details::console_nullmutex>;
107
+
108
+ using ansicolor_stderr_sink_mt = ansicolor_stderr_sink<details::console_mutex>;
109
+ using ansicolor_stderr_sink_st = ansicolor_stderr_sink<details::console_nullmutex>;
110
+
111
+ } // namespace sinks
112
+ } // namespace spdlog
113
+
114
+ #ifdef SPDLOG_HEADER_ONLY
115
+ #include "ansicolor_sink-inl.h"
116
+ #endif
@@ -0,0 +1,59 @@
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/base_sink.h>
8
+ #endif
9
+
10
+ #include <spdlog/common.h>
11
+ #include <spdlog/pattern_formatter.h>
12
+
13
+ #include <memory>
14
+ #include <mutex>
15
+
16
+ template <typename Mutex>
17
+ SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::base_sink()
18
+ : formatter_{details::make_unique<spdlog::pattern_formatter>()} {}
19
+
20
+ template <typename Mutex>
21
+ SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::base_sink(
22
+ std::unique_ptr<spdlog::formatter> formatter)
23
+ : formatter_{std::move(formatter)} {}
24
+
25
+ template <typename Mutex>
26
+ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::log(const details::log_msg &msg) {
27
+ std::lock_guard<Mutex> lock(mutex_);
28
+ sink_it_(msg);
29
+ }
30
+
31
+ template <typename Mutex>
32
+ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::flush() {
33
+ std::lock_guard<Mutex> lock(mutex_);
34
+ flush_();
35
+ }
36
+
37
+ template <typename Mutex>
38
+ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern(const std::string &pattern) {
39
+ std::lock_guard<Mutex> lock(mutex_);
40
+ set_pattern_(pattern);
41
+ }
42
+
43
+ template <typename Mutex>
44
+ void SPDLOG_INLINE
45
+ spdlog::sinks::base_sink<Mutex>::set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) {
46
+ std::lock_guard<Mutex> lock(mutex_);
47
+ set_formatter_(std::move(sink_formatter));
48
+ }
49
+
50
+ template <typename Mutex>
51
+ void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern_(const std::string &pattern) {
52
+ set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
53
+ }
54
+
55
+ template <typename Mutex>
56
+ void SPDLOG_INLINE
57
+ spdlog::sinks::base_sink<Mutex>::set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) {
58
+ formatter_ = std::move(sink_formatter);
59
+ }
@@ -0,0 +1,51 @@
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
+ // base sink templated over a mutex (either dummy or real)
7
+ // concrete implementation should override the sink_it_() and flush_() methods.
8
+ // locking is taken care of in this class - no locking needed by the
9
+ // implementers..
10
+ //
11
+
12
+ #include <spdlog/common.h>
13
+ #include <spdlog/details/log_msg.h>
14
+ #include <spdlog/sinks/sink.h>
15
+
16
+ namespace spdlog {
17
+ namespace sinks {
18
+ template <typename Mutex>
19
+ class SPDLOG_API base_sink : public sink {
20
+ public:
21
+ base_sink();
22
+ explicit base_sink(std::unique_ptr<spdlog::formatter> formatter);
23
+ ~base_sink() override = default;
24
+
25
+ base_sink(const base_sink &) = delete;
26
+ base_sink(base_sink &&) = delete;
27
+
28
+ base_sink &operator=(const base_sink &) = delete;
29
+ base_sink &operator=(base_sink &&) = delete;
30
+
31
+ void log(const details::log_msg &msg) final override;
32
+ void flush() final override;
33
+ void set_pattern(const std::string &pattern) final override;
34
+ void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final override;
35
+
36
+ protected:
37
+ // sink formatter
38
+ std::unique_ptr<spdlog::formatter> formatter_;
39
+ Mutex mutex_;
40
+
41
+ virtual void sink_it_(const details::log_msg &msg) = 0;
42
+ virtual void flush_() = 0;
43
+ virtual void set_pattern_(const std::string &pattern);
44
+ virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter);
45
+ };
46
+ } // namespace sinks
47
+ } // namespace spdlog
48
+
49
+ #ifdef SPDLOG_HEADER_ONLY
50
+ #include "base_sink-inl.h"
51
+ #endif
@@ -0,0 +1,48 @@
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/basic_file_sink.h>
8
+ #endif
9
+
10
+ #include <spdlog/common.h>
11
+ #include <spdlog/details/os.h>
12
+
13
+ namespace spdlog {
14
+ namespace sinks {
15
+
16
+ template <typename Mutex>
17
+ SPDLOG_INLINE basic_file_sink<Mutex>::basic_file_sink(const filename_t &filename,
18
+ bool truncate,
19
+ const file_event_handlers &event_handlers)
20
+ : file_helper_{event_handlers} {
21
+ file_helper_.open(filename, truncate);
22
+ }
23
+
24
+ template <typename Mutex>
25
+ SPDLOG_INLINE const filename_t &basic_file_sink<Mutex>::filename() const {
26
+ return file_helper_.filename();
27
+ }
28
+
29
+ template <typename Mutex>
30
+ SPDLOG_INLINE void basic_file_sink<Mutex>::truncate() {
31
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
32
+ file_helper_.reopen(true);
33
+ }
34
+
35
+ template <typename Mutex>
36
+ SPDLOG_INLINE void basic_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
37
+ memory_buf_t formatted;
38
+ base_sink<Mutex>::formatter_->format(msg, formatted);
39
+ file_helper_.write(formatted);
40
+ }
41
+
42
+ template <typename Mutex>
43
+ SPDLOG_INLINE void basic_file_sink<Mutex>::flush_() {
44
+ file_helper_.flush();
45
+ }
46
+
47
+ } // namespace sinks
48
+ } // namespace spdlog