Add fprintf overload that writes to a std::ostream

For completeness, add an overload for printf that takes a std::ostream.
This commit is contained in:
Nicholas Hutchinson 2015-12-23 15:59:13 +13:00
parent 4797ca025e
commit 1a5a1708b7
3 changed files with 26 additions and 0 deletions

View File

@ -882,6 +882,13 @@ FMT_FUNC int fmt::fprintf(std::FILE *f, CStringRef format, ArgList args) {
return std::fwrite(w.data(), 1, size, f) < size ? -1 : static_cast<int>(size);
}
FMT_FUNC int fmt::fprintf(std::ostream &os, CStringRef format, ArgList args) {
MemoryWriter w;
printf(w, format, args);
os.write(w.data(), w.size());
return static_cast<int>(w.size());
}
#ifndef FMT_HEADER_ONLY
template struct fmt::internal::BasicData<void>;

View File

@ -3366,6 +3366,18 @@ FMT_VARIADIC(int, fprintf, std::FILE *, CStringRef)
*/
FMT_API void print(std::ostream &os, CStringRef format_str, ArgList args);
FMT_VARIADIC(void, print, std::ostream &, CStringRef)
/**
\rst
Prints formatted data to the stream *os*.
**Example**::
fprintf(cerr, "Don't %s!", "panic");
\endrst
*/
FMT_API int fprintf(std::ostream &os, CStringRef format_str, ArgList args);
FMT_VARIADIC(int, fprintf, std::ostream &, CStringRef)
#endif
namespace internal {

View File

@ -476,3 +476,10 @@ TEST(PrintfTest, PrintfError) {
TEST(PrintfTest, WideString) {
EXPECT_EQ(L"abc", fmt::sprintf(L"%s", TestWString(L"abc")));
}
TEST(PrintfTest, Iostream) {
std::ostringstream os;
int ret = fmt::fprintf(os, "Don't %s!", "panic");
EXPECT_EQ("Don't panic!", os.str());
EXPECT_EQ(12, ret);
}