mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-27 06:35:37 +00:00
Named arguments go brrr
This commit is contained in:
parent
de290f5c4c
commit
02a6fe59fb
@ -814,7 +814,6 @@ template <typename... Args> constexpr size_t count_named_args() {
|
|||||||
|
|
||||||
enum class type {
|
enum class type {
|
||||||
none_type,
|
none_type,
|
||||||
named_arg_type, // DEPRECATED
|
|
||||||
// Integer types should go first,
|
// Integer types should go first,
|
||||||
int_type,
|
int_type,
|
||||||
uint_type,
|
uint_type,
|
||||||
@ -1085,7 +1084,7 @@ using mapped_type_constant =
|
|||||||
type_constant<decltype(arg_mapper<Context>().map(std::declval<const T&>())),
|
type_constant<decltype(arg_mapper<Context>().map(std::declval<const T&>())),
|
||||||
typename Context::char_type>;
|
typename Context::char_type>;
|
||||||
|
|
||||||
enum { packed_arg_bits = 5 };
|
enum { packed_arg_bits = 4 };
|
||||||
// Maximum number of arguments with packed types.
|
// Maximum number of arguments with packed types.
|
||||||
enum { max_packed_args = 62 / packed_arg_bits };
|
enum { max_packed_args = 62 / packed_arg_bits };
|
||||||
enum : unsigned long long { is_unpacked_bit = 1ULL << 63 };
|
enum : unsigned long long { is_unpacked_bit = 1ULL << 63 };
|
||||||
@ -1160,9 +1159,6 @@ FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis,
|
|||||||
switch (arg.type_) {
|
switch (arg.type_) {
|
||||||
case internal::type::none_type:
|
case internal::type::none_type:
|
||||||
break;
|
break;
|
||||||
case internal::type::named_arg_type:
|
|
||||||
FMT_ASSERT(false, "invalid argument type");
|
|
||||||
break;
|
|
||||||
case internal::type::int_type:
|
case internal::type::int_type:
|
||||||
return vis(arg.value_.int_value);
|
return vis(arg.value_.int_value);
|
||||||
case internal::type::uint_type:
|
case internal::type::uint_type:
|
||||||
@ -1655,19 +1651,6 @@ template <typename Context> class basic_format_args {
|
|||||||
basic_format_args(unsigned long long desc, const format_arg* args)
|
basic_format_args(unsigned long long desc, const format_arg* args)
|
||||||
: desc_(desc), args_(args) {}
|
: desc_(desc), args_(args) {}
|
||||||
|
|
||||||
format_arg do_get(int index) const {
|
|
||||||
format_arg arg;
|
|
||||||
if (!is_packed()) {
|
|
||||||
if (index < max_size()) arg = args_[index];
|
|
||||||
return arg;
|
|
||||||
}
|
|
||||||
if (index >= internal::max_packed_args) return arg;
|
|
||||||
arg.type_ = type(index);
|
|
||||||
if (arg.type_ == internal::type::none_type) return arg;
|
|
||||||
arg.value_ = values_[index];
|
|
||||||
return arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
basic_format_args() : desc_(0) {}
|
basic_format_args() : desc_(0) {}
|
||||||
|
|
||||||
@ -1700,9 +1683,15 @@ template <typename Context> class basic_format_args {
|
|||||||
|
|
||||||
/** Returns the argument with the specified id. */
|
/** Returns the argument with the specified id. */
|
||||||
format_arg get(int id) const {
|
format_arg get(int id) const {
|
||||||
format_arg arg = do_get(id);
|
format_arg arg;
|
||||||
if (arg.type_ == internal::type::named_arg_type)
|
if (!is_packed()) {
|
||||||
arg = arg.value_.named_arg->template deserialize<Context>();
|
if (id < max_size()) arg = args_[id];
|
||||||
|
return arg;
|
||||||
|
}
|
||||||
|
if (id >= internal::max_packed_args) return arg;
|
||||||
|
arg.type_ = type(id);
|
||||||
|
if (arg.type_ == internal::type::none_type) return arg;
|
||||||
|
arg.value_ = values_[id];
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2919,7 +2919,6 @@ struct formatter<T, Char,
|
|||||||
auto eh = ctx.error_handler();
|
auto eh = ctx.error_handler();
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case internal::type::none_type:
|
case internal::type::none_type:
|
||||||
case internal::type::named_arg_type:
|
|
||||||
FMT_ASSERT(false, "invalid argument type");
|
FMT_ASSERT(false, "invalid argument type");
|
||||||
break;
|
break;
|
||||||
case internal::type::int_type:
|
case internal::type::int_type:
|
||||||
|
@ -650,7 +650,6 @@ struct formatter {
|
|||||||
auto eh = ctx.error_handler();
|
auto eh = ctx.error_handler();
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case internal::type::none_type:
|
case internal::type::none_type:
|
||||||
case internal::type::named_arg_type:
|
|
||||||
FMT_ASSERT(false, "invalid argument type");
|
FMT_ASSERT(false, "invalid argument type");
|
||||||
break;
|
break;
|
||||||
case internal::type::int_type:
|
case internal::type::int_type:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user