src/internal/config_diagnostics.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #ifndef DETOURMODKIT_INTERNAL_CONFIG_DIAGNOSTICS_HPP | ||
| 2 | #define DETOURMODKIT_INTERNAL_CONFIG_DIAGNOSTICS_HPP | ||
| 3 | |||
| 4 | /** | ||
| 5 | * @file internal/config_diagnostics.hpp | ||
| 6 | * @brief Deferred diagnostic records for a critical section. | ||
| 7 | * @details A config producer records a source-stamped line under its lock. The caller emits that line after unlock. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include "DetourModKit/logger.hpp" | ||
| 11 | |||
| 12 | #include <format> | ||
| 13 | #include <source_location> | ||
| 14 | #include <string> | ||
| 15 | #include <string_view> | ||
| 16 | #include <type_traits> | ||
| 17 | #include <utility> | ||
| 18 | #include <vector> | ||
| 19 | |||
| 20 | namespace DetourModKit::detail | ||
| 21 | { | ||
| 22 | /** | ||
| 23 | * @class LoggerDropAccess | ||
| 24 | * @brief Provides private drop-count access to internal no-throw record adapters. | ||
| 25 | */ | ||
| 26 | class LoggerDropAccess | ||
| 27 | { | ||
| 28 | public: | ||
| 29 | /// Adds one internal record loss to @p logger without sink delivery. | ||
| 30 | ✗ | static void record(Logger &logger) noexcept | |
| 31 | { | ||
| 32 | ✗ | logger.m_dropped_messages.fetch_add(1, std::memory_order_relaxed); | |
| 33 | ✗ | } | |
| 34 | |||
| 35 | private: | ||
| 36 | LoggerDropAccess() = delete; | ||
| 37 | }; | ||
| 38 | } // namespace DetourModKit::detail | ||
| 39 | |||
| 40 | namespace DetourModKit::config::detail | ||
| 41 | { | ||
| 42 | /** | ||
| 43 | * @struct DeferredDiagnostic | ||
| 44 | * @brief One config diagnostic for emission after unlock. | ||
| 45 | */ | ||
| 46 | struct DeferredDiagnostic | ||
| 47 | { | ||
| 48 | LogLevel level{LogLevel::Info}; | ||
| 49 | std::string line; | ||
| 50 | }; | ||
| 51 | |||
| 52 | /** | ||
| 53 | * @struct DeferredDiagnostics | ||
| 54 | * @brief The config records of one critical section and the threshold captured before its lock. | ||
| 55 | * @details @ref threshold preserves the direct logger's lazy format rule. | ||
| 56 | */ | ||
| 57 | struct DeferredDiagnostics | ||
| 58 | { | ||
| 59 | LogLevel threshold{LogLevel::Trace}; | ||
| 60 | std::vector<DeferredDiagnostic> records; | ||
| 61 | }; | ||
| 62 | |||
| 63 | /// Returns an empty record list whose threshold is the current process logger level. | ||
| 64 | [[nodiscard]] DeferredDiagnostics open_deferred_diagnostics() noexcept; | ||
| 65 | |||
| 66 | 405 | [[nodiscard]] constexpr std::string_view deferred_source_basename(std::string_view path) noexcept | |
| 67 | { | ||
| 68 | 405 | const auto pos = path.find_last_of("/\\"); | |
| 69 |
1/2✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 405 times.
|
405 | return pos == std::string_view::npos ? path : path.substr(pos + 1); |
| 70 | } | ||
| 71 | |||
| 72 | /** | ||
| 73 | * @brief Records one line with the explicit @p where stamp when @p level passes the captured threshold. | ||
| 74 | * @details The format and list append allocate. Keep this off callback paths. | ||
| 75 | */ | ||
| 76 | template <typename... Args> | ||
| 77 | 1124 | void defer_diagnostic_at( | |
| 78 | DeferredDiagnostics &diags, | ||
| 79 | LogLevel level, | ||
| 80 | std::source_location where, | ||
| 81 | std::format_string<std::type_identity_t<Args>...> fmt, | ||
| 82 | Args &&...args | ||
| 83 | ) | ||
| 84 | { | ||
| 85 |
31/48void DetourModKit::config::detail::defer_diagnostic_at<>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char>):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 8 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&):
✓ Branch 2 → 3 taken 287 times.
✓ Branch 2 → 4 taken 17 times.
void DetourModKit::config::detail::defer_diagnostic_at<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, char const*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14]>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type>, char const (&) [14]):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 2 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 4 taken 7 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*&&):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 4 taken 3 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 6 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<float const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 4 taken 1 time.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<int const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&):
✓ Branch 2 → 3 taken 4 times.
✓ Branch 2 → 4 taken 1 time.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 2 → 3 taken 4 times.
✓ Branch 2 → 4 taken 5 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<unsigned long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 8 times.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long const&, unsigned long long&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long const&>::type>::type, std::type_identity<std::type_identity<unsigned long long&>::type>::type>, unsigned long long const&, unsigned long long&):
✓ Branch 2 → 3 taken 17 times.
✓ Branch 2 → 4 taken 1 time.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 2 → 3 taken 197 times.
✓ Branch 2 → 4 taken 49 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 2 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<long long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 37 times.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<float&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 4 times.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 4 times.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 2 times.
void DetourModKit::config::detail::defer_diagnostic_at<std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 2 → 3 taken 207 times.
✓ Branch 2 → 4 taken 6 times.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, unsigned long long&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 229 times.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, unsigned long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<unsigned long long>::type>::type>, unsigned long long&&, unsigned long long&&):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 11 times.
|
1124 | if (level < diags.threshold) |
| 86 | { | ||
| 87 | 719 | return; | |
| 88 | } | ||
| 89 |
22/48void DetourModKit::config::detail::defer_diagnostic_at<>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char>):
✓ Branch 10 → 11 taken 8 times.
✗ Branch 10 → 15 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&):
✓ Branch 12 → 13 taken 17 times.
✗ Branch 12 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, char const*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14]>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type>, char const (&) [14]):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 14 → 15 taken 2 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 12 → 13 taken 7 times.
✗ Branch 12 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*&&):
✓ Branch 14 → 15 taken 3 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&):
✓ Branch 14 → 15 taken 6 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<float const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<int const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 14 → 15 taken 5 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&&):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<unsigned long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long&&):
✓ Branch 14 → 15 taken 8 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long const&, unsigned long long&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long const&>::type>::type, std::type_identity<std::type_identity<unsigned long long&>::type>::type>, unsigned long long const&, unsigned long long&):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 12 → 13 taken 49 times.
✗ Branch 12 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 14 → 15 taken 2 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&&):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<long long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long&&):
✓ Branch 14 → 15 taken 37 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<float&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&):
✓ Branch 16 → 17 taken 4 times.
✗ Branch 16 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&):
✓ Branch 16 → 17 taken 4 times.
✗ Branch 16 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 16 → 17 taken 2 times.
✗ Branch 16 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 12 → 13 taken 6 times.
✗ Branch 12 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, unsigned long long&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 14 → 15 taken 229 times.
✗ Branch 14 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, unsigned long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<unsigned long long>::type>::type>, unsigned long long&&, unsigned long long&&):
✓ Branch 14 → 15 taken 11 times.
✗ Branch 14 → 19 not taken.
|
405 | diags.records.push_back({ |
| 90 | .level = level, | ||
| 91 | .line = std::format( | ||
| 92 | "[{}:{}] {}", | ||
| 93 | 405 | deferred_source_basename(where.file_name()), | |
| 94 | 405 | where.line(), | |
| 95 |
21/46void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&):
✓ Branch 6 → 7 taken 17 times.
✗ Branch 6 → 25 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, char const*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14]>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type>, char const (&) [14]):
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 25 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 6 → 7 taken 7 times.
✗ Branch 6 → 25 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*&&):
✓ Branch 8 → 9 taken 3 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&):
✓ Branch 8 → 9 taken 6 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<float const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<int const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 8 → 9 taken 5 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&&):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<unsigned long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long&&):
✓ Branch 8 → 9 taken 8 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long const&, unsigned long long&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long const&>::type>::type, std::type_identity<std::type_identity<unsigned long long&>::type>::type>, unsigned long long const&, unsigned long long&):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 6 → 7 taken 49 times.
✗ Branch 6 → 25 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&&):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<long long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long&&):
✓ Branch 8 → 9 taken 37 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<float&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&):
✓ Branch 10 → 11 taken 4 times.
✗ Branch 10 → 29 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&):
✓ Branch 10 → 11 taken 4 times.
✗ Branch 10 → 29 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 10 → 11 taken 2 times.
✗ Branch 10 → 29 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 6 → 7 taken 6 times.
✗ Branch 6 → 25 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, unsigned long long&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 8 → 9 taken 229 times.
✗ Branch 8 → 27 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, unsigned long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<unsigned long long>::type>::type>, unsigned long long&&, unsigned long long&&):
✓ Branch 8 → 9 taken 11 times.
✗ Branch 8 → 27 not taken.
|
1130 | std::format(fmt, std::forward<Args>(args)...) |
| 96 | ), | ||
| 97 | }); | ||
| 98 |
23/50void DetourModKit::config::detail::defer_diagnostic_at<>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char>):
✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 23 not taken.
✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 17 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&):
✓ Branch 11 → 12 taken 17 times.
✗ Branch 11 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, char const*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14]>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type>, char const (&) [14]):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const (&) [14]>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, char const (&) [14], std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 13 → 14 taken 2 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 11 → 12 taken 7 times.
✗ Branch 11 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*&&):
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string_view<char, std::char_traits<char> > const&):
✓ Branch 13 → 14 taken 6 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<float const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float const&):
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<int const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&):
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✓ Branch 13 → 14 taken 5 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&&):
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type>::type, std::type_identity<std::type_identity<unsigned long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long&&):
✓ Branch 13 → 14 taken 8 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long const&, unsigned long long&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long const&>::type>::type, std::type_identity<std::type_identity<unsigned long long&>::type>::type>, unsigned long long const&, unsigned long long&):
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 11 → 12 taken 49 times.
✗ Branch 11 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 13 → 14 taken 2 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&&):
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<long long>::type>::type>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, long long&&):
✓ Branch 13 → 14 taken 37 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<float&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&):
✓ Branch 15 → 16 taken 4 times.
✗ Branch 15 → 23 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<int&>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&):
✓ Branch 15 → 16 taken 4 times.
✗ Branch 15 → 23 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<char const*&>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type, std::type_identity<std::type_identity<char const*>::type>::type>, char const*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*&&):
✓ Branch 15 → 16 taken 2 times.
✗ Branch 15 → 23 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<std::basic_string_view<char, std::char_traits<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<std::basic_string_view<char, std::char_traits<char> >&>::type>::type>, std::basic_string_view<char, std::char_traits<char> >&):
✓ Branch 11 → 12 taken 6 times.
✗ Branch 11 → 19 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type>::type>, unsigned long long&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&):
✓ Branch 13 → 14 taken 229 times.
✗ Branch 13 → 21 not taken.
void DetourModKit::config::detail::defer_diagnostic_at<unsigned long long, unsigned long long>(DetourModKit::config::detail::DeferredDiagnostics&, DetourModKit::LogLevel, std::source_location, std::basic_format_string<char, std::type_identity<std::type_identity<unsigned long long>::type>::type, std::type_identity<std::type_identity<unsigned long long>::type>::type>, unsigned long long&&, unsigned long long&&):
✓ Branch 13 → 14 taken 11 times.
✗ Branch 13 → 21 not taken.
|
1215 | } |
| 99 | |||
| 100 | /** | ||
| 101 | * @brief Records one source-stamped line when @p level passes the captured threshold. | ||
| 102 | * @details The format and list append allocate. Keep this off callback paths. | ||
| 103 | */ | ||
| 104 | template <typename... Args> | ||
| 105 | 911 | void defer_diagnostic( | |
| 106 | DeferredDiagnostics &diags, | ||
| 107 | LogLevel level, | ||
| 108 | LocatedFormat<std::type_identity_t<Args>...> fmt, | ||
| 109 | Args &&...args | ||
| 110 | ) | ||
| 111 | { | ||
| 112 | 1266 | defer_diagnostic_at(diags, level, fmt.where, fmt.fmt, std::forward<Args>(args)...); | |
| 113 | 911 | } | |
| 114 | |||
| 115 | /** | ||
| 116 | * @brief Records the canonical StoppableWorker start line through a type-erased context. | ||
| 117 | * @details The context must point to DeferredDiagnostics. A format failure increments the logger drop count and | ||
| 118 | * suppresses the exception. | ||
| 119 | * @param context The DeferredDiagnostics address. | ||
| 120 | * @param name The worker name. | ||
| 121 | * @param where The original record source. | ||
| 122 | */ | ||
| 123 | 213 | inline void defer_worker_start_diagnostic(void *context, std::string_view name, std::source_location where) noexcept | |
| 124 | { | ||
| 125 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 213 times.
|
213 | if (context == nullptr) |
| 126 | { | ||
| 127 | ✗ | return; | |
| 128 | } | ||
| 129 | 213 | auto &diags = *static_cast<DeferredDiagnostics *>(context); | |
| 130 | try | ||
| 131 | { | ||
| 132 |
1/2✓ Branch 4 → 5 taken 213 times.
✗ Branch 4 → 7 not taken.
|
213 | defer_diagnostic_at(diags, LogLevel::Debug, where, "StoppableWorker '{}' started.", name); |
| 133 | } | ||
| 134 | ✗ | catch (...) | |
| 135 | { | ||
| 136 | ✗ | DetourModKit::detail::LoggerDropAccess::record(log()); | |
| 137 | ✗ | } | |
| 138 | } | ||
| 139 | |||
| 140 | /** | ||
| 141 | * @brief Emits every record in @p diags through the process logger, then clears the list. | ||
| 142 | * @details The caller must hold no lock that a producer of these records took. Delivery is best-effort: a sink or | ||
| 143 | * format failure drops the record and leaves the count in Logger::dropped_count(). | ||
| 144 | */ | ||
| 145 | void emit_deferred_diagnostics(DeferredDiagnostics &diags) noexcept; | ||
| 146 | } // namespace DetourModKit::config::detail | ||
| 147 | |||
| 148 | #endif // DETOURMODKIT_INTERNAL_CONFIG_DIAGNOSTICS_HPP | ||
| 149 |