#[derive(Clone, Debug)]
pub struct DefaultStack<T> {
items: Vec<T>,
}
impl<T> Default for DefaultStack<T> {
fn default() -> Self {
Self { items: Vec::new() }
}
}
impl<T> DefaultStack<T> {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn push(&mut self, item: T) {
self.items.push(item);
}
pub fn pop(&mut self) -> Option<T> {
self.items.pop()
}
#[must_use]
pub fn peek(&self) -> Option<&T> {
self.items.last()
}
pub fn clear(&mut self) {
self.items.clear();
}
#[must_use]
pub fn len(&self) -> usize {
self.items.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
}