use core::array;
use std::slice::{Iter, IterMut};
pub struct Table<T, const N: usize> {
elements: [T; N],
}
impl<T, const N: usize> Table<T, N>
where
T: Default,
{
pub fn get(&self, i: usize) -> &T {
&self.elements[i]
}
pub fn get_mut(&mut self, i: usize) -> &mut T {
&mut self.elements[i]
}
pub fn set(&mut self, i: usize, e: T) {
self.elements[i] = e;
}
pub fn iter(&self) -> Iter<T> {
self.elements.iter()
}
pub fn iter_mut(&mut self) -> IterMut<T> {
self.elements.iter_mut()
}
pub fn zero(&mut self, i: usize) {
self.elements[i] = T::default()
}
}
impl<T, const N: usize> Default for Table<T, N>
where
T: Default,
{
fn default() -> Self {
Self {
elements: array::from_fn(|_i| T::default()),
}
}
}