From 18f3af443ec13df374ec864e0a27a7d3a01050e0 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 7 Nov 2016 22:18:56 -0500 Subject: [PATCH] add GapBuffer::compact() --- src/core/GapBuffer.cc | 10 ++++++++++ src/core/GapBuffer.h | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/GapBuffer.cc b/src/core/GapBuffer.cc index f35cc12..d38d58f 100644 --- a/src/core/GapBuffer.cc +++ b/src/core/GapBuffer.cc @@ -1,5 +1,6 @@ #include "GapBuffer.h" #include "System.h" +#include GapBuffer::GapBuffer(Encoding::Type encoding) { @@ -33,6 +34,15 @@ std::shared_ptr GapBuffer::add_cursor() return cursor; } +void GapBuffer::compact() +{ + if (m_gap_position < m_size) + { + memmove(&m_buffer[m_gap_position], &m_buffer[m_gap_position + gap_size()], m_size - m_gap_position); + m_gap_position = m_size; + } +} + void GapBuffer::Iterator::go_forward() { diff --git a/src/core/GapBuffer.h b/src/core/GapBuffer.h index 0931e9e..e5f80a3 100644 --- a/src/core/GapBuffer.h +++ b/src/core/GapBuffer.h @@ -102,9 +102,11 @@ public: } else { - return &m_buffer[offset + (m_buffer_size - m_size)]; + return &m_buffer[offset + gap_size()]; } } + size_t gap_size() const { return m_buffer_size - m_size; } + void compact(); protected: uint8_t * m_buffer;