From 9434abdd15663e69e985cb21c6c93abdafff8a1a Mon Sep 17 00:00:00 2001 From: vng Date: Fri, 4 Dec 2015 20:31:13 +0300 Subject: Optimized Write function to avoid multiple vector reallocation. --- coding/writer.hpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'coding/writer.hpp') diff --git a/coding/writer.hpp b/coding/writer.hpp index 40655aacd2..b68c9e3891 100644 --- a/coding/writer.hpp +++ b/coding/writer.hpp @@ -49,9 +49,21 @@ public: inline void Write(void const * p, size_t size) { - if (m_Pos + size > m_Data.size()) + intptr_t freeSize = m_Data.size() - m_Pos; + if (freeSize < 0) + { m_Data.resize(m_Pos + size); - memcpy(((uint8_t*)m_Data.data()) + m_Pos, p, size); + freeSize = size; + } + + memcpy(&m_Data[m_Pos], p, min(size, static_cast(freeSize))); + + if (size > freeSize) + { + uint8_t const * it = reinterpret_cast(p); + m_Data.insert(m_Data.end(), it + freeSize, it + size); + } + m_Pos += size; } -- cgit v1.2.3