From e0615011a342e288d93fce4c37f554d54d160e0b Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 11 Jan 2017 21:55:59 -0500 Subject: [PATCH] add Buffer::apply_change_{operation,unit}() for undo/redo --- src/core/Buffer.cc | 22 ++++++++++++++++++++++ src/core/Buffer.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index ddc9021..64a65d8 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -364,3 +364,25 @@ void Buffer::save_current_operation() m_current_change_operation_index = new_change_operation_index; } } + +void Buffer::apply_change_operation(const ChangeOperation & change_operation, bool forward) +{ + for (auto change_unit : change_operation.changes) + { + apply_change_unit(change_unit, forward); + } +} + +void Buffer::apply_change_unit(const ChangeUnit & change_unit, bool forward) +{ + if (forward == change_unit.insert) + { + insert_data(change_unit.buffer_position, + m_change_buffer->address(change_unit.change_buffer_offset), + change_unit.length); + } + else + { + erase_data(change_unit.buffer_position, change_unit.length); + } +} diff --git a/src/core/Buffer.h b/src/core/Buffer.h index b234796..e58bfb0 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -165,6 +165,8 @@ protected: void erase_data(size_t offset, size_t length); size_t lines_in_data(size_t offset, size_t length); void post_warp_cursors(); + void apply_change_operation(const ChangeOperation & change_operation, bool forward); + void apply_change_unit(const ChangeUnit & change_unit, bool forward); }; #endif