orx_v/matrices/
matrix_row_major.rs1use super::{Matrix, MatrixMut};
2use crate::{NVec, NVecMut, D1};
3
4pub trait MatrixRowMajor<T>: Matrix<T> {
15 fn row(&self, i: usize) -> impl NVec<D1, T>;
17
18 fn rows(&self) -> impl Iterator<Item = impl NVec<D1, T>> {
20 (0..self.num_rows()).map(|i| self.row(i))
21 }
22}
23
24impl<T, M: MatrixRowMajor<T>> MatrixRowMajor<T> for &M {
25 fn row(&self, j: usize) -> impl NVec<D1, T> {
26 <M as MatrixRowMajor<T>>::row(self, j)
27 }
28}
29
30impl<T, M: MatrixRowMajor<T>> MatrixRowMajor<T> for &mut M {
31 fn row(&self, j: usize) -> impl NVec<D1, T> {
32 <M as MatrixRowMajor<T>>::row(self, j)
33 }
34}
35
36pub trait MatrixRowMajorMut<T>: MatrixRowMajor<T> + MatrixMut<T> {
40 fn row_mut(&mut self, i: usize) -> impl NVecMut<D1, T>;
42}
43
44impl<T, M: MatrixRowMajorMut<T>> MatrixRowMajorMut<T> for &mut M {
45 fn row_mut(&mut self, j: usize) -> impl NVecMut<D1, T> {
46 <M as MatrixRowMajorMut<T>>::row_mut(self, j)
47 }
48}