43 lines
938 B
C++
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
|