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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
use crate::{matrix::Matrix, number::Number}; pub trait SubMatrix<T>: Send + Sync { fn size(&self) -> (usize, usize); fn index(&self, i: usize, j: usize) -> T; } impl<T> SubMatrix<T> for T where T: Number, { fn size(&self) -> (usize, usize) { (1usize, 1usize) } fn index(&self, _: usize, _: usize) -> T { *self } } impl<T> SubMatrix<T> for Matrix<T> where T: Number, { fn size(&self) -> (usize, usize) { (self.get_rows(), self.get_columns()) } fn index(&self, i: usize, j: usize) -> T { self[i][j] } } impl<T> SubMatrix<T> for &Matrix<T> where T: Number, { fn size(&self) -> (usize, usize) { (self.get_rows(), self.get_columns()) } fn index(&self, i: usize, j: usize) -> T { self[i][j] } }