Merge StringWriter into StringBuffer
diff --git a/fmt/string.h b/fmt/string.h
index 35154f4..eae6d8a 100644
--- a/fmt/string.h
+++ b/fmt/string.h
@@ -14,11 +14,36 @@
namespace fmt {
-namespace internal {
+/**
+ \rst
+ This class template represents a character buffer backed by std::string.
-// A buffer that stores data in ``std::string``.
-template <typename Char>
-class StringBuffer : public basic_buffer<Char> {
+ 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_;
@@ -30,7 +55,11 @@
}
public:
- // Moves the data to ``str`` clearing the buffer.
+ /**
+ \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_);
@@ -38,64 +67,9 @@
this->ptr_ = 0;
}
};
-} // namespace internal
-/**
- \rst
- This class template provides operations for formatting and writing data
- into a character stream. The output is stored in ``std::string`` that grows
- dynamically.
-
- You can use one of the following typedefs for common character types
- and the standard allocator:
-
- +---------------+----------------------------+
- | Type | Definition |
- +===============+============================+
- | StringWriter | BasicStringWriter<char> |
- +---------------+----------------------------+
- | WStringWriter | BasicStringWriter<wchar_t> |
- +---------------+----------------------------+
-
- **Example**::
-
- StringWriter out;
- out << "The answer is " << 42 << "\n";
-
- 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 BasicStringWriter : public basic_writer<Char> {
- private:
- internal::StringBuffer<Char> buffer_;
-
- public:
- /**
- \rst
- Constructs a :class:`fmt::BasicStringWriter` object.
- \endrst
- */
- BasicStringWriter() : basic_writer<Char>(buffer_) {}
-
- /**
- \rst
- Moves the buffer content to *str* clearing the buffer.
- \endrst
- */
- void move_to(std::basic_string<Char> &str) {
- buffer_.move_to(str);
- }
-};
-
-typedef BasicStringWriter<char> StringWriter;
-typedef BasicStringWriter<wchar_t> WStringWriter;
+typedef basic_string_buffer<char> string_buffer;
+typedef basic_string_buffer<wchar_t> wstring_buffer;
/**
\rst
@@ -110,9 +84,11 @@
*/
template <typename T>
std::string to_string(const T &value) {
- fmt::MemoryWriter w;
- w.write(value);
- return w.str();
+ string_buffer buf;
+ basic_writer<char>(buf).write(value);
+ std::string str;
+ buf.move_to(str);
+ return str;
}
}
diff --git a/test/string-test.cc b/test/string-test.cc
index b02867d..6d9dd12 100644
--- a/test/string-test.cc
+++ b/test/string-test.cc
@@ -10,10 +10,10 @@
#include "fmt/string.h"
#include "gtest/gtest.h"
-using fmt::internal::StringBuffer;
+using fmt::string_buffer;
TEST(StringBufferTest, Empty) {
- StringBuffer<char> buffer;
+ string_buffer buffer;
EXPECT_EQ(0, buffer.size());
EXPECT_EQ(0, buffer.capacity());
std::string data;
@@ -25,7 +25,7 @@
}
TEST(StringBufferTest, Reserve) {
- StringBuffer<char> buffer;
+ string_buffer buffer;
std::size_t capacity = std::string().capacity() + 10;
buffer.reserve(capacity);
EXPECT_EQ(0, buffer.size());
@@ -36,7 +36,7 @@
}
TEST(StringBufferTest, Resize) {
- StringBuffer<char> buffer;
+ string_buffer buffer;
std::size_t size = std::string().capacity() + 10;
buffer.resize(size);
EXPECT_EQ(size, buffer.size());
@@ -47,7 +47,7 @@
}
TEST(StringBufferTest, MoveTo) {
- StringBuffer<char> buffer;
+ string_buffer buffer;
std::size_t size = std::string().capacity() + 10;
buffer.resize(size);
const char *p = &buffer[0];
@@ -58,25 +58,12 @@
EXPECT_EQ(0, buffer.capacity());
}
-TEST(StringWriterTest, MoveTo) {
- fmt::StringWriter out;
- out.write("The answer is ");
- out.write(42);
- out.write("\n");
- std::string s;
- out.move_to(s);
- EXPECT_EQ("The answer is 42\n", s);
- EXPECT_EQ(0, out.size());
-}
-
-TEST(StringWriterTest, WString) {
- fmt::WStringWriter out;
- out.write("The answer is ");
- out.write(42);
- out.write("\n");
+TEST(StringBufferTest, WString) {
+ fmt::wstring_buffer out;
+ out.push_back(L'x');
std::wstring s;
out.move_to(s);
- EXPECT_EQ(L"The answer is 42\n", s);
+ EXPECT_EQ(L"x", s);
}
TEST(StringTest, ToString) {