diff --git a/base/base_tests/buffer_vector_test.cpp b/base/base_tests/buffer_vector_test.cpp index 62133de144..4e843a1b2c 100644 --- a/base/base_tests/buffer_vector_test.cpp +++ b/base/base_tests/buffer_vector_test.cpp @@ -168,6 +168,33 @@ UNIT_TEST(BufferVectorInsert) } } +UNIT_TEST(BufferVectorAppend) +{ + for (size_t initialLength = 0; initialLength < 20; ++initialLength) + { + for (size_t insertLength = 0; insertLength < 20; ++insertLength) + { + buffer_vector b; + vector v; + for (size_t i = 0; i < initialLength; ++i) + { + b.push_back('A' + i); + v.push_back('A' + i); + } + + vector dataToInsert(insertLength); + for (size_t i = 0; i < insertLength; ++i) + dataToInsert[i] = 'a' + i; + + b.append(dataToInsert.begin(), dataToInsert.end()); + v.insert(v.end(), dataToInsert.begin(), dataToInsert.end()); + + vector result(b.begin(), b.end()); + TEST_EQUAL(v, result, (initialLength, insertLength)); + } + } +} + UNIT_TEST(BufferVectorPopBack) { for (size_t len = 1; len < 6; ++len) diff --git a/base/buffer_vector.hpp b/base/buffer_vector.hpp index ffdd30e4a0..ca31a9f65d 100644 --- a/base/buffer_vector.hpp +++ b/base/buffer_vector.hpp @@ -34,13 +34,12 @@ public: } template - void assign(IterT beg, IterT end) + void append(IterT beg, IterT end) { if (m_size == USE_DYNAMIC) - m_dynamic.assign(beg, end); + m_dynamic.insert(m_dynamic.end(), beg, end); else { - m_size = 0; while (beg != end) { if (m_size == N) @@ -56,6 +55,18 @@ public: } } + template + void assign(IterT beg, IterT end) + { + if (m_size == USE_DYNAMIC) + m_dynamic.assign(beg, end); + else + { + m_size = 0; + append(beg, end); + } + } + void reserve(size_t n) { if (m_size == USE_DYNAMIC || n > N)