opensrdk_linear_algebra/macros/
sub_matrix.rs1use 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}