Move fmt::fprintf to printf.h

This commit is contained in:
Victor Zverovich 2016-08-03 08:52:05 -07:00
parent ed30108918
commit 9dbb60c4c8
7 changed files with 47 additions and 48 deletions

View File

@ -81,8 +81,6 @@ formatting of user-defined types that have overloaded ``operator<<``::
.. doxygenfunction:: print(std::ostream&, CStringRef, ArgList) .. doxygenfunction:: print(std::ostream&, CStringRef, ArgList)
.. doxygenfunction:: fprintf(std::ostream&, CStringRef, ArgList)
Argument formatters Argument formatters
------------------- -------------------
@ -140,6 +138,8 @@ argument type doesn't match its format specification.
.. doxygenfunction:: fprintf(std::FILE *, CStringRef, ArgList) .. doxygenfunction:: fprintf(std::FILE *, CStringRef, ArgList)
.. doxygenfunction:: fprintf(std::ostream&, CStringRef, ArgList)
.. doxygenfunction:: sprintf(CStringRef, ArgList) .. doxygenfunction:: sprintf(CStringRef, ArgList)
.. doxygenclass:: fmt::PrintfFormatter .. doxygenclass:: fmt::PrintfFormatter

View File

@ -8,13 +8,11 @@
*/ */
#include "fmt/ostream.h" #include "fmt/ostream.h"
#include "fmt/printf.h"
namespace fmt { namespace fmt {
namespace { namespace internal {
// Write the content of w to os. FMT_FUNC void write(std::ostream &os, Writer &w) {
void write(std::ostream &os, Writer &w) {
const char *data = w.data(); const char *data = w.data();
typedef internal::MakeUnsigned<std::streamsize>::Type UnsignedStreamSize; typedef internal::MakeUnsigned<std::streamsize>::Type UnsignedStreamSize;
UnsignedStreamSize size = w.size(); UnsignedStreamSize size = w.size();
@ -32,13 +30,6 @@ void write(std::ostream &os, Writer &w) {
FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList args) { FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList args) {
MemoryWriter w; MemoryWriter w;
w.write(format_str, args); w.write(format_str, args);
write(os, w); internal::write(os, w);
}
FMT_FUNC int fprintf(std::ostream &os, CStringRef format, ArgList args) {
MemoryWriter w;
printf(w, format, args);
write(os, w);
return static_cast<int>(w.size());
} }
} // namespace fmt } // namespace fmt

View File

@ -66,6 +66,9 @@ struct ConvertToIntImpl<T, true> {
value = sizeof(convert(get<DummyStream>() << get<T>())) == sizeof(No) value = sizeof(convert(get<DummyStream>() << get<T>())) == sizeof(No)
}; };
}; };
// Write the content of w to os.
void write(std::ostream &os, Writer &w);
} // namespace internal } // namespace internal
// Formats a value. // Formats a value.
@ -94,18 +97,6 @@ void format(BasicFormatter<Char, ArgFormatter> &f,
*/ */
FMT_API void print(std::ostream &os, CStringRef format_str, ArgList args); FMT_API void print(std::ostream &os, CStringRef format_str, ArgList args);
FMT_VARIADIC(void, print, std::ostream &, CStringRef) 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)
} // namespace fmt } // namespace fmt
#ifdef FMT_HEADER_ONLY #ifdef FMT_HEADER_ONLY

View File

@ -13,7 +13,7 @@
#include <algorithm> // std::fill_n #include <algorithm> // std::fill_n
#include <limits> // std::numeric_limits #include <limits> // std::numeric_limits
#include "fmt/format.h" #include "fmt/ostream.h"
namespace fmt { namespace fmt {
namespace internal { namespace internal {
@ -536,6 +536,23 @@ inline int printf(CStringRef format, ArgList args) {
return fprintf(stdout, format, args); return fprintf(stdout, format, args);
} }
FMT_VARIADIC(int, printf, CStringRef) FMT_VARIADIC(int, printf, CStringRef)
/**
\rst
Prints formatted data to the stream *os*.
**Example**::
fprintf(cerr, "Don't %s!", "panic");
\endrst
*/
inline int fprintf(std::ostream &os, CStringRef format_str, ArgList args) {
MemoryWriter w;
printf(w, format_str, args);
internal::write(os, w);
return static_cast<int>(w.size());
}
FMT_VARIADIC(int, fprintf, std::ostream &, CStringRef)
} // namespace fmt } // namespace fmt
#endif // FMT_PRINTF_H_ #endif // FMT_PRINTF_H_

View File

@ -25,7 +25,7 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "fmt/ostream.cc" #include "fmt/ostream.h"
#include <sstream> #include <sstream>
#include "gmock/gmock.h" #include "gmock/gmock.h"
@ -35,13 +35,6 @@
using fmt::format; using fmt::format;
using fmt::FormatError; using fmt::FormatError;
template <typename Char>
std::basic_ostream<Char> &operator<<(
std::basic_ostream<Char> &os, const BasicTestString<Char> &s) {
os << s.value();
return os;
}
std::ostream &operator<<(std::ostream &os, const Date &d) { std::ostream &operator<<(std::ostream &os, const Date &d) {
os << d.year() << '-' << d.month() << '-' << d.day(); os << d.year() << '-' << d.month() << '-' << d.day();
return os; return os;
@ -128,22 +121,11 @@ TEST(OStreamTest, Print) {
EXPECT_EQ("Don't panic!", os.str()); EXPECT_EQ("Don't panic!", os.str());
} }
TEST(OStreamTest, PrintfCustom) {
EXPECT_EQ("abc", fmt::sprintf("%s", TestString("abc")));
}
TEST(OStreamTest, FPrintf) {
std::ostringstream os;
int ret = fmt::fprintf(os, "Don't %s!", "panic");
EXPECT_EQ("Don't panic!", os.str());
EXPECT_EQ(12, ret);
}
TEST(OStreamTest, WriteToOStream) { TEST(OStreamTest, WriteToOStream) {
std::ostringstream os; std::ostringstream os;
fmt::MemoryWriter w; fmt::MemoryWriter w;
w << "foo"; w << "foo";
fmt::write(os, w); fmt::internal::write(os, w);
EXPECT_EQ("foo", os.str()); EXPECT_EQ("foo", os.str());
} }
@ -188,5 +170,5 @@ TEST(OStreamTest, WriteToOStreamMaxSize) {
data += n; data += n;
size -= static_cast<std::size_t>(n); size -= static_cast<std::size_t>(n);
} while (size != 0); } while (size != 0);
fmt::write(os, w); fmt::internal::write(os, w);
} }

View File

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

View File

@ -87,6 +87,13 @@ const Char BasicTestString<Char>::EMPTY[] = {0};
typedef BasicTestString<char> TestString; typedef BasicTestString<char> TestString;
typedef BasicTestString<wchar_t> TestWString; typedef BasicTestString<wchar_t> TestWString;
template <typename Char>
std::basic_ostream<Char> &operator<<(
std::basic_ostream<Char> &os, const BasicTestString<Char> &s) {
os << s.value();
return os;
}
class Date { class Date {
int year_, month_, day_; int year_, month_, day_;
public: public: