mirror of
https://github.com/fmtlib/fmt.git
synced 2025-07-30 02:37:36 +02:00
Move writer to PrintfFormatter object for consistency with BasicFormatter
This commit is contained in:
@ -521,8 +521,7 @@ template void internal::FixedBuffer<char>::grow(std::size_t);
|
|||||||
|
|
||||||
template void internal::ArgMap<char>::init(const ArgList &args);
|
template void internal::ArgMap<char>::init(const ArgList &args);
|
||||||
|
|
||||||
template void PrintfFormatter<char>::format(
|
template void PrintfFormatter<char>::format(CStringRef format);
|
||||||
BasicWriter<char> &writer, CStringRef format);
|
|
||||||
|
|
||||||
template int internal::CharTraits<char>::format_float(
|
template int internal::CharTraits<char>::format_float(
|
||||||
char *buffer, std::size_t size, const char *format,
|
char *buffer, std::size_t size, const char *format,
|
||||||
@ -538,8 +537,7 @@ template void internal::FixedBuffer<wchar_t>::grow(std::size_t);
|
|||||||
|
|
||||||
template void internal::ArgMap<wchar_t>::init(const ArgList &args);
|
template void internal::ArgMap<wchar_t>::init(const ArgList &args);
|
||||||
|
|
||||||
template void PrintfFormatter<wchar_t>::format(
|
template void PrintfFormatter<wchar_t>::format(WCStringRef format);
|
||||||
BasicWriter<wchar_t> &writer, WCStringRef format);
|
|
||||||
|
|
||||||
template int internal::CharTraits<wchar_t>::format_float(
|
template int internal::CharTraits<wchar_t>::format_float(
|
||||||
wchar_t *buffer, std::size_t size, const wchar_t *format,
|
wchar_t *buffer, std::size_t size, const wchar_t *format,
|
||||||
|
27
fmt/printf.h
27
fmt/printf.h
@ -255,6 +255,8 @@ template <typename Char,
|
|||||||
typename ArgFormatter = internal::PrintfArgFormatter<Char> >
|
typename ArgFormatter = internal::PrintfArgFormatter<Char> >
|
||||||
class PrintfFormatter : private internal::FormatterBase {
|
class PrintfFormatter : private internal::FormatterBase {
|
||||||
private:
|
private:
|
||||||
|
BasicWriter<Char> &writer_;
|
||||||
|
|
||||||
void parse_flags(FormatSpec &spec, const Char *&s);
|
void parse_flags(FormatSpec &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
|
||||||
@ -269,15 +271,15 @@ class PrintfFormatter : private internal::FormatterBase {
|
|||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
\rst
|
\rst
|
||||||
Constructs a ``PrintfFormatter`` object. References to the arguments
|
Constructs a ``PrintfFormatter`` object. References to the arguments and
|
||||||
are stored in the formatter object so make sure they have appropriate
|
the writer are stored in the formatter object so make sure they have
|
||||||
lifetimes.
|
appropriate lifetimes.
|
||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
explicit PrintfFormatter(const ArgList &args) : FormatterBase(args) {}
|
explicit PrintfFormatter(const ArgList &args, BasicWriter<Char> &w)
|
||||||
|
: FormatterBase(args), writer_(w) {}
|
||||||
|
|
||||||
FMT_API void format(BasicWriter<Char> &writer,
|
FMT_API void format(BasicCStringRef<Char> format_str);
|
||||||
BasicCStringRef<Char> format_str);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Char, typename AF>
|
template <typename Char, typename AF>
|
||||||
@ -353,19 +355,18 @@ unsigned PrintfFormatter<Char, AF>::parse_header(
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Char, typename AF>
|
template <typename Char, typename AF>
|
||||||
void PrintfFormatter<Char, AF>::format(
|
void PrintfFormatter<Char, AF>::format(BasicCStringRef<Char> format_str) {
|
||||||
BasicWriter<Char> &writer, BasicCStringRef<Char> format_str) {
|
|
||||||
const Char *start = format_str.c_str();
|
const Char *start = format_str.c_str();
|
||||||
const Char *s = start;
|
const Char *s = start;
|
||||||
while (*s) {
|
while (*s) {
|
||||||
Char c = *s++;
|
Char c = *s++;
|
||||||
if (c != '%') continue;
|
if (c != '%') continue;
|
||||||
if (*s == c) {
|
if (*s == c) {
|
||||||
write(writer, start, s);
|
write(writer_, start, s);
|
||||||
start = ++s;
|
start = ++s;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
write(writer, start, s - 1);
|
write(writer_, start, s - 1);
|
||||||
|
|
||||||
FormatSpec spec;
|
FormatSpec spec;
|
||||||
spec.align_ = ALIGN_RIGHT;
|
spec.align_ = ALIGN_RIGHT;
|
||||||
@ -448,14 +449,14 @@ void PrintfFormatter<Char, AF>::format(
|
|||||||
start = s;
|
start = s;
|
||||||
|
|
||||||
// Format argument.
|
// Format argument.
|
||||||
AF(writer, spec).visit(arg);
|
AF(writer_, spec).visit(arg);
|
||||||
}
|
}
|
||||||
write(writer, start, s);
|
write(writer_, start, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Char>
|
template <typename Char>
|
||||||
void printf(BasicWriter<Char> &w, BasicCStringRef<Char> format, ArgList args) {
|
void printf(BasicWriter<Char> &w, BasicCStringRef<Char> format, ArgList args) {
|
||||||
PrintfFormatter<Char>(args).format(w, format);
|
PrintfFormatter<Char>(args, w).format(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,10 +51,10 @@ std::string custom_format(const char *format_str, fmt::ArgList args) {
|
|||||||
}
|
}
|
||||||
FMT_VARIADIC(std::string, custom_format, const char *)
|
FMT_VARIADIC(std::string, custom_format, const char *)
|
||||||
|
|
||||||
std::string custom_sprintf(const char* fstr, fmt::ArgList args){
|
std::string custom_sprintf(const char* format_str, fmt::ArgList args){
|
||||||
fmt::MemoryWriter writer;
|
fmt::MemoryWriter writer;
|
||||||
fmt::PrintfFormatter<char, CustomPAF> pfer( args);
|
fmt::PrintfFormatter<char, CustomPAF> formatter(args, writer);
|
||||||
pfer.format(writer, fstr);
|
formatter.format(format_str);
|
||||||
return writer.str();
|
return writer.str();
|
||||||
}
|
}
|
||||||
FMT_VARIADIC(std::string, custom_sprintf, const char*);
|
FMT_VARIADIC(std::string, custom_sprintf, const char*);
|
||||||
|
Reference in New Issue
Block a user