mirror of
https://github.com/fmtlib/fmt.git
synced 2025-08-01 11:44:46 +02:00
Parameterize more functions on string type
This commit is contained in:
@@ -1306,10 +1306,12 @@ std::basic_string<Char> vformat(
|
|||||||
basic_format_args<typename buffer_context<Char>::type> args);
|
basic_format_args<typename buffer_context<Char>::type> args);
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
|
#define FMT_CHAR(Str) typename internal::format_string_traits<Str>::char_type
|
||||||
|
|
||||||
|
template <typename String>
|
||||||
format_context::iterator vformat_to(
|
format_context::iterator vformat_to(
|
||||||
internal::buffer &buf, string_view format_str, format_args args);
|
internal::basic_buffer<FMT_CHAR(String) > &buf, const String &format_str,
|
||||||
wformat_context::iterator vformat_to(
|
basic_format_args<buffer_context<FMT_CHAR(String) > > args);
|
||||||
internal::wbuffer &buf, wstring_view format_str, wformat_args args);
|
|
||||||
|
|
||||||
template <typename Container>
|
template <typename Container>
|
||||||
struct is_contiguous : std::false_type {};
|
struct is_contiguous : std::false_type {};
|
||||||
@@ -1359,8 +1361,6 @@ inline typename std::enable_if<
|
|||||||
make_format_args<wformat_context>(args...));
|
make_format_args<wformat_context>(args...));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FMT_CHAR(Str) typename internal::format_string_traits<Str>::char_type
|
|
||||||
|
|
||||||
template <typename String, typename Char = FMT_CHAR(String) >
|
template <typename String, typename Char = FMT_CHAR(String) >
|
||||||
inline std::basic_string<Char> vformat(
|
inline std::basic_string<Char> vformat(
|
||||||
const String &format_str,
|
const String &format_str,
|
||||||
|
@@ -840,7 +840,7 @@ FMT_FUNC void report_windows_error(
|
|||||||
|
|
||||||
FMT_FUNC void vprint(std::FILE *f, string_view format_str, format_args args) {
|
FMT_FUNC void vprint(std::FILE *f, string_view format_str, format_args args) {
|
||||||
memory_buffer buffer;
|
memory_buffer buffer;
|
||||||
vformat_to(buffer, format_str, args);
|
vformat_to(buffer, format_str, basic_format_args<buffer_context<char>::type>(args));
|
||||||
std::fwrite(buffer.data(), 1, buffer.size(), f);
|
std::fwrite(buffer.data(), 1, buffer.size(), f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3441,10 +3441,13 @@ std::basic_string<Char> to_string(const basic_memory_buffer<Char, SIZE> &buf) {
|
|||||||
return std::basic_string<Char>(buf.data(), buf.size());
|
return std::basic_string<Char>(buf.data(), buf.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline format_context::iterator vformat_to(
|
template <typename String, typename Char = FMT_CHAR(String)>
|
||||||
internal::buffer &buf, string_view format_str, format_args args) {
|
inline typename buffer_context<FMT_CHAR(String) >::type::iterator vformat_to(
|
||||||
typedef back_insert_range<internal::buffer> range;
|
internal::basic_buffer<Char> &buf, const String &format_str,
|
||||||
return vformat_to<arg_formatter<range>>(buf, format_str, args);
|
basic_format_args<typename buffer_context<Char>::type> args) {
|
||||||
|
typedef back_insert_range<internal::basic_buffer<FMT_CHAR(String) > > range;
|
||||||
|
return vformat_to<arg_formatter<range>>(
|
||||||
|
buf, basic_string_view<Char>(format_str), args);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline wformat_context::iterator vformat_to(
|
inline wformat_context::iterator vformat_to(
|
||||||
@@ -3477,17 +3480,11 @@ struct format_args_t {
|
|||||||
typename format_context_t<OutputIt, Char>::type> type;
|
typename format_context_t<OutputIt, Char>::type> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename OutputIt, typename... Args>
|
template <typename String, typename OutputIt, typename... Args>
|
||||||
inline OutputIt vformat_to(OutputIt out, string_view format_str,
|
|
||||||
typename format_args_t<OutputIt>::type args) {
|
|
||||||
typedef output_range<OutputIt, char> range;
|
|
||||||
return vformat_to<arg_formatter<range>>(range(out), format_str, args);
|
|
||||||
}
|
|
||||||
template <typename OutputIt, typename... Args>
|
|
||||||
inline OutputIt vformat_to(
|
inline OutputIt vformat_to(
|
||||||
OutputIt out, wstring_view format_str,
|
OutputIt out, const String &format_str,
|
||||||
typename format_args_t<OutputIt, wchar_t>::type args) {
|
typename format_args_t<OutputIt, FMT_CHAR(String) >::type args) {
|
||||||
typedef output_range<OutputIt, wchar_t> range;
|
typedef output_range<OutputIt, FMT_CHAR(String) > range;
|
||||||
return vformat_to<arg_formatter<range>>(range(out), format_str, args);
|
return vformat_to<arg_formatter<range>>(range(out), format_str, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3503,14 +3500,14 @@ inline OutputIt vformat_to(
|
|||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
template <typename OutputIt, typename String, typename... Args>
|
template <typename OutputIt, typename String, typename... Args>
|
||||||
inline typename std::enable_if<internal::is_format_string<String>::value, OutputIt>::type
|
inline typename std::enable_if<
|
||||||
format_to(OutputIt out, const String &format_str,
|
internal::is_format_string<String>::value, OutputIt>::type
|
||||||
const Args &... args) {
|
format_to(OutputIt out, const String &format_str, const Args &... args) {
|
||||||
internal::check_format_string<Args...>(format_str);
|
internal::check_format_string<Args...>(format_str);
|
||||||
typedef typename format_context_t<OutputIt, FMT_CHAR(String) >::type context_t;
|
typedef typename format_context_t<OutputIt, FMT_CHAR(String) >::type context;
|
||||||
format_arg_store<context_t, Args...> as{args...};
|
format_arg_store<context, Args...> as{args...};
|
||||||
return vformat_to(out, basic_string_view< FMT_CHAR(String) >(format_str),
|
return vformat_to(out, basic_string_view< FMT_CHAR(String) >(format_str),
|
||||||
basic_format_args<context_t>(as));
|
basic_format_args<context>(as));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename OutputIt>
|
template <typename OutputIt>
|
||||||
|
@@ -1836,7 +1836,7 @@ TEST(StrTest, Convert) {
|
|||||||
EXPECT_EQ("2012-12-9", s);
|
EXPECT_EQ("2012-12-9", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string vformat_message(int id, const char *format, fmt::format_args args) {
|
std::string vformat_message(int id, const char *format, fmt::format_args args) {
|
||||||
fmt::memory_buffer buffer;
|
fmt::memory_buffer buffer;
|
||||||
format_to(buffer, "[{}] ", id);
|
format_to(buffer, "[{}] ", id);
|
||||||
vformat_to(buffer, format, args);
|
vformat_to(buffer, format, args);
|
||||||
|
Reference in New Issue
Block a user