diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index ddfb9ca..cfce928 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -401,10 +401,17 @@ void PieceTable::insertion_test(Cursor & c) change->new_link[1][1] = end_piece; } - change->new_link[0][0]->next = change->new_link[0][1]; - change->new_link[0][1]->prev = change->new_link[0][0]; - change->new_link[1][0]->next = change->new_link[1][1]; - change->new_link[1][1]->prev = change->new_link[1][0]; + apply_change(change, 0u); c.warp_to_inserted_piece(piece); } + +void PieceTable::apply_change(Change * change, uint8_t reverse) +{ + uint8_t i1 = reverse; + uint8_t i2 = reverse ^ 1u; + change->new_link[i1][i1]->next = change->new_link[i1][i2]; + change->new_link[i1][i2]->prev = change->new_link[i1][i1]; + change->new_link[i2][i1]->next = change->new_link[i2][i2]; + change->new_link[i2][i2]->prev = change->new_link[i2][i1]; +} diff --git a/src/core/PieceTable.h b/src/core/PieceTable.h index 46a670b..e9cdde2 100644 --- a/src/core/PieceTable.h +++ b/src/core/PieceTable.h @@ -164,6 +164,8 @@ public: void insertion_test(Cursor & c); + void apply_change(Change * change, uint8_t reverse); + protected: const uint8_t * m_file_buffer; unsigned long m_file_buffer_size;