#![cfg_attr(not(test), no_std)]
#![warn(missing_docs)]
extern crate alloc;
use alloc::vec::Vec;
#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Stack<T> {
vec: Vec<T>,
}
impl<T> Stack<T> {
#[inline(always)]
pub const fn new() -> Self {
Self { vec: Vec::new() }
}
#[inline(always)]
pub fn push(&mut self, value: T) {
self.vec.push(value);
}
#[inline(always)]
pub fn pop(&mut self) -> Option<T> {
self.vec.pop()
}
#[inline(always)]
pub fn clear(&mut self) {
self.vec.clear();
}
#[inline(always)]
pub fn len(&self) -> usize {
self.vec.len()
}
#[inline(always)]
pub const fn as_vec(&self) -> &Vec<T> {
&self.vec
}
#[inline(always)]
pub fn as_mut_vec(&mut self) -> &mut Vec<T> {
&mut self.vec
}
}