/* Formatting library for C++ - standard container utilities Copyright (c) 2012 - 2016, Victor Zverovich All rights reserved. For the license information refer to format.h. */ #ifndef FMT_CONTAINER_H_ #define FMT_CONTAINER_H_ #include "format.h" namespace fmt { namespace internal { /** \rst A "buffer" that appends data to a standard container (e.g. typically a ``std::vector`` or ``std::basic_string``). \endrst */ template class ContainerBuffer : public Buffer { private: Container& container_; protected: virtual void grow(std::size_t size) FMT_OVERRIDE { container_.resize(size); this->ptr_ = &container_[0]; this->capacity_ = size; } public: explicit ContainerBuffer(Container& container) : container_(container) { this->size_ = container_.size(); if (this->size_ > 0) { this->ptr_ = &container_[0]; this->capacity_ = this->size_; } } }; } // namespace internal /** \rst This class template provides operations for formatting and appending data to a standard *container* like ``std::vector`` or ``std::basic_string``. **Example**:: void vecformat(std::vector& dest, fmt::BasicCStringRef format, fmt::ArgList args) { fmt::BasicContainerWriter > appender(dest); appender.write(format, args); } FMT_VARIADIC(void, vecformat, std::vector&, fmt::BasicCStringRef); \endrst */ template class BasicContainerWriter : public BasicWriter { private: internal::ContainerBuffer buffer_; public: /** \rst Constructs a :class:`fmt::BasicContainerWriter` object. \endrst */ explicit BasicContainerWriter(Container& dest) : BasicWriter(buffer_), buffer_(dest) {} }; } // namespace fmt #endif // FMT_CONTAINER_H_