Fix PieceTable::Cursor::prev_line and next_line to support empty pieces

This commit is contained in:
Josh Holtrop 2016-10-28 21:51:51 -04:00
parent 878b9aaf34
commit 9756519f13

View File

@ -351,35 +351,35 @@ bool PieceTable::Cursor::is_end_of_line()
PieceTable::Piece * PieceTable::Cursor::prev_line() const
{
Piece * p = iterator.piece;
while ((!p->prev->eol()) && (p->prev != iterator.piece_table->start_piece))
{
p = p->prev;
}
if (p->prev == iterator.piece_table->start_piece)
if (!iterator.valid())
{
return nullptr;
}
p = p->prev;
while ((!p->prev->eol()) && (p->prev != iterator.piece_table->start_piece))
Cursor cursor2 = *this;
cursor2.go_start_of_line();
cursor2.iterator.go_prev_position();
if (!cursor2.iterator.valid())
{
p = p->prev;
return nullptr;
}
return p;
cursor2.go_start_of_line();
return cursor2.iterator.piece;
}
PieceTable::Piece * PieceTable::Cursor::next_line() const
{
Piece * p = iterator.piece;
while ((!p->eol()) && (p->next != iterator.piece_table->end_piece))
{
p = p->next;
}
if (p->next == iterator.piece_table->end_piece)
if (!iterator.valid())
{
return nullptr;
}
return p->next;
Cursor cursor2 = *this;
cursor2.go_end_of_line(true);
cursor2.iterator.go_next_position();
if (!cursor2.iterator.valid())
{
return nullptr;
}
return cursor2.iterator.piece;
}
void PieceTable::Cursor::init_column()