GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 84.7% 233 / 0 / 275
Functions: 90.0% 45 / 0 / 50
Branches: 50.5% 100 / 0 / 198

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/48
void 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/48
void 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/46
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 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/50
void 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