6#ifndef SPDLOG_HEADER_ONLY
79 dest_.resize(
static_cast<size_t>(new_size));
106template<
typename ScopedPadder>
122template<
typename ScopedPadder>
133 ScopedPadder p(level_name.size(),
padinfo_, dest);
139template<
typename ScopedPadder>
150 ScopedPadder p(level_name.size(),
padinfo_, dest);
159static const char *
ampm(
const tm &t)
161 return t.tm_hour >= 12 ?
"PM" :
"AM";
166 return t.tm_hour > 12 ? t.tm_hour - 12 : t.tm_hour;
172template<
typename ScopedPadder>
183 ScopedPadder p(field_value.size(),
padinfo_, dest);
191template<
typename ScopedPadder>
202 ScopedPadder p(field_value.size(),
padinfo_, dest);
208static const std::array<const char *, 12> months{{
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sept",
"Oct",
"Nov",
"Dec"}};
210template<
typename ScopedPadder>
221 ScopedPadder p(field_value.size(),
padinfo_, dest);
228 {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"}};
230template<
typename ScopedPadder>
241 ScopedPadder p(field_value.size(),
padinfo_, dest);
247template<
typename ScopedPadder>
257 const size_t field_size = 24;
258 ScopedPadder p(field_size,
padinfo_, dest);
279template<
typename ScopedPadder>
289 const size_t field_size = 2;
290 ScopedPadder p(field_size,
padinfo_, dest);
296template<
typename ScopedPadder>
306 const size_t field_size = 10;
307 ScopedPadder p(field_size,
padinfo_, dest);
318template<
typename ScopedPadder>
328 const size_t field_size = 4;
329 ScopedPadder p(field_size,
padinfo_, dest);
335template<
typename ScopedPadder>
345 const size_t field_size = 2;
346 ScopedPadder p(field_size,
padinfo_, dest);
352template<
typename ScopedPadder>
362 const size_t field_size = 2;
363 ScopedPadder p(field_size,
padinfo_, dest);
369template<
typename ScopedPadder>
379 const size_t field_size = 2;
380 ScopedPadder p(field_size,
padinfo_, dest);
386template<
typename ScopedPadder>
396 const size_t field_size = 2;
397 ScopedPadder p(field_size,
padinfo_, dest);
403template<
typename ScopedPadder>
413 const size_t field_size = 2;
414 ScopedPadder p(field_size,
padinfo_, dest);
420template<
typename ScopedPadder>
430 const size_t field_size = 2;
431 ScopedPadder p(field_size,
padinfo_, dest);
437template<
typename ScopedPadder>
447 auto millis = fmt_helper::time_fraction<std::chrono::milliseconds>(msg.
time);
448 const size_t field_size = 3;
449 ScopedPadder p(field_size,
padinfo_, dest);
455template<
typename ScopedPadder>
465 auto micros = fmt_helper::time_fraction<std::chrono::microseconds>(msg.
time);
467 const size_t field_size = 6;
468 ScopedPadder p(field_size,
padinfo_, dest);
474template<
typename ScopedPadder>
484 auto ns = fmt_helper::time_fraction<std::chrono::nanoseconds>(msg.
time);
485 const size_t field_size = 9;
486 ScopedPadder p(field_size,
padinfo_, dest);
492template<
typename ScopedPadder>
502 const size_t field_size = 10;
503 ScopedPadder p(field_size,
padinfo_, dest);
504 auto duration = msg.
time.time_since_epoch();
505 auto seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
511template<
typename ScopedPadder>
521 const size_t field_size = 2;
522 ScopedPadder p(field_size,
padinfo_, dest);
528template<
typename ScopedPadder>
538 const size_t field_size = 11;
539 ScopedPadder p(field_size,
padinfo_, dest);
552template<
typename ScopedPadder>
562 const size_t field_size = 5;
563 ScopedPadder p(field_size,
padinfo_, dest);
572template<
typename ScopedPadder>
582 const size_t field_size = 8;
583 ScopedPadder p(field_size,
padinfo_, dest);
594template<
typename ScopedPadder>
608 const size_t field_size = 6;
609 ScopedPadder p(field_size,
padinfo_, dest);
615 total_minutes = -total_minutes;
645template<
typename ScopedPadder>
655 const auto field_size = ScopedPadder::count_digits(msg.
thread_id);
656 ScopedPadder p(field_size,
padinfo_, dest);
662template<
typename ScopedPadder>
673 auto field_size = ScopedPadder::count_digits(pid);
674 ScopedPadder p(field_size,
padinfo_, dest);
679template<
typename ScopedPadder>
757template<
typename ScopedPadder>
783 ScopedPadder p(text_size,
padinfo_, dest);
791template<
typename ScopedPadder>
806 ScopedPadder p(text_size,
padinfo_, dest);
811template<
typename ScopedPadder>
820# pragma warning(push)
821# pragma warning(disable : 4127)
830 return rv !=
nullptr ? rv + 1 : filename;
838 return it != end ? it.base() : filename;
853 ScopedPadder p(text_size,
padinfo_, dest);
858template<
typename ScopedPadder>
873 auto field_size = ScopedPadder::count_digits(msg.
source.
line);
874 ScopedPadder p(field_size,
padinfo_, dest);
880template<
typename ScopedPadder>
895 ScopedPadder p(text_size,
padinfo_, dest);
901template<
typename ScopedPadder,
typename Units>
915 auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
917 auto delta_count =
static_cast<size_t>(delta_units.count());
918 auto n_digits =
static_cast<size_t>(ScopedPadder::count_digits(delta_count));
919 ScopedPadder p(n_digits,
padinfo_, dest);
943 auto duration = msg.
time.time_since_epoch();
944 auto secs = duration_cast<seconds>(duration);
972 auto millis = fmt_helper::time_fraction<milliseconds>(msg.
time);
1001 dest.push_back(
':');
1003 dest.push_back(
']');
1004 dest.push_back(
' ');
1019 : pattern_(
std::move(pattern))
1020 , eol_(
std::move(eol))
1021 , pattern_time_type_(time_type)
1023 , custom_handlers_(
std::move(custom_user_flags))
1032 , eol_(
std::move(eol))
1033 , pattern_time_type_(time_type)
1045 cloned_custom_formatters[it.first] = it.second->clone();
1052 auto secs = std::chrono::duration_cast<std::chrono::seconds>(msg.
time.time_since_epoch());
1082template<
typename Padder>
1089 auto custom_handler = it->second->clone();
1090 custom_handler->set_padding_info(padding);
1099 formatters_.push_back(details::make_unique<details::full_formatter>(padding));
1222 formatters_.push_back(details::make_unique<details::color_start_formatter>(padding));
1226 formatters_.push_back(details::make_unique<details::color_stop_formatter>(padding));
1250 formatters_.push_back(details::make_unique<details::ch_formatter>(
'%'));
1270 auto unknown_flag = details::make_unique<details::aggregate_formatter>();
1274 unknown_flag->add_ch(
'%');
1275 unknown_flag->add_ch(flag);
1285 unknown_flag->add_ch(flag);
1300 const size_t max_width = 64;
1303 return padding_info{};
1306 padding_info::pad_side side;
1310 side = padding_info::pad_side::right;
1314 side = padding_info::pad_side::center;
1322 if (it == end || !
std::isdigit(
static_cast<unsigned char>(*it)))
1324 return padding_info{};
1327 auto width =
static_cast<size_t>(*it) -
'0';
1328 for (++it; it != end &&
std::isdigit(
static_cast<unsigned char>(*it)); ++it)
1330 auto digit =
static_cast<size_t>(*it) -
'0';
1331 width = width * 10 + digit;
1336 if (it != end && *it ==
'!')
1351 auto end = pattern.
end();
1354 for (
auto it = pattern.
begin(); it != end; ++it)
1367 if (padding.enabled())
1369 handle_flag_<details::scoped_padder>(*it, padding);
1373 handle_flag_<details::null_scoped_padder>(*it, padding);
1385 user_chars = details::make_unique<details::aggregate_formatter>();
1387 user_chars->add_ch(*it);
scoped_padder(size_t wrapped_size, const padding_info &padinfo, memory_buf_t &dest)
static unsigned int count_digits(T n)
const padding_info & padinfo_
constexpr auto count() -> size_t
T duration_cast(T... args)
T find_first_of(T... args)
void pad6(T n, memory_buf_t &dest)
unsigned int count_digits(T n)
void pad3(T n, memory_buf_t &dest)
void append_string_view(spdlog::string_view_t view, memory_buf_t &dest)
void pad9(T n, memory_buf_t &dest)
void pad2(int n, memory_buf_t &dest)
void append_int(T n, memory_buf_t &dest)
static SPDLOG_CONSTEXPR const char folder_seps[]
SPDLOG_INLINE int utc_minutes_offset(const std::tm &tm)
SPDLOG_INLINE std::tm localtime() SPDLOG_NOEXCEPT
SPDLOG_INLINE int pid() SPDLOG_NOEXCEPT
SPDLOG_INLINE std::tm gmtime() SPDLOG_NOEXCEPT
static const std::array< const char *, 12 > months
static std::array< const char *, 7 > days
static const char * ampm(const tm &t)
std::unique_ptr< T > make_unique(Args &&...args)
static std::array< const char *, 7 > full_days
static const std::array< const char *, 12 > full_months
static int to12h(const tm &t)
SPDLOG_INLINE const string_view_t & to_string_view(spdlog::level::level_enum l) SPDLOG_NOEXCEPT
SPDLOG_INLINE const char * to_short_c_str(spdlog::level::level_enum l) SPDLOG_NOEXCEPT
fmt::basic_string_view< char > string_view_t
fmt::basic_memory_buffer< char, 250 > memory_buf_t
log_clock::time_point time
string_view_t logger_name
null_scoped_padder(size_t, const padding_info &, memory_buf_t &)
static unsigned int count_digits(T)
SPDLOG_CONSTEXPR bool empty() const SPDLOG_NOEXCEPT