diff options
author | Victor Zverovich <victor.zverovich@gmail.com> | 2014-08-21 08:49:13 -0700 |
---|---|---|
committer | Victor Zverovich <victor.zverovich@gmail.com> | 2014-08-21 08:49:13 -0700 |
commit | dd4323f31c220f1869dffa992cf09133ba382ca3 (patch) | |
tree | b5653e802eb105c8e924e023f49e9cffdbe76351 | |
parent | f9561671cfaf9107942575b30c2422e9b675c8ba (diff) | |
download | fmtlib-dd4323f31c220f1869dffa992cf09133ba382ca3.tar.gz |
Add fprintf and write docs.
-rw-r--r-- | doc/index.rst | 48 | ||||
-rw-r--r-- | format.cc | 18 | ||||
-rw-r--r-- | format.h | 66 |
3 files changed, 90 insertions, 42 deletions
diff --git a/doc/index.rst b/doc/index.rst index 77ef4a3e..ffe615b7 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -6,8 +6,8 @@ Usage ----- To use the C++ Format library, add ``format.h`` and ``format.cc`` from -a `release archive <https://github.com/cppformat/cppformat/releases/latest>`__ -or the `Git repository <https://github.com/cppformat/cppformat>`__ to your project. +a `release archive <https://github.com/cppformat/cppformat/releases/latest>`_ +or the `Git repository <https://github.com/cppformat/cppformat>`_ to your project. If you are using Visual C++ with precompiled headers, you might need to add the line @@ -25,6 +25,20 @@ All functions and classes provided by the C++ Format library reside in namespace ``fmt`` and macros have prefix ``FMT_``. For brevity the namespace is usually omitted in examples. +Formatting functions +^^^^^^^^^^^^^^^^^^^^ + +The following functions use `format string syntax`_ similar to the one +used by Python's `str.format +<http://docs.python.org/3/library/stdtypes.html#str.format>`_ function. +They take *format_str* and *args* as arguments. + +*format_str* is a format string that contains literal text and replacement +fields surrounded by braces ``{}``. The fields are replaced with formatted +arguments in the resulting string. + +*args* is an argument list representing arbitrary arguments. + .. doxygenfunction:: fmt::format(StringRef, const ArgList &) .. doxygenfunction:: fmt::print(StringRef, const ArgList &) @@ -33,20 +47,25 @@ namespace is usually omitted in examples. .. doxygenfunction:: fmt::print(std::ostream &, StringRef, const ArgList &) -.. doxygendefine:: FMT_VARIADIC +Printf formatting functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. doxygenclass:: fmt::BasicWriter - :members: +The following functions use `printf format string syntax +<http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html>`_ with +a POSIX extension for positional arguments. -.. doxygenclass:: fmt::ArgList - :members: +.. doxygenfunction:: fmt::printf(StringRef, const ArgList &) -.. doxygenclass:: fmt::BasicStringRef - :members: +.. doxygenfunction:: fmt::fprintf(std::FILE *, StringRef, const ArgList &) + +.. doxygenfunction:: fmt::sprintf(StringRef, const ArgList &) Write API --------- +.. doxygenclass:: fmt::BasicWriter + :members: + .. doxygenfunction:: fmt::bin .. doxygenfunction:: fmt::oct @@ -59,6 +78,17 @@ Write API .. _formatstrings: +Utilities +--------- + +.. doxygendefine:: FMT_VARIADIC + +.. doxygenclass:: fmt::ArgList + :members: + +.. doxygenclass:: fmt::BasicStringRef + :members: + System Errors ------------- @@ -1248,21 +1248,15 @@ void fmt::report_windows_error( } #endif -void fmt::print(StringRef format, const ArgList &args) { +void fmt::print(std::FILE *f, StringRef format_str, const ArgList &args) { Writer w; - w.write(format, args); - std::fwrite(w.data(), 1, w.size(), stdout); -} - -void fmt::print(std::FILE *f, StringRef format, const ArgList &args) { - Writer w; - w.write(format, args); + w.write(format_str, args); std::fwrite(w.data(), 1, w.size(), f); } -void fmt::print(std::ostream &os, StringRef format, const ArgList &args) { +void fmt::print(std::ostream &os, StringRef format_str, const ArgList &args) { Writer w; - w.write(format, args); + w.write(format_str, args); os.write(w.data(), w.size()); } @@ -1274,10 +1268,10 @@ void fmt::print_colored(Color c, StringRef format, const ArgList &args) { std::fputs(RESET_COLOR, stdout); } -void fmt::printf(StringRef format, const ArgList &args) { +int fmt::fprintf(std::FILE *f, StringRef format, const ArgList &args) { Writer w; printf(w, format, args); - std::fwrite(w.data(), 1, w.size(), stdout); + return std::fwrite(w.data(), 1, w.size(), f); } // Explicit instantiations for char. @@ -1745,21 +1745,11 @@ void print_colored(Color c, StringRef format, const ArgList &args); /** \rst - Formats a string similarly to Python's `str.format - <http://docs.python.org/3/library/stdtypes.html#str.format>`__ function - and returns the result as a string. - - *format_str* is a format string that contains literal text and replacement - fields surrounded by braces ``{}``. The fields are replaced with formatted - arguments in the resulting string. - - *args* is an argument list representing arbitrary arguments. + Formats arguments and returns the result as a string. **Example**:: std::string message = format("The answer is {}", 42); - - See also `Format String Syntax`_. \endrst */ inline std::string format(StringRef format_str, const ArgList &args) { @@ -1776,36 +1766,38 @@ inline std::wstring format(WStringRef format_str, const ArgList &args) { /** \rst - Prints formatted data to ``stdout``. + Prints formatted data to the file *f*. **Example**:: - print("Elapsed time: {0:.2f} seconds", 1.23); + print(stderr, "Don't {}!", "panic"); \endrst */ -void print(StringRef format, const ArgList &args); +void print(std::FILE *f, StringRef format_str, const ArgList &args); /** \rst - Prints formatted data to a file. + Prints formatted data to ``stdout``. **Example**:: - print(stderr, "Don't {}!", "panic"); + print("Elapsed time: {0:.2f} seconds", 1.23); \endrst */ -void print(std::FILE *f, StringRef format, const ArgList &args); +inline void print(StringRef format_str, const ArgList &args) { + print(stdout, format_str, args); +} /** \rst - Prints formatted data to a stream. + Prints formatted data to the stream *os*. **Example**:: print(cerr, "Don't {}!", "panic"); \endrst */ -void print(std::ostream &os, StringRef format, const ArgList &args); +void print(std::ostream &os, StringRef format_str, const ArgList &args); template <typename Char> void printf(BasicWriter<Char> &w, @@ -1813,13 +1805,44 @@ void printf(BasicWriter<Char> &w, internal::PrintfFormatter<Char>().format(w, format, args); } +/** + \rst + Formats arguments and returns the result as a string. + + **Example**:: + + std::string message = fmt::sprintf("The answer is %d", 42); + \endrst +*/ inline std::string sprintf(StringRef format, const ArgList &args) { Writer w; printf(w, format, args); return w.str(); } -void printf(StringRef format, const ArgList &args); +/** + \rst + Prints formatted data to the file *f*. + + **Example**:: + + fmt::fprintf(stderr, "Don't %s!", "panic"); + \endrst + */ +int fprintf(std::FILE *f, StringRef format, const ArgList &args); + +/** + \rst + Prints formatted data to ``stdout``. + + **Example**:: + + fmt::printf("Elapsed time: %.2f seconds", 1.23); + \endrst + */ +inline int printf(StringRef format, const ArgList &args) { + return fprintf(stdout, format, args); +} /** Fast integer formatter. @@ -2032,7 +2055,8 @@ FMT_VARIADIC(void, print, std::FILE *, StringRef) FMT_VARIADIC(void, print, std::ostream &, StringRef) FMT_VARIADIC(void, print_colored, Color, StringRef) FMT_VARIADIC(std::string, sprintf, StringRef) -FMT_VARIADIC(void, printf, StringRef) +FMT_VARIADIC(int, printf, StringRef) +FMT_VARIADIC(int, fprintf, std::FILE *, StringRef) } // Restore warnings. |