Skip to main content

pnc_engine/
stack.rs

1use crate::value::Value;
2
3pub const DEFAULT_UNDO_DEPTH: usize = 10;
4
5#[derive(Debug, Clone, Default)]
6pub struct UndoHistory {
7    snapshots: Vec<Vec<Value>>,
8    capacity: usize,
9}
10
11impl UndoHistory {
12    pub fn new() -> Self {
13        Self::with_capacity(DEFAULT_UNDO_DEPTH)
14    }
15
16    pub fn with_capacity(capacity: usize) -> Self {
17        Self {
18            snapshots: Vec::new(),
19            capacity: capacity.max(1),
20        }
21    }
22
23    pub fn push(&mut self, snapshot: Vec<Value>) {
24        if self.snapshots.len() >= self.capacity {
25            self.snapshots.remove(0);
26        }
27        self.snapshots.push(snapshot);
28    }
29
30    pub fn pop(&mut self) -> Option<Vec<Value>> {
31        self.snapshots.pop()
32    }
33}