Helios Engine 0.1.0
A modular ECS based data-oriented C++23 game engine
 
Loading...
Searching...
No Matches
anonymous_namespace{logger.cpp}::SourceLocationFormatterFlag Class Referencefinal
Inheritance diagram for anonymous_namespace{logger.cpp}::SourceLocationFormatterFlag:

Public Member Functions

 SourceLocationFormatterFlag (spdlog::level::level_enum min_level) noexcept
 
void format (const spdlog::details::log_msg &msg, const std::tm &tm, spdlog::memory_buf_t &dest) override
 
auto clone () const -> std::unique_ptr< spdlog::custom_flag_formatter > override
 

Detailed Description

Definition at line 77 of file logger.cpp.

Constructor & Destructor Documentation

◆ SourceLocationFormatterFlag()

anonymous_namespace{logger.cpp}::SourceLocationFormatterFlag::SourceLocationFormatterFlag ( spdlog::level::level_enum  min_level)
inlineexplicitnoexcept

Definition at line 79 of file logger.cpp.

79: min_level_(min_level) {}

Member Function Documentation

◆ clone()

auto anonymous_namespace{logger.cpp}::SourceLocationFormatterFlag::clone ( ) const -> std::unique_ptr<spdlog::custom_flag_formatter>
inlineoverride

Definition at line 83 of file logger.cpp.

83 {
84 return std::make_unique<SourceLocationFormatterFlag>(min_level_);
85 }

◆ format()

void anonymous_namespace{logger.cpp}::SourceLocationFormatterFlag::format ( const spdlog::details::log_msg &  msg,
const std::tm &  tm,
spdlog::memory_buf_t &  dest 
)
override

Definition at line 91 of file logger.cpp.

92 {
93 // Only add source location if level is at or above minimum
94 if (msg.level < min_level_) [[likely]] {
95 return;
96 }
97
98 std::array<char, kFormatBufferReserveSize> buffer = {};
99
100 char* ptr = buffer.data();
101 char* const buffer_end = buffer.data() + buffer.size();
102
103 *ptr++ = ' ';
104 *ptr++ = '[';
105
106 if (msg.source.filename != nullptr) [[likely]] {
107 const std::string_view filename(msg.source.filename);
108 const auto remaining_space = static_cast<size_t>(std::distance(ptr, buffer_end));
109 const size_t copy_len = std::min(filename.size(), remaining_space - 20);
110 ptr = std::copy_n(filename.begin(), copy_len, ptr);
111 }
112
113 *ptr++ = ':';
114
115 // Use to_chars for safe formatting
116 const auto result = std::to_chars(ptr, buffer_end - 1, msg.source.line);
117 if (result.ec == std::errc{}) [[likely]] {
118 ptr = result.ptr;
119 } else {
120 *ptr++ = '?';
121 }
122
123 *ptr++ = ']';
124 dest.append(buffer.data(), ptr);
125}