summaryrefslogtreecommitdiff
path: root/src/buffer.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.hh')
-rw-r--r--src/buffer.hh42
1 files changed, 28 insertions, 14 deletions
diff --git a/src/buffer.hh b/src/buffer.hh
index 0700acb9..73e5b370 100644
--- a/src/buffer.hh
+++ b/src/buffer.hh
@@ -230,14 +230,40 @@ public:
void on_unregistered();
void throw_if_read_only() const;
+
+ // A Modification holds a single atomic modification to Buffer
+ struct Modification
+ {
+ enum Type { Insert, Erase };
+
+ Type type;
+ BufferCoord coord;
+ StringDataPtr content;
+
+ Modification inverse() const;
+ };
+
+ using UndoGroup = Vector<Modification, MemoryDomain::BufferMeta>;
+
+ struct HistoryNode : UseMemoryDomain<MemoryDomain::BufferMeta>
+ {
+ HistoryNode(HistoryId parent);
+
+ HistoryId parent;
+ HistoryId redo_child = HistoryId::Invalid;
+ TimePoint committed;
+ UndoGroup undo_group;
+ };
+
+ const Vector<HistoryNode>& history() const { return m_history; }
+ const UndoGroup& current_undo_group() const { return m_current_undo_group; }
+
private:
void on_option_changed(const Option& option) override;
BufferRange do_insert(BufferCoord pos, StringView content);
BufferCoord do_erase(BufferCoord begin, BufferCoord end);
- struct Modification;
-
void apply_modification(const Modification& modification);
void revert_modification(const Modification& modification);
@@ -264,18 +290,6 @@ private:
String m_display_name;
Flags m_flags;
- using UndoGroup = Vector<Modification, MemoryDomain::BufferMeta>;
-
- struct HistoryNode : UseMemoryDomain<MemoryDomain::BufferMeta>
- {
- HistoryNode(HistoryId parent);
-
- HistoryId parent;
- HistoryId redo_child = HistoryId::Invalid;
- TimePoint timepoint;
- UndoGroup undo_group;
- };
-
Vector<HistoryNode> m_history;
HistoryId m_history_id = HistoryId::Invalid;
HistoryId m_last_save_history_id = HistoryId::Invalid;