56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
#ifndef BUFFERITERATOR_H
|
|
#define BUFFERITERATOR_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#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
|