diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 3c7a937c..08e25fa5 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -1694,10 +1694,9 @@ class get_locale { } }; -template +template struct duration_formatter { - FormatContext& context; + locale_ref locale; OutputIt out; int precision; bool localized = false; @@ -1711,15 +1710,11 @@ struct duration_formatter { using milliseconds = std::chrono::duration; bool negative; - using char_type = typename FormatContext::char_type; - using tm_writer_type = tm_writer; + using tm_writer_type = tm_writer; - duration_formatter(FormatContext& ctx, OutputIt o, + duration_formatter(locale_ref loc, OutputIt o, std::chrono::duration d) - : context(ctx), - out(o), - val(static_cast(d.count())), - negative(false) { + : locale(loc), out(o), val(static_cast(d.count())), negative(false) { if (d.count() < 0) { val = 0 - val; negative = true; @@ -1784,7 +1779,7 @@ struct duration_formatter { if (width > num_digits) { out = detail::write_padding(out, pad, width - num_digits); } - out = format_decimal(out, n, num_digits); + out = format_decimal(out, n, num_digits); } void write_nan() { std::copy_n("nan", 3, out); } @@ -1792,14 +1787,14 @@ struct duration_formatter { template void format_tm(const tm& time, Callback cb, Args... args) { if (isnan(val)) return write_nan(); - get_locale loc(localized, context.locale()); + get_locale loc(localized, locale); auto w = tm_writer_type(loc, out, time); (w.*cb)(args...); out = w.out(); } - void on_text(const char_type* begin, const char_type* end) { - copy(begin, end, out); + void on_text(const Char* begin, const Char* end) { + copy(begin, end, out); } // These are not implemented because durations don't have date information. @@ -1871,10 +1866,10 @@ struct duration_formatter { if (negative) *out++ = '-'; if (buf.size() < 2 || buf[1] == '.') out = detail::write_padding(out, pad); - out = copy(buf.begin(), buf.end(), out); + out = copy(buf.begin(), buf.end(), out); } else { write(second(), 2, pad); - write_fractional_seconds( + write_fractional_seconds( out, std::chrono::duration(val), precision); } return; @@ -1916,12 +1911,10 @@ struct duration_formatter { void on_duration_value() { if (handle_nan_inf()) return; write_sign(); - out = format_duration_value(out, val, precision); + out = format_duration_value(out, val, precision); } - void on_duration_unit() { - out = format_duration_unit(out); - } + void on_duration_unit() { out = format_duration_unit(out); } }; } // namespace detail @@ -2181,8 +2174,8 @@ struct formatter, Char> { detail::format_duration_unit(out); } else { using duration_formatter = - detail::duration_formatter; - auto f = duration_formatter(ctx, out, d); + detail::duration_formatter; + auto f = duration_formatter(ctx.locale(), out, d); f.precision = precision; f.localized = localized_; detail::parse_chrono_format(begin, end, f);