pub(crate) trait Stack<A> {
fn stack_new(max_size: usize) -> Self;
fn stack_push(&mut self, value: A);
fn stack_pop(&mut self) -> Option<A>;
fn stack_len(&self) -> usize;
}
impl<A> Stack<A> for Vec<A> {
fn stack_new(max_size: usize) -> Self {
Self::with_capacity(max_size)
}
#[inline(always)]
fn stack_push(&mut self, value: A) {
self.push(value);
}
#[inline(always)]
fn stack_pop(&mut self) -> Option<A> {
self.pop()
}
#[inline(always)]
fn stack_len(&self) -> usize {
self.len()
}
}