pnc-engine 0.1.1

Core engine for PNC: arbitrary-precision RPN evaluation, units, and persistence
Documentation
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()
    }
}