From 65251a9d8685cbdb24b2b4f5ff65ef3e00a0d634 Mon Sep 17 00:00:00 2001 From: vng Date: Fri, 27 Mar 2015 13:52:54 +0300 Subject: [PATCH] Added emplace_back to buffer_vector. --- base/base_tests/buffer_vector_test.cpp | 6 +++--- base/buffer_vector.hpp | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/base/base_tests/buffer_vector_test.cpp b/base/base_tests/buffer_vector_test.cpp index 4e85d4ca96..3a209197f4 100644 --- a/base/base_tests/buffer_vector_test.cpp +++ b/base/base_tests/buffer_vector_test.cpp @@ -275,8 +275,8 @@ typedef buffer_vector VectorT; VectorT GetVector() { VectorT v; - v.push_back("0"); - v.push_back("1"); + v.emplace_back("0"); + v.emplace_back("1"); return v; } @@ -294,7 +294,7 @@ UNIT_TEST(BufferVectorMove) VectorT v1 = GetVector(); TestVector(v1, 2); - v1.push_back("2"); + v1.emplace_back("2"); TestVector(v1, 3); VectorT v2(move(v1)); diff --git a/base/buffer_vector.hpp b/base/buffer_vector.hpp index 61e45fc300..31fd71bb7f 100644 --- a/base/buffer_vector.hpp +++ b/base/buffer_vector.hpp @@ -316,6 +316,28 @@ public: } } + template + void emplace_back(Args &&... args) + { + if (IsDynamic()) + m_dynamic.emplace_back(args...); + else + { + if (m_size < N) + { + value_type v(args...); + Swap(v, m_static[m_size++]); + } + else + { + ASSERT_EQUAL(m_size, N, ()); + SwitchToDynamic(); + m_dynamic.emplace_back(args...); + ASSERT_EQUAL(m_dynamic.size(), N + 1, ()); + } + } + } + template void insert(const_iterator where, IterT beg, IterT end) { ptrdiff_t const pos = where - data();