add Text::to_s() for testing

This commit is contained in:
Josh Holtrop 2014-06-05 20:01:15 -04:00
parent fa7a46a2d4
commit 6ec2a1584d
2 changed files with 28 additions and 4 deletions

View File

@ -3,6 +3,7 @@
#include <stdint.h> #include <stdint.h>
#include "jes/Ref.h" #include "jes/Ref.h"
#include <string>
namespace jes namespace jes
{ {
@ -16,13 +17,17 @@ namespace jes
Character operator[](int index) 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: protected:
void compact();
uint8_t * m_buffer; uint8_t * m_buffer;
size_t m_size; size_t m_size;
size_t m_insert_index; size_t m_gap_index;
size_t m_gap_size; size_t m_gap_size;
}; };
typedef Ref<Text> TextRef; typedef Ref<Text> TextRef;

View File

@ -7,7 +7,7 @@ namespace jes
{ {
m_buffer = NULL; m_buffer = NULL;
m_size = 0; m_size = 0;
m_insert_index = 0; m_gap_index = 0;
m_gap_size = 0; m_gap_size = 0;
} }
@ -15,8 +15,27 @@ namespace jes
{ {
m_buffer = new uint8_t[size]; m_buffer = new uint8_t[size];
m_size = size; m_size = size;
m_insert_index = size; m_gap_index = size;
m_gap_size = 0; m_gap_size = 0;
memcpy(m_buffer, &buf[0], size); 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;
}
}
} }