Merge ArrayWriter into FixedBuffer
diff --git a/fmt/format.h b/fmt/format.h
index 5b8f5bd..fff6adf 100644
--- a/fmt/format.h
+++ b/fmt/format.h
@@ -586,7 +586,7 @@
/**
\rst
- A buffer supporting a subset of ``std::vector``'s operations.
+ A contiguous memory buffer with an optional growing ability.
\endrst
*/
template <typename T>
@@ -2843,9 +2843,17 @@
typedef BasicMemoryWriter<char> MemoryWriter;
typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
-// A fixed-size buffer.
+/**
+ \rst
+ A fixed-size memory buffer. For a dynamically growing buffer use
+ :class:`fmt::internal::MemoryBuffer`.
+
+ Trying to increase the buffer size past the initial capacity will throw
+ ``std::runtime_error``.
+ \endrst
+ */
template <typename Char>
-class FixedBuffer : public fmt::basic_buffer<Char> {
+class FixedBuffer : public basic_buffer<Char> {
public:
/**
\rst
@@ -2854,54 +2862,20 @@
\endrst
*/
FixedBuffer(Char *array, std::size_t size)
- : fmt::basic_buffer<Char>(array, size) {}
-
- protected:
- FMT_API void grow(std::size_t size);
-};
-
-/**
- \rst
- This class template provides operations for formatting and writing data
- into a fixed-size array. For writing into a dynamically growing buffer
- use :class:`fmt::BasicMemoryWriter`.
-
- Any write method will throw ``std::runtime_error`` if the output doesn't fit
- into the array.
-
- You can use one of the following typedefs for common character types:
-
- +--------------+---------------------------+
- | Type | Definition |
- +==============+===========================+
- | ArrayWriter | BasicArrayWriter<char> |
- +--------------+---------------------------+
- | WArrayWriter | BasicArrayWriter<wchar_t> |
- +--------------+---------------------------+
- \endrst
- */
-template <typename Char>
-class BasicArrayWriter : public basic_writer<Char> {
- private:
- FixedBuffer<Char> buffer_;
-
- public:
- BasicArrayWriter(Char *array, std::size_t size)
- : basic_writer<Char>(buffer_), buffer_(array, size) {}
+ : basic_buffer<Char>(array, size) {}
/**
\rst
- Constructs a :class:`fmt::BasicArrayWriter` object for *array* of the
+ Constructs a :class:`fmt::FixedBuffer` object for *array* of the
size known at compile time.
\endrst
*/
template <std::size_t SIZE>
- explicit BasicArrayWriter(Char (&array)[SIZE])
- : basic_writer<Char>(buffer_), buffer_(array, SIZE) {}
-};
+ explicit FixedBuffer(Char (&array)[SIZE]) : basic_buffer<Char>(array, SIZE) {}
-typedef BasicArrayWriter<char> ArrayWriter;
-typedef BasicArrayWriter<wchar_t> WArrayWriter;
+ protected:
+ FMT_API void grow(std::size_t size);
+};
// Reports a system error without throwing an exception.
// Can be used to report errors from destructors.
diff --git a/test/format-test.cc b/test/format-test.cc
index 02b99fd..56ea713 100644
--- a/test/format-test.cc
+++ b/test/format-test.cc
@@ -474,13 +474,6 @@
EXPECT_EQ(L"cafe", write_wstr(0xcafe, type='x'));
}
-TEST(ArrayWriterTest, Ctor) {
- char array[10] = "garbage";
- fmt::ArrayWriter w(array, sizeof(array));
- EXPECT_EQ(0u, w.size());
- EXPECT_STREQ("", w.c_str());
-}
-
TEST(FormatToTest, FormatWithoutArgs) {
fmt::internal::MemoryBuffer<char> buffer;
format_to(buffer, "test");
@@ -498,29 +491,6 @@
EXPECT_EQ("part1part2", to_string(buffer));
}
-TEST(ArrayWriterTest, CompileTimeSizeCtor) {
- char array[10] = "garbage";
- fmt::ArrayWriter w(array);
- EXPECT_EQ(0u, w.size());
- EXPECT_STREQ("", w.c_str());
- format_to(w.buffer(), "{:10}", 1);
-}
-
-TEST(ArrayWriterTest, BufferOverflow) {
- char array[10];
- fmt::ArrayWriter w(array, sizeof(array));
- format_to(w.buffer(), "{:10}", 1);
- EXPECT_THROW_MSG(format_to(w.buffer(), "{}", 1), std::runtime_error,
- "buffer overflow");
-}
-
-TEST(ArrayWriterTest, WChar) {
- wchar_t array[10];
- fmt::WArrayWriter w(array);
- format_to(w.buffer(), L"{}", 42);
- EXPECT_EQ(L"42", w.str());
-}
-
TEST(FormatterTest, Escape) {
EXPECT_EQ("{", format("{{"));
EXPECT_EQ("before {", format("before {{"));
diff --git a/test/util-test.cc b/test/util-test.cc
index 9466c37..ab14955 100644
--- a/test/util-test.cc
+++ b/test/util-test.cc
@@ -213,19 +213,6 @@
EXPECT_EQ(20u, buffer.capacity());
}
-TEST(BufferTest, PushBack) {
- int data[15];
- MockBuffer<int> buffer(data, 10);
- buffer.push_back(11);
- EXPECT_EQ(11, buffer[0]);
- EXPECT_EQ(1u, buffer.size());
- buffer.resize(10);
- EXPECT_CALL(buffer, do_grow(11));
- buffer.push_back(22);
- EXPECT_EQ(22, buffer[10]);
- EXPECT_EQ(11u, buffer.size());
-}
-
TEST(BufferTest, Append) {
char data[15];
MockBuffer<char> buffer(data, 10);
@@ -393,6 +380,29 @@
EXPECT_CALL(alloc, deallocate(&mem2[0], 2 * size));
}
+TEST(FixedBufferTest, Ctor) {
+ char array[10] = "garbage";
+ fmt::FixedBuffer<char> buffer(array, sizeof(array));
+ EXPECT_EQ(0u, buffer.size());
+ EXPECT_EQ(10u, buffer.capacity());
+ EXPECT_EQ(array, buffer.data());
+}
+
+TEST(FixedBufferTest, CompileTimeSizeCtor) {
+ char array[10] = "garbage";
+ fmt::FixedBuffer<char> buffer(array);
+ EXPECT_EQ(0u, buffer.size());
+ EXPECT_EQ(10u, buffer.capacity());
+ EXPECT_EQ(array, buffer.data());
+}
+
+TEST(FixedBufferTest, BufferOverflow) {
+ char array[10];
+ fmt::FixedBuffer<char> buffer(array);
+ buffer.resize(10);
+ EXPECT_THROW_MSG(buffer.resize(11), std::runtime_error, "buffer overflow");
+}
+
TEST(UtilTest, Increment) {
char s[10] = "123";
increment(s);