From 6ec2a1584d5234442b3d01a1a04a6e976b2230a2 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 5 Jun 2014 20:01:15 -0400 Subject: [PATCH] add Text::to_s() for testing --- src/lib/include/jes/Text.h | 9 +++++++-- src/lib/src/Text.cc | 23 +++++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/lib/include/jes/Text.h b/src/lib/include/jes/Text.h index bf94eba..64a925d 100644 --- a/src/lib/include/jes/Text.h +++ b/src/lib/include/jes/Text.h @@ -3,6 +3,7 @@ #include #include "jes/Ref.h" +#include namespace jes { @@ -16,13 +17,17 @@ namespace jes Character operator[](int index) { - return (Character)(m_buffer[index < m_insert_index ? index : index + m_gap_size]); + return (Character)(m_buffer[index < m_gap_index ? index : index + m_gap_size]); } + std::string to_s(); + protected: + void compact(); + uint8_t * m_buffer; size_t m_size; - size_t m_insert_index; + size_t m_gap_index; size_t m_gap_size; }; typedef Ref TextRef; diff --git a/src/lib/src/Text.cc b/src/lib/src/Text.cc index a6ad52c..abf62fb 100644 --- a/src/lib/src/Text.cc +++ b/src/lib/src/Text.cc @@ -7,7 +7,7 @@ namespace jes { m_buffer = NULL; m_size = 0; - m_insert_index = 0; + m_gap_index = 0; m_gap_size = 0; } @@ -15,8 +15,27 @@ namespace jes { m_buffer = new uint8_t[size]; m_size = size; - m_insert_index = size; + m_gap_index = size; m_gap_size = 0; memcpy(m_buffer, &buf[0], size); } + + std::string Text::to_s() + { + if (m_buffer == NULL) + { + return ""; + } + compact(); + return std::string((const char *)m_buffer, m_size - m_gap_size); + } + + void Text::compact() + { + if ((m_gap_index < m_size - m_gap_size) && (m_gap_size > 0)) + { + memmove(&m_buffer[m_gap_index], &m_buffer[m_gap_index + m_gap_size], m_size - m_gap_index); + m_gap_index = m_size - m_gap_size; + } + } }