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