From 9756519f13713d592269f391613ff295fe02e78b Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 28 Oct 2016 21:51:51 -0400 Subject: [PATCH] Fix PieceTable::Cursor::prev_line and next_line to support empty pieces --- src/core/PieceTable.cc | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index e7d09c0..9a36aa9 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -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()