forked from fmtlib/fmt
Optimize parsing of argument ids
This commit is contained in:
@@ -2847,14 +2847,10 @@ class dynamic_specs_handler
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename Char, typename IDHandler>
|
template <typename Char, typename IDHandler>
|
||||||
FMT_CONSTEXPR const Char* parse_arg_id(const Char* begin, const Char* end,
|
FMT_CONSTEXPR const Char* do_parse_arg_id(const Char* begin, const Char* end,
|
||||||
IDHandler&& handler) {
|
IDHandler&& handler) {
|
||||||
FMT_ASSERT(begin != end, "");
|
FMT_ASSERT(begin != end, "");
|
||||||
Char c = *begin;
|
Char c = *begin;
|
||||||
if (c == '}' || c == ':') {
|
|
||||||
handler();
|
|
||||||
return begin;
|
|
||||||
}
|
|
||||||
if (c >= '0' && c <= '9') {
|
if (c >= '0' && c <= '9') {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
if (c != '0')
|
if (c != '0')
|
||||||
@@ -2879,6 +2875,16 @@ FMT_CONSTEXPR const Char* parse_arg_id(const Char* begin, const Char* end,
|
|||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Char, typename IDHandler>
|
||||||
|
FMT_CONSTEXPR_DECL FMT_INLINE const Char* parse_arg_id(const Char* begin,
|
||||||
|
const Char* end,
|
||||||
|
IDHandler&& handler) {
|
||||||
|
Char c = *begin;
|
||||||
|
if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler);
|
||||||
|
handler();
|
||||||
|
return begin;
|
||||||
|
}
|
||||||
|
|
||||||
// Adapts SpecHandler to IDHandler API for dynamic width.
|
// Adapts SpecHandler to IDHandler API for dynamic width.
|
||||||
template <typename SpecHandler, typename Char> struct width_adapter {
|
template <typename SpecHandler, typename Char> struct width_adapter {
|
||||||
explicit FMT_CONSTEXPR width_adapter(SpecHandler& h) : handler(h) {}
|
explicit FMT_CONSTEXPR width_adapter(SpecHandler& h) : handler(h) {}
|
||||||
|
Reference in New Issue
Block a user