mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-23 19:00:09 +00:00
FrmatSpec -> format_spec
This commit is contained in:
parent
b5fb8dd18b
commit
296e9cada2
34
fmt/format.h
34
fmt/format.h
@ -1738,8 +1738,8 @@ struct AlignTypeSpec : AlignSpec {
|
|||||||
char type() const { return TYPE; }
|
char type() const { return TYPE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// A full format specifier.
|
// Format specifiers.
|
||||||
class FormatSpec : public AlignSpec {
|
class format_specs : public AlignSpec {
|
||||||
private:
|
private:
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
void set(fill_spec<Char> fill) {
|
void set(fill_spec<Char> fill) {
|
||||||
@ -1765,11 +1765,11 @@ class FormatSpec : public AlignSpec {
|
|||||||
int precision_;
|
int precision_;
|
||||||
char type_;
|
char type_;
|
||||||
|
|
||||||
FormatSpec(unsigned width = 0, char type = 0, wchar_t fill = ' ')
|
format_specs(unsigned width = 0, char type = 0, wchar_t fill = ' ')
|
||||||
: AlignSpec(width, fill), flags_(0), precision_(-1), type_(type) {}
|
: AlignSpec(width, fill), flags_(0), precision_(-1), type_(type) {}
|
||||||
|
|
||||||
template <typename... FormatSpecs>
|
template <typename... FormatSpecs>
|
||||||
explicit FormatSpec(FormatSpecs... specs)
|
explicit format_specs(FormatSpecs... specs)
|
||||||
: AlignSpec(0, ' '), flags_(0), precision_(-1), type_(0){
|
: AlignSpec(0, ' '), flags_(0), precision_(-1), type_(0){
|
||||||
set(specs...);
|
set(specs...);
|
||||||
}
|
}
|
||||||
@ -1855,7 +1855,7 @@ template <typename Char>
|
|||||||
class ArgFormatterBase {
|
class ArgFormatterBase {
|
||||||
private:
|
private:
|
||||||
basic_writer<Char> &writer_;
|
basic_writer<Char> &writer_;
|
||||||
FormatSpec &spec_;
|
format_specs &spec_;
|
||||||
|
|
||||||
FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatterBase);
|
FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatterBase);
|
||||||
|
|
||||||
@ -1883,7 +1883,7 @@ class ArgFormatterBase {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
basic_writer<Char> &writer() { return writer_; }
|
basic_writer<Char> &writer() { return writer_; }
|
||||||
FormatSpec &spec() { return spec_; }
|
format_specs &spec() { return spec_; }
|
||||||
|
|
||||||
void write(bool value) {
|
void write(bool value) {
|
||||||
writer_.write_str(StringRef(value ? "true" : "false"), spec_);
|
writer_.write_str(StringRef(value ? "true" : "false"), spec_);
|
||||||
@ -1897,7 +1897,7 @@ class ArgFormatterBase {
|
|||||||
public:
|
public:
|
||||||
typedef Char char_type;
|
typedef Char char_type;
|
||||||
|
|
||||||
ArgFormatterBase(basic_writer<Char> &w, FormatSpec &s)
|
ArgFormatterBase(basic_writer<Char> &w, format_specs &s)
|
||||||
: writer_(w), spec_(s) {}
|
: writer_(w), spec_(s) {}
|
||||||
|
|
||||||
void operator()(monostate) {
|
void operator()(monostate) {
|
||||||
@ -2045,7 +2045,7 @@ class ArgFormatter : public internal::ArgFormatterBase<Char> {
|
|||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
ArgFormatter(basic_writer<Char> &writer, basic_format_context<Char> &ctx,
|
ArgFormatter(basic_writer<Char> &writer, basic_format_context<Char> &ctx,
|
||||||
FormatSpec &spec)
|
format_specs &spec)
|
||||||
: internal::ArgFormatterBase<Char>(writer, spec), ctx_(ctx) {}
|
: internal::ArgFormatterBase<Char>(writer, spec), ctx_(ctx) {}
|
||||||
|
|
||||||
using internal::ArgFormatterBase<Char>::operator();
|
using internal::ArgFormatterBase<Char>::operator();
|
||||||
@ -2255,14 +2255,14 @@ class basic_writer {
|
|||||||
|
|
||||||
// Formats a floating-point number (double or long double).
|
// Formats a floating-point number (double or long double).
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void write_double(T value, const FormatSpec &spec);
|
void write_double(T value, const format_specs &spec);
|
||||||
|
|
||||||
// Writes a formatted string.
|
// Writes a formatted string.
|
||||||
template <typename StrChar>
|
template <typename StrChar>
|
||||||
CharPtr write_str(const StrChar *s, std::size_t size, const AlignSpec &spec);
|
CharPtr write_str(const StrChar *s, std::size_t size, const AlignSpec &spec);
|
||||||
|
|
||||||
template <typename StrChar>
|
template <typename StrChar>
|
||||||
void write_str(BasicStringRef<StrChar> str, const FormatSpec &spec);
|
void write_str(BasicStringRef<StrChar> str, const format_specs &spec);
|
||||||
|
|
||||||
// This following methods are private to disallow writing wide characters
|
// This following methods are private to disallow writing wide characters
|
||||||
// and strings to a char buffer. If you want to print a wide string as a
|
// and strings to a char buffer. If you want to print a wide string as a
|
||||||
@ -2382,11 +2382,11 @@ class basic_writer {
|
|||||||
template <typename T, typename... FormatSpecs>
|
template <typename T, typename... FormatSpecs>
|
||||||
typename std::enable_if<std::is_integral<T>::value, void>::type
|
typename std::enable_if<std::is_integral<T>::value, void>::type
|
||||||
write(T value, FormatSpecs... specs) {
|
write(T value, FormatSpecs... specs) {
|
||||||
write_int(value, FormatSpec(specs...));
|
write_int(value, format_specs(specs...));
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(double value) {
|
void write(double value) {
|
||||||
write_double(value, FormatSpec());
|
write_double(value, format_specs());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2396,7 +2396,7 @@ class basic_writer {
|
|||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
void write(long double value) {
|
void write(long double value) {
|
||||||
write_double(value, FormatSpec());
|
write_double(value, format_specs());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2427,7 +2427,7 @@ class basic_writer {
|
|||||||
|
|
||||||
template <typename... FormatSpecs>
|
template <typename... FormatSpecs>
|
||||||
void write(BasicStringRef<Char> str, FormatSpecs... specs) {
|
void write(BasicStringRef<Char> str, FormatSpecs... specs) {
|
||||||
write_str(str, FormatSpec(specs...));
|
write_str(str, format_specs(specs...));
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() FMT_NOEXCEPT { buffer_.clear(); }
|
void clear() FMT_NOEXCEPT { buffer_.clear(); }
|
||||||
@ -2461,7 +2461,7 @@ typename basic_writer<Char>::CharPtr basic_writer<Char>::write_str(
|
|||||||
template <typename Char>
|
template <typename Char>
|
||||||
template <typename StrChar>
|
template <typename StrChar>
|
||||||
void basic_writer<Char>::write_str(
|
void basic_writer<Char>::write_str(
|
||||||
BasicStringRef<StrChar> s, const FormatSpec &spec) {
|
BasicStringRef<StrChar> s, const format_specs &spec) {
|
||||||
// Check if StrChar is convertible to Char.
|
// Check if StrChar is convertible to Char.
|
||||||
internal::CharTraits<Char>::convert(StrChar());
|
internal::CharTraits<Char>::convert(StrChar());
|
||||||
if (spec.type_ && spec.type_ != 's')
|
if (spec.type_ && spec.type_ != 's')
|
||||||
@ -2649,7 +2649,7 @@ void basic_writer<Char>::write_int(T value, Spec spec) {
|
|||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void basic_writer<Char>::write_double(T value, const FormatSpec &spec) {
|
void basic_writer<Char>::write_double(T value, const format_specs &spec) {
|
||||||
// Check type.
|
// Check type.
|
||||||
char type = spec.type();
|
char type = spec.type();
|
||||||
bool upper = false;
|
bool upper = false;
|
||||||
@ -3366,7 +3366,7 @@ template <typename ArgFormatter, typename Char, typename Context>
|
|||||||
void do_format_arg(basic_writer<Char> &writer, basic_format_arg<Context> arg,
|
void do_format_arg(basic_writer<Char> &writer, basic_format_arg<Context> arg,
|
||||||
Context &ctx) {
|
Context &ctx) {
|
||||||
const Char *&s = ctx.ptr();
|
const Char *&s = ctx.ptr();
|
||||||
FormatSpec spec;
|
format_specs spec;
|
||||||
if (*s == ':') {
|
if (*s == ':') {
|
||||||
if (visit(internal::CustomFormatter<Char, Context>(writer, ctx), arg))
|
if (visit(internal::CustomFormatter<Char, Context>(writer, ctx), arg))
|
||||||
return;
|
return;
|
||||||
|
20
fmt/printf.h
20
fmt/printf.h
@ -170,12 +170,12 @@ class CharConverter {
|
|||||||
// left alignment if it is negative.
|
// left alignment if it is negative.
|
||||||
class PrintfWidthHandler {
|
class PrintfWidthHandler {
|
||||||
private:
|
private:
|
||||||
FormatSpec &spec_;
|
format_specs &spec_;
|
||||||
|
|
||||||
FMT_DISALLOW_COPY_AND_ASSIGN(PrintfWidthHandler);
|
FMT_DISALLOW_COPY_AND_ASSIGN(PrintfWidthHandler);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PrintfWidthHandler(FormatSpec &spec) : spec_(spec) {}
|
explicit PrintfWidthHandler(format_specs &spec) : spec_(spec) {}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
typename std::enable_if<std::is_integral<T>::value, unsigned>::type
|
typename std::enable_if<std::is_integral<T>::value, unsigned>::type
|
||||||
@ -224,14 +224,14 @@ class PrintfArgFormatter : public internal::ArgFormatterBase<Char> {
|
|||||||
specifier information for standard argument types.
|
specifier information for standard argument types.
|
||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
PrintfArgFormatter(basic_writer<Char> &writer, FormatSpec &spec)
|
PrintfArgFormatter(basic_writer<Char> &writer, format_specs &spec)
|
||||||
: internal::ArgFormatterBase<Char>(writer, spec) {}
|
: internal::ArgFormatterBase<Char>(writer, spec) {}
|
||||||
|
|
||||||
using Base::operator();
|
using Base::operator();
|
||||||
|
|
||||||
/** Formats an argument of type ``bool``. */
|
/** Formats an argument of type ``bool``. */
|
||||||
void operator()(bool value) {
|
void operator()(bool value) {
|
||||||
FormatSpec &fmt_spec = this->spec();
|
format_specs &fmt_spec = this->spec();
|
||||||
if (fmt_spec.type_ != 's')
|
if (fmt_spec.type_ != 's')
|
||||||
return (*this)(value ? 1 : 0);
|
return (*this)(value ? 1 : 0);
|
||||||
fmt_spec.type_ = 0;
|
fmt_spec.type_ = 0;
|
||||||
@ -240,7 +240,7 @@ class PrintfArgFormatter : public internal::ArgFormatterBase<Char> {
|
|||||||
|
|
||||||
/** Formats a character. */
|
/** Formats a character. */
|
||||||
void operator()(Char value) {
|
void operator()(Char value) {
|
||||||
const FormatSpec &fmt_spec = this->spec();
|
const format_specs &fmt_spec = this->spec();
|
||||||
basic_writer<Char> &w = this->writer();
|
basic_writer<Char> &w = this->writer();
|
||||||
if (fmt_spec.type_ && fmt_spec.type_ != 'c')
|
if (fmt_spec.type_ && fmt_spec.type_ != 'c')
|
||||||
w.write_int(value, fmt_spec);
|
w.write_int(value, fmt_spec);
|
||||||
@ -302,7 +302,7 @@ class printf_context :
|
|||||||
typedef internal::format_context_base<Char, printf_context> Base;
|
typedef internal::format_context_base<Char, printf_context> Base;
|
||||||
typedef typename Base::format_arg format_arg;
|
typedef typename Base::format_arg format_arg;
|
||||||
|
|
||||||
void parse_flags(FormatSpec &spec, const Char *&s);
|
void parse_flags(format_specs &spec, const Char *&s);
|
||||||
|
|
||||||
// Returns the argument with specified index or, if arg_index is equal
|
// Returns the argument with specified index or, if arg_index is equal
|
||||||
// to the maximum unsigned value, the next argument.
|
// to the maximum unsigned value, the next argument.
|
||||||
@ -311,7 +311,7 @@ class printf_context :
|
|||||||
unsigned arg_index = (std::numeric_limits<unsigned>::max)());
|
unsigned arg_index = (std::numeric_limits<unsigned>::max)());
|
||||||
|
|
||||||
// Parses argument index, flags and width and returns the argument index.
|
// Parses argument index, flags and width and returns the argument index.
|
||||||
unsigned parse_header(const Char *&s, FormatSpec &spec);
|
unsigned parse_header(const Char *&s, format_specs &spec);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -330,7 +330,7 @@ class printf_context :
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename Char, typename AF>
|
template <typename Char, typename AF>
|
||||||
void printf_context<Char, AF>::parse_flags(FormatSpec &spec, const Char *&s) {
|
void printf_context<Char, AF>::parse_flags(format_specs &spec, const Char *&s) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
switch (*s++) {
|
switch (*s++) {
|
||||||
case '-':
|
case '-':
|
||||||
@ -369,7 +369,7 @@ typename printf_context<Char, AF>::format_arg printf_context<Char, AF>::get_arg(
|
|||||||
|
|
||||||
template <typename Char, typename AF>
|
template <typename Char, typename AF>
|
||||||
unsigned printf_context<Char, AF>::parse_header(
|
unsigned printf_context<Char, AF>::parse_header(
|
||||||
const Char *&s, FormatSpec &spec) {
|
const Char *&s, format_specs &spec) {
|
||||||
unsigned arg_index = std::numeric_limits<unsigned>::max();
|
unsigned arg_index = std::numeric_limits<unsigned>::max();
|
||||||
Char c = *s;
|
Char c = *s;
|
||||||
if (c >= '0' && c <= '9') {
|
if (c >= '0' && c <= '9') {
|
||||||
@ -415,7 +415,7 @@ void printf_context<Char, AF>::format(basic_writer<Char> &writer) {
|
|||||||
}
|
}
|
||||||
internal::write(writer, start, s - 1);
|
internal::write(writer, start, s - 1);
|
||||||
|
|
||||||
FormatSpec spec;
|
format_specs spec;
|
||||||
spec.align_ = ALIGN_RIGHT;
|
spec.align_ = ALIGN_RIGHT;
|
||||||
|
|
||||||
// Parse argument index, flags and width.
|
// Parse argument index, flags and width.
|
||||||
|
@ -17,7 +17,7 @@ using fmt::PrintfArgFormatter;
|
|||||||
class CustomArgFormatter : public fmt::ArgFormatter<char> {
|
class CustomArgFormatter : public fmt::ArgFormatter<char> {
|
||||||
public:
|
public:
|
||||||
CustomArgFormatter(fmt::writer &w, fmt::basic_format_context<char> &ctx,
|
CustomArgFormatter(fmt::writer &w, fmt::basic_format_context<char> &ctx,
|
||||||
fmt::FormatSpec &s)
|
fmt::format_specs &s)
|
||||||
: fmt::ArgFormatter<char>(w, ctx, s) {}
|
: fmt::ArgFormatter<char>(w, ctx, s) {}
|
||||||
|
|
||||||
using fmt::ArgFormatter<char>::operator();
|
using fmt::ArgFormatter<char>::operator();
|
||||||
@ -33,7 +33,7 @@ class CustomArgFormatter : public fmt::ArgFormatter<char> {
|
|||||||
// rounded to 0.
|
// rounded to 0.
|
||||||
class CustomPrintfArgFormatter : public PrintfArgFormatter<char> {
|
class CustomPrintfArgFormatter : public PrintfArgFormatter<char> {
|
||||||
public:
|
public:
|
||||||
CustomPrintfArgFormatter(fmt::basic_writer<char> &w, fmt::FormatSpec &spec)
|
CustomPrintfArgFormatter(fmt::basic_writer<char> &w, fmt::format_specs &spec)
|
||||||
: PrintfArgFormatter<char>(w, spec) {}
|
: PrintfArgFormatter<char>(w, spec) {}
|
||||||
|
|
||||||
using PrintfArgFormatter<char>::operator();
|
using PrintfArgFormatter<char>::operator();
|
||||||
|
@ -1644,7 +1644,7 @@ class MockArgFormatter : public fmt::internal::ArgFormatterBase<char> {
|
|||||||
typedef fmt::internal::ArgFormatterBase<char> Base;
|
typedef fmt::internal::ArgFormatterBase<char> Base;
|
||||||
|
|
||||||
MockArgFormatter(fmt::writer &w, fmt::format_context &ctx,
|
MockArgFormatter(fmt::writer &w, fmt::format_context &ctx,
|
||||||
fmt::FormatSpec &s)
|
fmt::format_specs &s)
|
||||||
: fmt::internal::ArgFormatterBase<char>(w, s) {
|
: fmt::internal::ArgFormatterBase<char>(w, s) {
|
||||||
EXPECT_CALL(*this, call(42));
|
EXPECT_CALL(*this, call(42));
|
||||||
}
|
}
|
||||||
|
@ -60,14 +60,14 @@ TEST(OStreamTest, Enum) {
|
|||||||
|
|
||||||
struct TestArgFormatter : fmt::ArgFormatter<char> {
|
struct TestArgFormatter : fmt::ArgFormatter<char> {
|
||||||
TestArgFormatter(fmt::writer &w, fmt::format_context &ctx,
|
TestArgFormatter(fmt::writer &w, fmt::format_context &ctx,
|
||||||
fmt::FormatSpec &s)
|
fmt::format_specs &s)
|
||||||
: fmt::ArgFormatter<char>(w, ctx, s) {}
|
: fmt::ArgFormatter<char>(w, ctx, s) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST(OStreamTest, CustomArg) {
|
TEST(OStreamTest, CustomArg) {
|
||||||
fmt::MemoryWriter writer;
|
fmt::MemoryWriter writer;
|
||||||
fmt::format_context ctx("}", fmt::format_args());
|
fmt::format_context ctx("}", fmt::format_args());
|
||||||
fmt::FormatSpec spec;
|
fmt::format_specs spec;
|
||||||
TestArgFormatter af(writer, ctx, spec);
|
TestArgFormatter af(writer, ctx, spec);
|
||||||
visit(af, fmt::internal::make_arg<fmt::format_context>(TestEnum()));
|
visit(af, fmt::internal::make_arg<fmt::format_context>(TestEnum()));
|
||||||
EXPECT_EQ("TestEnum", writer.str());
|
EXPECT_EQ("TestEnum", writer.str());
|
||||||
|
Loading…
Reference in New Issue
Block a user