use super::types::{Mergeable, UndoHistory};
impl<T: Mergeable + Clone> UndoHistory<T> {
pub fn push_merge(&mut self, op: T) {
self.redo_stack.clear();
if let Some(last) = self.undo_stack.pop_back() {
if last.can_merge(&op) {
let merged = last.merge(op);
self.undo_stack.push_back(merged);
return;
}
self.undo_stack.push_back(last);
}
self.undo_stack.push_back(op);
while self.undo_stack.len() > self.max_size {
self.undo_stack.pop_front();
}
}
}