use crate::value::Value;
pub const DEFAULT_UNDO_DEPTH: usize = 10;
#[derive(Debug, Clone, Default)]
pub struct UndoHistory {
snapshots: Vec<Vec<Value>>,
capacity: usize,
}
impl UndoHistory {
pub fn new() -> Self {
Self::with_capacity(DEFAULT_UNDO_DEPTH)
}
pub fn with_capacity(capacity: usize) -> Self {
Self {
snapshots: Vec::new(),
capacity: capacity.max(1),
}
}
pub fn push(&mut self, snapshot: Vec<Value>) {
if self.snapshots.len() >= self.capacity {
self.snapshots.remove(0);
}
self.snapshots.push(snapshot);
}
pub fn pop(&mut self) -> Option<Vec<Value>> {
self.snapshots.pop()
}
}