diff options
author | Yury Melnichek <melnichek@malinovka.local> | 2011-08-05 20:59:47 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:21:29 +0300 |
commit | 05da4a8e57dfd3f63532e2aefa7ea956bcc16ab4 (patch) | |
tree | f68211dc2cff12997ca2eff76fd4f1d254ad8a42 /base | |
parent | 096b42db2c5c22045dd6d6960eeb6569174ee0ce (diff) |
Add buffer_vector::append().
Diffstat (limited to 'base')
-rw-r--r-- | base/base_tests/buffer_vector_test.cpp | 27 | ||||
-rw-r--r-- | base/buffer_vector.hpp | 17 |
2 files changed, 41 insertions, 3 deletions
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<char, 5> b; + vector<char> v; + for (size_t i = 0; i < initialLength; ++i) + { + b.push_back('A' + i); + v.push_back('A' + i); + } + + vector<int> 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<char> 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 <typename IterT> - 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 <typename IterT> + 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) |