Cleanup contexts

This commit is contained in:
Victor Zverovich 2024-01-10 13:09:55 -08:00
parent 2595bf57b3
commit da7a232b9e
6 changed files with 25 additions and 26 deletions

View File

@ -1879,11 +1879,11 @@ using basic_format_context =
using format_context = context; using format_context = context;
template <typename Char> template <typename Char>
using buffer_context = basic_format_context<basic_appender<Char>, Char>; using buffered_context = basic_format_context<basic_appender<Char>, Char>;
template <typename T, typename Char = char> template <typename T, typename Char = char>
using is_formattable = bool_constant<!std::is_base_of< using is_formattable = bool_constant<!std::is_base_of<
detail::unformattable, decltype(detail::arg_mapper<buffer_context<Char>>() detail::unformattable, decltype(detail::arg_mapper<buffered_context<Char>>()
.map(std::declval<T&>()))>::value>; .map(std::declval<T&>()))>::value>;
/** /**
@ -2518,7 +2518,7 @@ template <typename T, typename ParseContext>
FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx)
-> decltype(ctx.begin()) { -> decltype(ctx.begin()) {
using char_type = typename ParseContext::char_type; using char_type = typename ParseContext::char_type;
using context = buffer_context<char_type>; using context = buffered_context<char_type>;
using mapped_type = conditional_t< using mapped_type = conditional_t<
mapped_type_constant<T, context>::value != type::custom_type, mapped_type_constant<T, context>::value != type::custom_type,
decltype(arg_mapper<context>().map(std::declval<const T&>())), decltype(arg_mapper<context>().map(std::declval<const T&>())),
@ -2589,7 +2589,7 @@ template <typename Char, typename... Args> class format_string_checker {
public: public:
explicit FMT_CONSTEXPR format_string_checker(basic_string_view<Char> fmt) explicit FMT_CONSTEXPR format_string_checker(basic_string_view<Char> fmt)
: types_{mapped_type_constant<Args, buffer_context<Char>>::value...}, : types_{mapped_type_constant<Args, buffered_context<Char>>::value...},
context_(fmt, num_args, types_), context_(fmt, num_args, types_),
parse_funcs_{&parse_format_specs<Args, parse_context_type>...} {} parse_funcs_{&parse_format_specs<Args, parse_context_type>...} {}
@ -2652,16 +2652,15 @@ void check_format_string(S format_str) {
ignore_unused(error); ignore_unused(error);
} }
// Use vformat_args and avoid type_identity to keep symbols short and workaround
// a GCC <= 4.8 bug.
template <typename Char = char> struct vformat_args { template <typename Char = char> struct vformat_args {
using type = using type = basic_format_args<buffered_context<Char>>;
basic_format_args<basic_format_context<basic_appender<Char>, Char>>;
}; };
template <> struct vformat_args<char> { template <> struct vformat_args<char> {
using type = format_args; using type = format_args;
}; };
// Use vformat_args and avoid type_identity, keep symbols short and workaround
// a GCC <= 4.8 bug.
template <typename Char> template <typename Char>
void vformat_to(buffer<Char>& buf, basic_string_view<Char> fmt, void vformat_to(buffer<Char>& buf, basic_string_view<Char> fmt,
typename vformat_args<Char>::type args, locale_ref loc = {}); typename vformat_args<Char>::type args, locale_ref loc = {});

View File

@ -441,9 +441,9 @@ template <typename T> struct styled_arg : detail::view {
}; };
template <typename Char> template <typename Char>
void vformat_to(buffer<Char>& buf, const text_style& ts, void vformat_to(
basic_string_view<Char> format_str, buffer<Char>& buf, const text_style& ts, basic_string_view<Char> format_str,
basic_format_args<buffer_context<type_identity_t<Char>>> args) { basic_format_args<buffered_context<type_identity_t<Char>>> args) {
bool has_style = false; bool has_style = false;
if (ts.has_emphasis()) { if (ts.has_emphasis()) {
has_style = true; has_style = true;

View File

@ -3843,7 +3843,7 @@ FMT_CONSTEXPR auto write(OutputIt out, const T& value)
// iterator. It's a class and not a generic lambda for compatibility with C++11. // iterator. It's a class and not a generic lambda for compatibility with C++11.
template <typename Char> struct default_arg_formatter { template <typename Char> struct default_arg_formatter {
using iterator = basic_appender<Char>; using iterator = basic_appender<Char>;
using context = buffer_context<Char>; using context = buffered_context<Char>;
iterator out; iterator out;
basic_format_args<context> args; basic_format_args<context> args;
@ -3862,7 +3862,7 @@ template <typename Char> struct default_arg_formatter {
template <typename Char> struct arg_formatter { template <typename Char> struct arg_formatter {
using iterator = basic_appender<Char>; using iterator = basic_appender<Char>;
using context = buffer_context<Char>; using context = buffered_context<Char>;
iterator out; iterator out;
const format_specs<Char>& specs; const format_specs<Char>& specs;
@ -4362,10 +4362,10 @@ void vformat_to(buffer<Char>& buf, basic_string_view<Char> fmt,
struct format_handler { struct format_handler {
basic_format_parse_context<Char> parse_context; basic_format_parse_context<Char> parse_context;
buffer_context<Char> context; buffered_context<Char> context;
format_handler(basic_appender<Char> p_out, basic_string_view<Char> str, format_handler(basic_appender<Char> p_out, basic_string_view<Char> str,
basic_format_args<buffer_context<Char>> p_args, basic_format_args<buffered_context<Char>> p_args,
locale_ref p_loc) locale_ref p_loc)
: parse_context(str), context(p_out, p_args, p_loc) {} : parse_context(str), context(p_out, p_args, p_loc) {}

View File

@ -223,7 +223,7 @@ template <typename... Args>
void print(std::wostream& os, void print(std::wostream& os,
basic_format_string<wchar_t, type_identity_t<Args>...> fmt, basic_format_string<wchar_t, type_identity_t<Args>...> fmt,
Args&&... args) { Args&&... args) {
vprint(os, fmt, fmt::make_format_args<buffer_context<wchar_t>>(args...)); vprint(os, fmt, fmt::make_format_args<buffered_context<wchar_t>>(args...));
} }
FMT_EXPORT template <typename... T> FMT_EXPORT template <typename... T>

View File

@ -384,8 +384,8 @@ template <typename Context> struct range_mapper {
template <typename Char, typename Element> template <typename Char, typename Element>
using range_formatter_type = using range_formatter_type =
formatter<remove_cvref_t<decltype(range_mapper<buffer_context<Char>>{}.map( formatter<remove_cvref_t<decltype(range_mapper<buffered_context<Char>>{}
std::declval<Element>()))>, .map(std::declval<Element>()))>,
Char>; Char>;
template <typename R> template <typename R>
@ -462,7 +462,7 @@ struct range_formatter<
template <typename R, typename FormatContext> template <typename R, typename FormatContext>
auto format(R&& range, FormatContext& ctx) const -> decltype(ctx.out()) { auto format(R&& range, FormatContext& ctx) const -> decltype(ctx.out()) {
detail::range_mapper<buffer_context<Char>> mapper; detail::range_mapper<buffered_context<Char>> mapper;
auto out = ctx.out(); auto out = ctx.out();
out = detail::copy_str<Char>(opening_bracket_, out); out = detail::copy_str<Char>(opening_bracket_, out);
int i = 0; int i = 0;

View File

@ -65,7 +65,7 @@ FMT_BEGIN_EXPORT
using wstring_view = basic_string_view<wchar_t>; using wstring_view = basic_string_view<wchar_t>;
using wformat_parse_context = basic_format_parse_context<wchar_t>; using wformat_parse_context = basic_format_parse_context<wchar_t>;
using wformat_context = buffer_context<wchar_t>; using wformat_context = buffered_context<wchar_t>;
using wformat_args = basic_format_args<wformat_context>; using wformat_args = basic_format_args<wformat_context>;
using wmemory_buffer = basic_memory_buffer<wchar_t>; using wmemory_buffer = basic_memory_buffer<wchar_t>;
@ -148,7 +148,7 @@ template <typename S, typename... T,
!std::is_same<Char, wchar_t>::value)> !std::is_same<Char, wchar_t>::value)>
auto format(const S& format_str, T&&... args) -> std::basic_string<Char> { auto format(const S& format_str, T&&... args) -> std::basic_string<Char> {
return vformat(detail::to_string_view(format_str), return vformat(detail::to_string_view(format_str),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename Locale, typename S, template <typename Locale, typename S,
@ -168,7 +168,7 @@ template <typename Locale, typename S, typename... T,
inline auto format(const Locale& loc, const S& format_str, T&&... args) inline auto format(const Locale& loc, const S& format_str, T&&... args)
-> std::basic_string<Char> { -> std::basic_string<Char> {
return detail::vformat(loc, detail::to_string_view(format_str), return detail::vformat(loc, detail::to_string_view(format_str),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename OutputIt, typename S, template <typename OutputIt, typename S,
@ -188,7 +188,7 @@ template <typename OutputIt, typename S, typename... T,
detail::is_exotic_char<Char>::value)> detail::is_exotic_char<Char>::value)>
inline auto format_to(OutputIt out, const S& fmt, T&&... args) -> OutputIt { inline auto format_to(OutputIt out, const S& fmt, T&&... args) -> OutputIt {
return vformat_to(out, detail::to_string_view(fmt), return vformat_to(out, detail::to_string_view(fmt),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename Locale, typename S, typename OutputIt, typename... Args, template <typename Locale, typename S, typename OutputIt, typename... Args,
@ -214,7 +214,7 @@ inline auto format_to(OutputIt out, const Locale& loc, const S& format_str,
T&&... args) -> T&&... args) ->
typename std::enable_if<enable, OutputIt>::type { typename std::enable_if<enable, OutputIt>::type {
return vformat_to(out, loc, detail::to_string_view(format_str), return vformat_to(out, loc, detail::to_string_view(format_str),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename OutputIt, typename Char, typename... Args, template <typename OutputIt, typename Char, typename... Args,
@ -237,7 +237,7 @@ template <typename OutputIt, typename S, typename... T,
inline auto format_to_n(OutputIt out, size_t n, const S& fmt, T&&... args) inline auto format_to_n(OutputIt out, size_t n, const S& fmt, T&&... args)
-> format_to_n_result<OutputIt> { -> format_to_n_result<OutputIt> {
return vformat_to_n(out, n, fmt::basic_string_view<Char>(fmt), return vformat_to_n(out, n, fmt::basic_string_view<Char>(fmt),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename S, typename... T, template <typename S, typename... T,
@ -246,7 +246,7 @@ template <typename S, typename... T,
inline auto formatted_size(const S& fmt, T&&... args) -> size_t { inline auto formatted_size(const S& fmt, T&&... args) -> size_t {
auto buf = detail::counting_buffer<Char>(); auto buf = detail::counting_buffer<Char>();
detail::vformat_to(buf, detail::to_string_view(fmt), detail::vformat_to(buf, detail::to_string_view(fmt),
fmt::make_format_args<buffer_context<Char>>(args...)); fmt::make_format_args<buffered_context<Char>>(args...));
return buf.count(); return buf.count();
} }