Micro-optimize argument retrieval

This commit is contained in:
Victor Zverovich 2018-07-15 06:29:51 -07:00
parent 916ed99dab
commit 8615ff2acc
2 changed files with 6 additions and 3 deletions

View File

@ -1095,13 +1095,15 @@ class basic_format_args {
void set_data(const format_arg *args) { args_ = args; }
format_arg do_get(size_type index) const {
format_arg arg;
long long signed_types = static_cast<long long>(types_);
if (signed_types < 0) {
unsigned long long num_args =
static_cast<unsigned long long>(-signed_types);
return index < num_args ? args_[index] : format_arg();
if (index < num_args)
arg = args_[index];
return arg;;
}
format_arg arg;
if (index > internal::max_packed_args)
return arg;
arg.type_ = type(index);

View File

@ -1972,7 +1972,8 @@ FMT_CONSTEXPR Iterator parse_arg_id(Iterator it, IDHandler &&handler) {
do {
c = *++it;
} while (is_name_start(c) || ('0' <= c && c <= '9'));
handler(basic_string_view<char_type>(pointer_from(start), to_unsigned(it - start)));
handler(basic_string_view<char_type>(
pointer_from(start), to_unsigned(it - start)));
return it;
}