#![warn(clippy::all, clippy::pedantic)]
use crate::mat::Matrix;
pub trait Identity {
fn identity() -> Self;
}
impl<T: Default + Copy + Identity, const M: usize, const LEN: usize> Identity
for Matrix<T, M, M, LEN>
{
#[must_use]
fn identity() -> Self {
Self::diag(T::identity())
}
}
macro_rules! id {
($T:ty, $VAL:expr) => {
impl Identity for $T {
#[must_use]
fn identity() -> Self {
$VAL
}
}
};
}
macro_rules! intid {
($T:ty) => {
id!($T, 1);
};
}
intid!(i8);
intid!(i16);
intid!(i32);
intid!(i64);
intid!(i128);
intid!(isize);
intid!(u8);
intid!(u16);
intid!(u32);
intid!(u64);
intid!(u128);
intid!(usize);
id!(f32, 1.0);
id!(f64, 1.0);