Make Cursor::is_start_of_line() and Cursor::is_end_of_line() safe for empty pieces

This commit is contained in:
Josh Holtrop 2016-10-26 22:03:28 -04:00
parent fd6ef8cab0
commit 878b9aaf34

View File

@ -335,17 +335,18 @@ void PieceTable::Cursor::warp_to_inserted_piece(Piece * piece)
bool PieceTable::Cursor::is_start_of_line()
{
return iterator.valid() &&
(iterator.offset == 0u) &&
((iterator.piece->prev == iterator.piece_table->start_piece) ||
iterator.piece->prev->eol());
if (!iterator.valid() || (iterator.offset > 0u))
{
return false;
}
Iterator iterator2 = iterator;
iterator2.go_prev_piece();
return iterator2.piece_eol() || !iterator2.valid();
}
bool PieceTable::Cursor::is_end_of_line()
{
return iterator.valid() &&
((iterator.offset + iterator.num_bytes_in_code_point()) >= iterator.piece->length) &&
(iterator.piece->eol() || (iterator.piece->next == iterator.piece_table->end_piece));
return *iterator == INTERNAL_EOL;
}
PieceTable::Piece * PieceTable::Cursor::prev_line() const