forked from fmtlib/fmt
MakeArg -> make_arg
This commit is contained in:
36
fmt/format.h
36
fmt/format.h
@ -371,6 +371,9 @@ class BasicWriter;
|
|||||||
typedef BasicWriter<char> Writer;
|
typedef BasicWriter<char> Writer;
|
||||||
typedef BasicWriter<wchar_t> WWriter;
|
typedef BasicWriter<wchar_t> WWriter;
|
||||||
|
|
||||||
|
template <typename Char>
|
||||||
|
class basic_format_arg;
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
class ArgFormatter;
|
class ArgFormatter;
|
||||||
|
|
||||||
@ -1329,6 +1332,9 @@ class MakeValue : public Value<typename Context::char_type> {
|
|||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
class ArgMap;
|
class ArgMap;
|
||||||
|
|
||||||
|
template <typename Context, typename T>
|
||||||
|
basic_format_arg<typename Context::char_type> make_arg(const T &value);
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
struct monostate {};
|
struct monostate {};
|
||||||
@ -1340,10 +1346,14 @@ class basic_format_args;
|
|||||||
// allow storage in internal::MemoryBuffer.
|
// allow storage in internal::MemoryBuffer.
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
class basic_format_arg {
|
class basic_format_arg {
|
||||||
protected:
|
private:
|
||||||
internal::Value<Char> value_;
|
internal::Value<Char> value_;
|
||||||
internal::Type type_;
|
internal::Type type_;
|
||||||
|
|
||||||
|
template <typename Context, typename T>
|
||||||
|
friend basic_format_arg<typename Context::char_type>
|
||||||
|
internal::make_arg(const T &value);
|
||||||
|
|
||||||
template <typename Visitor, typename CharType>
|
template <typename Visitor, typename CharType>
|
||||||
friend typename std::result_of<Visitor(int)>::type
|
friend typename std::result_of<Visitor(int)>::type
|
||||||
visit(Visitor &&vis, basic_format_arg<CharType> arg);
|
visit(Visitor &&vis, basic_format_arg<CharType> arg);
|
||||||
@ -1426,19 +1436,13 @@ typename std::result_of<Visitor(int)>::type
|
|||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
template <typename Context>
|
template <typename Context, typename T>
|
||||||
class MakeArg : public basic_format_arg<typename Context::char_type> {
|
basic_format_arg<typename Context::char_type> make_arg(const T &value) {
|
||||||
public:
|
basic_format_arg<typename Context::char_type> arg;
|
||||||
MakeArg() {
|
arg.type_ = internal::type<T>();
|
||||||
this->type_ = internal::NONE;
|
arg.value_ = internal::MakeValue<Context>(value);
|
||||||
}
|
return arg;
|
||||||
|
}
|
||||||
template <typename T>
|
|
||||||
MakeArg(const T &value) {
|
|
||||||
this->value_ = internal::MakeValue<Context>(value);
|
|
||||||
this->type_ = internal::type<T>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, T> struct LConvCheck {
|
template <typename T, T> struct LConvCheck {
|
||||||
LConvCheck(int) {}
|
LConvCheck(int) {}
|
||||||
@ -1490,7 +1494,7 @@ struct NamedArg : basic_format_arg<Char> {
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
NamedArg(BasicStringRef<Char> argname, const T &value)
|
NamedArg(BasicStringRef<Char> argname, const T &value)
|
||||||
: basic_format_arg<Char>(MakeArg< basic_format_context<Char> >(value)),
|
: basic_format_arg<Char>(make_arg< basic_format_context<Char> >(value)),
|
||||||
name(argname) {}
|
name(argname) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1522,7 +1526,7 @@ template <bool IS_PACKED, typename Context, typename T>
|
|||||||
inline typename std::enable_if<
|
inline typename std::enable_if<
|
||||||
!IS_PACKED, basic_format_arg<typename Context::char_type>>::type
|
!IS_PACKED, basic_format_arg<typename Context::char_type>>::type
|
||||||
make_arg(const T& value) {
|
make_arg(const T& value) {
|
||||||
return MakeArg<Context>(value);
|
return make_arg<Context>(value);
|
||||||
}
|
}
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
|
@ -87,8 +87,8 @@ void format_value(BasicWriter<Char> &w, const T &value,
|
|||||||
basic_format_context<Char> &ctx) {
|
basic_format_context<Char> &ctx) {
|
||||||
internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE> buffer;
|
internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE> buffer;
|
||||||
auto str = internal::format_value(buffer, value);
|
auto str = internal::format_value(buffer, value);
|
||||||
typedef internal::MakeArg< basic_format_context<Char> > MakeArg;
|
do_format_arg< ArgFormatter<Char> >(
|
||||||
do_format_arg< ArgFormatter<Char> >(w, MakeArg(str), ctx);
|
w, internal::make_arg< basic_format_context<Char> >(str), ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
FMT_API void vprint(std::ostream &os, CStringRef format_str, format_args args);
|
FMT_API void vprint(std::ostream &os, CStringRef format_str, format_args args);
|
||||||
|
10
fmt/printf.h
10
fmt/printf.h
@ -105,11 +105,11 @@ class ArgConverter {
|
|||||||
if (sizeof(TargetType) <= sizeof(int)) {
|
if (sizeof(TargetType) <= sizeof(int)) {
|
||||||
// Extra casts are used to silence warnings.
|
// Extra casts are used to silence warnings.
|
||||||
if (is_signed) {
|
if (is_signed) {
|
||||||
arg_ = internal::MakeArg<format_context>(
|
arg_ = internal::make_arg<format_context>(
|
||||||
static_cast<int>(static_cast<TargetType>(value)));
|
static_cast<int>(static_cast<TargetType>(value)));
|
||||||
} else {
|
} else {
|
||||||
typedef typename internal::MakeUnsigned<TargetType>::Type Unsigned;
|
typedef typename internal::MakeUnsigned<TargetType>::Type Unsigned;
|
||||||
arg_ = internal::MakeArg<format_context>(
|
arg_ = internal::make_arg<format_context>(
|
||||||
static_cast<unsigned>(static_cast<Unsigned>(value)));
|
static_cast<unsigned>(static_cast<Unsigned>(value)));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -117,10 +117,10 @@ class ArgConverter {
|
|||||||
// glibc's printf doesn't sign extend arguments of smaller types:
|
// glibc's printf doesn't sign extend arguments of smaller types:
|
||||||
// std::printf("%lld", -42); // prints "4294967254"
|
// std::printf("%lld", -42); // prints "4294967254"
|
||||||
// but we don't have to do the same because it's a UB.
|
// but we don't have to do the same because it's a UB.
|
||||||
arg_ = internal::MakeArg<format_context>(
|
arg_ = internal::make_arg<format_context>(
|
||||||
static_cast<LongLong>(value));
|
static_cast<LongLong>(value));
|
||||||
} else {
|
} else {
|
||||||
arg_ = internal::MakeArg<format_context>(
|
arg_ = internal::make_arg<format_context>(
|
||||||
static_cast<typename internal::MakeUnsigned<U>::Type>(value));
|
static_cast<typename internal::MakeUnsigned<U>::Type>(value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ class CharConverter {
|
|||||||
typename std::enable_if<std::is_integral<T>::value>::type
|
typename std::enable_if<std::is_integral<T>::value>::type
|
||||||
operator()(T value) {
|
operator()(T value) {
|
||||||
arg_ =
|
arg_ =
|
||||||
internal::MakeArg<basic_format_context<Char>>(static_cast<char>(value));
|
internal::make_arg<basic_format_context<Char>>(static_cast<char>(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -57,7 +57,7 @@ struct ValueExtractor {
|
|||||||
TEST(FormatTest, ArgConverter) {
|
TEST(FormatTest, ArgConverter) {
|
||||||
using fmt::format_arg;
|
using fmt::format_arg;
|
||||||
fmt::LongLong value = std::numeric_limits<fmt::LongLong>::max();
|
fmt::LongLong value = std::numeric_limits<fmt::LongLong>::max();
|
||||||
format_arg arg = fmt::internal::MakeArg<fmt::format_context>(value);
|
format_arg arg = fmt::internal::make_arg<fmt::format_context>(value);
|
||||||
visit(fmt::internal::ArgConverter<fmt::LongLong, char>(arg, 'd'), arg);
|
visit(fmt::internal::ArgConverter<fmt::LongLong, char>(arg, 'd'), arg);
|
||||||
EXPECT_EQ(value, visit(ValueExtractor<fmt::LongLong>(), arg));
|
EXPECT_EQ(value, visit(ValueExtractor<fmt::LongLong>(), arg));
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ TEST(OStreamTest, CustomArg) {
|
|||||||
fmt::format_context ctx("}", fmt::format_args());
|
fmt::format_context ctx("}", fmt::format_args());
|
||||||
fmt::FormatSpec spec;
|
fmt::FormatSpec spec;
|
||||||
TestArgFormatter af(writer, ctx, spec);
|
TestArgFormatter af(writer, ctx, spec);
|
||||||
visit(af, fmt::internal::MakeArg<fmt::format_context>(TestEnum()));
|
visit(af, fmt::internal::make_arg<fmt::format_context>(TestEnum()));
|
||||||
EXPECT_EQ("TestEnum", writer.str());
|
EXPECT_EQ("TestEnum", writer.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,8 +75,7 @@ void format_value(fmt::BasicWriter<Char> &w, Test,
|
|||||||
|
|
||||||
template <typename Char, typename T>
|
template <typename Char, typename T>
|
||||||
basic_format_arg<Char> make_arg(const T &value) {
|
basic_format_arg<Char> make_arg(const T &value) {
|
||||||
typedef fmt::internal::MakeArg< fmt::basic_format_context<Char> > MakeArg;
|
return fmt::internal::make_arg< fmt::basic_format_context<Char> >(value);
|
||||||
return MakeArg(value);
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user