opensrdk_linear_algebra/macros/
sub_matrix.rs

1use crate::{number::Number, Matrix};
2
3pub trait SubMatrix<T>: Send + Sync {
4    fn size(&self) -> (usize, usize);
5    fn index(&self, i: usize, j: usize) -> T;
6}
7
8impl<T> SubMatrix<T> for T
9where
10    T: Number,
11{
12    fn size(&self) -> (usize, usize) {
13        (1usize, 1usize)
14    }
15
16    fn index(&self, _: usize, _: usize) -> T {
17        *self
18    }
19}
20
21impl<T> SubMatrix<T> for Matrix<T>
22where
23    T: Number,
24{
25    fn size(&self) -> (usize, usize) {
26        (self.rows(), self.cols())
27    }
28
29    fn index(&self, i: usize, j: usize) -> T {
30        self[(i, j)]
31    }
32}
33
34impl<T> SubMatrix<T> for &Matrix<T>
35where
36    T: Number,
37{
38    fn size(&self) -> (usize, usize) {
39        (self.rows(), self.cols())
40    }
41
42    fn index(&self, i: usize, j: usize) -> T {
43        self[(i, j)]
44    }
45}