mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-26 00:21:13 +00:00
Optimize common case
This commit is contained in:
parent
7431165f38
commit
397ad1bec3
@ -1365,7 +1365,26 @@ FMT_FUNC void report_system_error(int error_code,
|
||||
report_error(format_system_error, error_code, message);
|
||||
}
|
||||
|
||||
struct stringifier {
|
||||
template <typename T> FMT_INLINE std::string operator()(T value) const {
|
||||
return to_string(value);
|
||||
}
|
||||
std::string operator()(basic_format_arg<format_context>::handle h) const {
|
||||
memory_buffer buf;
|
||||
internal::buffer<char>& base = buf;
|
||||
format_parse_context parse_ctx({});
|
||||
format_context format_ctx(std::back_inserter(base), {}, {});
|
||||
h.format(parse_ctx, format_ctx);
|
||||
return to_string(buf);
|
||||
}
|
||||
};
|
||||
|
||||
FMT_FUNC std::string detail::vformat(string_view format_str, format_args args) {
|
||||
if (format_str.size() == 2 && equal2(format_str.data(), "{}")) {
|
||||
auto arg = args.get(0);
|
||||
if (!arg) error_handler().on_error("argument not found");
|
||||
return visit_format_arg(stringifier(), arg);
|
||||
}
|
||||
memory_buffer buffer;
|
||||
detail::vformat_to(buffer, format_str, args);
|
||||
return to_string(buffer);
|
||||
|
@ -1766,8 +1766,7 @@ template <typename OutputIt, typename Char> struct default_arg_formatter {
|
||||
}
|
||||
|
||||
OutputIt operator()(typename basic_format_arg<context>::handle handle) {
|
||||
auto s = Char('}');
|
||||
basic_format_parse_context<Char> parse_ctx(basic_string_view<Char>(&s, 1));
|
||||
basic_format_parse_context<Char> parse_ctx({});
|
||||
basic_format_context<OutputIt, Char> format_ctx(out, args, loc);
|
||||
handle.format(parse_ctx, format_ctx);
|
||||
return format_ctx.out();
|
||||
|
@ -1475,7 +1475,7 @@ template <> struct formatter<Date> {
|
||||
template <typename ParseContext>
|
||||
FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {
|
||||
auto it = ctx.begin();
|
||||
if (*it == 'd') ++it;
|
||||
if (it != ctx.end() && *it == 'd') ++it;
|
||||
return it;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user