1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::{
matrix::Matrix,
number::Number,
types::{Diagonal, LowerTriangle, Type, UpperTriangle},
};
fn det_triangle<T, U>(slf: &Matrix<T, U>) -> U
where
T: Type,
U: Number,
{
(0..slf.rows).into_iter().map(|i| slf[i][i]).product()
}
macro_rules! implement_triangle {
( $($t: ty),+ ) => {
$(
impl<U> Matrix<$t, U> where U: Number {
pub fn det(&self) -> U {
det_triangle(self)
}
}
)+
};
}
implement_triangle! {UpperTriangle, LowerTriangle, Diagonal}