diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index 4543c13..9136173 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -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();