#ifndef GAPBUFFER_H #define GAPBUFFER_H #include #include #include 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