jes/src/core/BufferIterator.h

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