Update docs

This commit is contained in:
Victor Zverovich 2018-03-19 19:47:14 -07:00
parent 6d339e32a0
commit 17258e9c63
3 changed files with 33 additions and 45 deletions

View File

@ -59,7 +59,9 @@ Named arguments
Argument lists Argument lists
-------------- --------------
.. doxygenclass:: fmt::basic_arg .. doxygenfunction:: fmt::make_args(const Args&...)
.. doxygenclass:: fmt::arg_store
:members: :members:
.. doxygenclass:: fmt::basic_format_args .. doxygenclass:: fmt::basic_format_args
@ -67,7 +69,8 @@ Argument lists
.. doxygenstruct:: fmt::format_args .. doxygenstruct:: fmt::format_args
.. doxygenfunction:: fmt::make_args(const Args&...) .. doxygenclass:: fmt::basic_arg
:members:
Compatibility Compatibility
------------- -------------
@ -193,6 +196,7 @@ allocator::
const Args & ... args) { const Args & ... args) {
return vformat(alloc, format_str, fmt::make_args(args...)); return vformat(alloc, format_str, fmt::make_args(args...));
} }
Custom formatting of built-in types Custom formatting of built-in types
----------------------------------- -----------------------------------
@ -237,9 +241,6 @@ custom argument formatter class::
.. doxygenclass:: fmt::ArgVisitor .. doxygenclass:: fmt::ArgVisitor
:members: :members:
.. doxygenclass:: fmt::arg_formatter_base
:members:
.. doxygenclass:: fmt::arg_formatter .. doxygenclass:: fmt::arg_formatter
:members: :members:
@ -305,36 +306,3 @@ argument type doesn't match its format specification.
.. doxygenfunction:: fprintf(std::ostream&, string_view, const Args&...) .. doxygenfunction:: fprintf(std::ostream&, string_view, const Args&...)
.. doxygenfunction:: sprintf(string_view, const Args&...) .. doxygenfunction:: sprintf(string_view, const Args&...)
Write API
=========
The write API provides classes for writing formatted data into character
streams. It is usually faster than the `format API`_ but, as IOStreams,
may result in larger compiled code size. The main writer class is
`~fmt::basic_memory_writer` which stores its output in a memory buffer and
provides direct access to it. It is possible to create custom writers that
store output elsewhere by subclassing `~fmt::BasicWriter`.
.. doxygenclass:: fmt::BasicWriter
:members:
.. doxygenclass:: fmt::basic_memory_writer
:members:
.. doxygenclass:: fmt::BasicArrayWriter
:members:
.. doxygenclass:: fmt::BasicStringWriter
:members:
.. doxygenfunction:: bin(int)
.. doxygenfunction:: oct(int)
.. doxygenfunction:: hex(int)
.. doxygenfunction:: hexu(int)
.. doxygenfunction:: pad(int, unsigned, Char)

View File

@ -950,6 +950,13 @@ inline typename std::enable_if<!IS_PACKED, basic_arg<Context>>::type
} }
} }
/**
\rst
An array of references to arguments. It can be implicitly converted into
`~fmt::basic_format_args` for passing into type-erased formatting functions
such as `~fmt::vformat`.
\endrst
*/
template <typename Context, typename ...Args> template <typename Context, typename ...Args>
class arg_store { class arg_store {
private: private:
@ -964,6 +971,8 @@ class arg_store {
// If the arguments are not packed, add one more element to mark the end. // If the arguments are not packed, add one more element to mark the end.
value_type data_[NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1)]; value_type data_[NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1)];
friend class basic_format_args<Context>;
public: public:
static const uint64_t TYPES; static const uint64_t TYPES;
@ -978,8 +987,6 @@ class arg_store {
#endif #endif
basic_format_args<Context> operator*() const { return *this; } basic_format_args<Context> operator*() const { return *this; }
const value_type *data() const { return data_; }
}; };
template <typename Context, typename ...Args> template <typename Context, typename ...Args>
@ -987,6 +994,13 @@ const uint64_t arg_store<Context, Args...>::TYPES = IS_PACKED ?
internal::get_types<Context, Args...>() : internal::get_types<Context, Args...>() :
-static_cast<int64_t>(NUM_ARGS); -static_cast<int64_t>(NUM_ARGS);
/**
\rst
Constructs an `~fmt::arg_store` object that contains references to arguments
and can be implicitly converted to `~fmt::format_args`. `Context` can be
omitted in which case it defaults to `~fmt::context`.
\endrst
*/
template <typename Context, typename ...Args> template <typename Context, typename ...Args>
inline arg_store<Context, Args...> make_args(const Args & ... args) { inline arg_store<Context, Args...> make_args(const Args & ... args) {
return arg_store<Context, Args...>(args...); return arg_store<Context, Args...>(args...);
@ -1050,10 +1064,15 @@ class basic_format_args {
public: public:
basic_format_args() : types_(0) {} basic_format_args() : types_(0) {}
/**
\rst
Constructs a `basic_format_args` object from `~fmt::arg_store`.
\endrst
*/
template <typename... Args> template <typename... Args>
basic_format_args(const arg_store<Context, Args...> &store) basic_format_args(const arg_store<Context, Args...> &store)
: types_(store.TYPES) { : types_(store.TYPES) {
set_data(store.data()); set_data(store.data_);
} }
/** Returns the argument at specified index. */ /** Returns the argument at specified index. */
@ -1065,9 +1084,9 @@ class basic_format_args {
unsigned max_size() const { unsigned max_size() const {
int64_t signed_types = static_cast<int64_t>(types_); int64_t signed_types = static_cast<int64_t>(types_);
return static_cast<unsigned>(signed_types < 0 return static_cast<unsigned>(
? -signed_types signed_types < 0 ?
: static_cast<int64_t>(internal::max_packed_args)); -signed_types : static_cast<int64_t>(internal::max_packed_args));
} }
}; };

View File

@ -1399,7 +1399,8 @@ class arg_formatter_base {
} }
void write(const char_type *value) { void write(const char_type *value) {
auto length = value != FMT_NULL ? std::char_traits<char_type>::length(value) : 0; auto length = value != FMT_NULL ?
std::char_traits<char_type>::length(value) : 0;
writer_.write_str(basic_string_view<char_type>(value, length), specs_); writer_.write_str(basic_string_view<char_type>(value, length), specs_);
} }