Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorYury Melnichek <melnichek@malinovka.local>2011-08-05 20:59:47 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:21:29 +0300
commit05da4a8e57dfd3f63532e2aefa7ea956bcc16ab4 (patch)
treef68211dc2cff12997ca2eff76fd4f1d254ad8a42 /base
parent096b42db2c5c22045dd6d6960eeb6569174ee0ce (diff)
Add buffer_vector::append().
Diffstat (limited to 'base')
-rw-r--r--base/base_tests/buffer_vector_test.cpp27
-rw-r--r--base/buffer_vector.hpp17
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)