#ifndef BUFFERITERATOR_H #define BUFFERITERATOR_H #include #include #include "Encoding.h" #include "GapBuffer.h" class BufferIterator { public: BufferIterator(GapBuffer * gap_buffer, Encoding::Type encoding) { m_gap_buffer = gap_buffer; m_offset = 0u; m_encoding = encoding; } bool valid() const { return m_offset < m_gap_buffer->size(); } void go_forward(); bool check_go_forward(); void go_back(); bool check_go_back(); uint8_t * address() const { return m_gap_buffer->address(m_offset); } uint32_t operator*() const { if (valid()) { return Encoding::decode(m_encoding, address()); } else { return 0xFFFFFFFFu; } } GapBuffer * gap_buffer() const { return m_gap_buffer; } bool operator<(const BufferIterator & other) const { return m_offset < other.m_offset; } size_t offset() { return m_offset; } void set_offset(size_t new_offset) { m_offset = new_offset; } protected: GapBuffer * m_gap_buffer; size_t m_offset; Encoding::Type m_encoding; }; #endif