| /* |
| Formatting library for C++ - string utilities |
| |
| Copyright (c) 2012 - 2016, Victor Zverovich |
| All rights reserved. |
| |
| For the license information refer to format.h. |
| */ |
| |
| #ifndef FMT_STRING_H_ |
| #define FMT_STRING_H_ |
| |
| #include "fmt/format.h" |
| |
| namespace fmt { |
| |
| /** |
| \rst |
| This class template represents a character buffer backed by std::string. |
| |
| You can use one of the following typedefs for common character types |
| and the standard allocator: |
| |
| +----------------+------------------------------+ |
| | Type | Definition | |
| +================+==============================+ |
| | string_buffer | basic_string_buffer<char> | |
| +----------------+------------------------------+ |
| | wstring_buffer | basic_string_buffer<wchar_t> | |
| +----------------+------------------------------+ |
| |
| **Example**:: |
| |
| string_buffer out; |
| format_to(out, "The answer is {}", 42); |
| |
| This will write the following output to the ``out`` object: |
| |
| .. code-block:: none |
| |
| The answer is 42 |
| |
| The output can be moved to an ``std::string`` with ``out.move_to()``. |
| \endrst |
| */template <typename Char> |
| class basic_string_buffer : public basic_buffer<Char> { |
| private: |
| std::basic_string<Char> data_; |
| |
| protected: |
| virtual void grow(std::size_t size) { |
| data_.resize(size); |
| this->ptr_ = &data_[0]; |
| this->capacity_ = size; |
| } |
| |
| public: |
| /** |
| \rst |
| Moves the buffer content to *str* clearing the buffer. |
| \endrst |
| */ |
| void move_to(std::basic_string<Char> &str) { |
| data_.resize(this->size_); |
| str.swap(data_); |
| this->capacity_ = this->size_ = 0; |
| this->ptr_ = 0; |
| } |
| }; |
| |
| typedef basic_string_buffer<char> string_buffer; |
| typedef basic_string_buffer<wchar_t> wstring_buffer; |
| |
| /** |
| \rst |
| Converts *value* to ``std::string`` using the default format for type *T*. |
| |
| **Example**:: |
| |
| #include "fmt/string.h" |
| |
| std::string answer = fmt::to_string(42); |
| \endrst |
| */ |
| template <typename T> |
| std::string to_string(const T &value) { |
| string_buffer buf; |
| basic_writer<char>(buf).write(value); |
| std::string str; |
| buf.move_to(str); |
| return str; |
| } |
| } |
| |
| #endif // FMT_STRING_H_ |