jes/src/core/GapBuffer.h

43 lines
938 B
C++

#ifndef GAPBUFFER_H
#define GAPBUFFER_H
#include <stdint.h>
#include <stdlib.h>
#include <string>
class GapBuffer
{
public:
GapBuffer();
GapBuffer(uint8_t * buffer, size_t buffer_size, size_t size);
~GapBuffer();
size_t buffer_size() const { return m_buffer_size; }
size_t size() const { return m_size; }
uint8_t * address(size_t offset) const
{
if (offset < m_gap_position)
{
return &m_buffer[offset];
}
else
{
return &m_buffer[offset + gap_size()];
}
}
size_t gap_size() const { return m_buffer_size - m_size; }
void compact();
void insert(size_t position, const uint8_t * data, size_t length);
std::string get_string();
protected:
uint8_t * m_buffer;
size_t m_buffer_size;
size_t m_size;
size_t m_gap_position;
void ensure_free(size_t length);
void move_gap(size_t position);
};
#endif