Make Cursor::go_start_of_line() and Cursor::go_end_of_line() safe for empty pieces
This commit is contained in:
parent
cd44deda9e
commit
fd6ef8cab0
@ -150,14 +150,17 @@ PieceTable::Cursor::Cursor(PieceTable * pt) : iterator(pt)
|
||||
|
||||
void PieceTable::Cursor::go_start_of_line()
|
||||
{
|
||||
if (!iterator.valid())
|
||||
return;
|
||||
while (iterator.valid() &&
|
||||
(!iterator.piece->prev->eol()) &&
|
||||
(iterator.piece->prev != iterator.piece_table->start_piece))
|
||||
Iterator last_iterator = iterator;
|
||||
for (;;)
|
||||
{
|
||||
iterator.go_prev_piece();
|
||||
if (iterator.piece_eol() || !iterator.valid())
|
||||
{
|
||||
break;
|
||||
}
|
||||
last_iterator = iterator;
|
||||
}
|
||||
iterator = last_iterator;
|
||||
iterator.offset = 0u;
|
||||
init_column();
|
||||
}
|
||||
@ -173,12 +176,25 @@ bool PieceTable::Cursor::check_go_start_of_line()
|
||||
void PieceTable::Cursor::go_end_of_line(bool allow_on_eol)
|
||||
{
|
||||
if (!iterator.valid())
|
||||
return;
|
||||
while (iterator.valid() &&
|
||||
(!iterator.piece->eol()) &&
|
||||
(iterator.piece->next != iterator.piece_table->end_piece))
|
||||
{
|
||||
iterator.go_next_piece();
|
||||
return;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
if (iterator.piece_eol())
|
||||
{
|
||||
break;
|
||||
}
|
||||
Iterator move_iterator = iterator;
|
||||
move_iterator.go_next_piece();
|
||||
if (move_iterator.valid())
|
||||
{
|
||||
iterator = move_iterator;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
iterator.go_end_of_piece();
|
||||
calculate_column();
|
||||
|
Loading…
x
Reference in New Issue
Block a user