use crate::Types::*; use std::mem; pub struct Stack { storage: Vec, capacity: usize, } impl Stack { pub fn New(size: usize) -> Self { Self { storage: Vec::with_capacity(size), capacity: size, } } pub fn Flush(&mut self) { self.storage.clear(); } pub fn PushByte(&mut self, item: Byte) { if self.storage.len() + 1 < self.capacity { self.storage.push(item); } } pub fn PopByte(&mut self) -> Byte { self.storage.pop().unwrap_or(0) } pub fn PushWord(&mut self, item: Word) { const BYTES: usize = mem::size_of::(); if self.storage.len() + BYTES < self.capacity { self.storage.extend(item); } } pub fn PopWord(&mut self) -> Word { const BYTES: usize = mem::size_of::(); let mut buffer = [0; BYTES]; for i in 0..BYTES { buffer[i] = self.storage.pop().unwrap_or(0); } buffer } }