use super::types::UndoHistory;
impl<T> UndoHistory<T> {
#[inline]
pub fn undo_count(&self) -> usize {
self.undo_stack.len()
}
#[inline]
pub fn redo_count(&self) -> usize {
self.redo_stack.len()
}
pub fn clear(&mut self) {
self.undo_stack.clear();
self.redo_stack.clear();
}
pub fn clear_redo(&mut self) {
self.redo_stack.clear();
}
pub fn peek_undo(&self) -> Option<&T> {
self.undo_stack.back()
}
pub fn peek_redo(&self) -> Option<&T> {
self.redo_stack.last()
}
#[inline]
pub fn max_size(&self) -> usize {
self.max_size
}
pub fn set_max_size(&mut self, max_size: usize) {
self.max_size = max_size;
while self.undo_stack.len() > max_size {
self.undo_stack.pop_front();
}
}
}
impl<T: Clone> UndoHistory<T> {
pub fn undo_peek(&mut self) -> Option<T> {
self.undo_stack.back().cloned()
}
pub fn undo_commit(&mut self) {
if let Some(op) = self.undo_stack.pop_back() {
self.redo_stack.push(op);
}
}
}