mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-11 21:38:05 +00:00
Move fmt::fprintf to printf.h
This commit is contained in:
parent
ed30108918
commit
9dbb60c4c8
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
19
fmt/printf.h
19
fmt/printf.h
@ -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_
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user