add Interator and Cursor constructors
This commit is contained in:
parent
d6b3810a3c
commit
b478d17e16
@ -29,17 +29,20 @@ void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, boo
|
|||||||
|
|
||||||
std::shared_ptr<PieceTable::Cursor> PieceTable::add_cursor()
|
std::shared_ptr<PieceTable::Cursor> PieceTable::add_cursor()
|
||||||
{
|
{
|
||||||
auto cursor = std::make_shared<Cursor>();
|
auto cursor = std::make_shared<Cursor>(this);
|
||||||
|
|
||||||
cursor->iterator.piece_table = this;
|
|
||||||
cursor->iterator.piece = start_piece->next;
|
|
||||||
cursor->iterator.offset = 0u;
|
|
||||||
|
|
||||||
m_cursors.push_back(cursor);
|
m_cursors.push_back(cursor);
|
||||||
|
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PieceTable::Iterator::Iterator(PieceTable * pt)
|
||||||
|
{
|
||||||
|
piece_table = pt;
|
||||||
|
piece = pt->start_piece->next;
|
||||||
|
offset = 0u;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t PieceTable::Iterator::num_bytes_in_code_point() const
|
uint8_t PieceTable::Iterator::num_bytes_in_code_point() const
|
||||||
{
|
{
|
||||||
if (offset >= piece->length)
|
if (offset >= piece->length)
|
||||||
|
@ -59,6 +59,8 @@ public:
|
|||||||
/** Byte offset within the piece. */
|
/** Byte offset within the piece. */
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
|
||||||
|
Iterator(PieceTable * pt);
|
||||||
|
|
||||||
/** Get the character pointed to by the cursor. */
|
/** Get the character pointed to by the cursor. */
|
||||||
uint32_t operator*() const
|
uint32_t operator*() const
|
||||||
{
|
{
|
||||||
@ -102,6 +104,8 @@ public:
|
|||||||
return *iterator;
|
return *iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Cursor(PieceTable * pt) : iterator(pt) {}
|
||||||
|
|
||||||
void go_start_of_line();
|
void go_start_of_line();
|
||||||
void go_end_of_line();
|
void go_end_of_line();
|
||||||
bool go_up(int n = 1);
|
bool go_up(int n = 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user