pub trait RowMajorSequentialData<const ROWS: usize, const COLS: usize, T> {
fn as_slice(&self) -> &[T];
#[inline(always)]
fn len(&self) -> usize {
ROWS * COLS
}
#[inline(always)]
fn buffer_len(&self) -> usize {
self.as_slice().len()
}
#[inline(always)]
fn is_empty(&self) -> bool {
ROWS * COLS == 0
}
fn is_valid(&self) -> bool {
self.len() <= self.buffer_len()
}
#[inline(always)]
#[doc(alias = "matrix_get")]
fn get_at(&self, row: usize, column: usize) -> T
where
T: Copy,
{
let m = self.as_slice();
m[row * COLS + column]
}
}
pub trait RowMajorSequentialDataMut<const ROWS: usize, const COLS: usize, T>:
RowMajorSequentialData<ROWS, COLS, T>
{
fn as_mut_slice(&mut self) -> &mut [T];
#[inline(always)]
#[doc(alias = "matrix_set")]
fn set_at(&mut self, row: usize, column: usize, value: T) {
let m = self.as_mut_slice();
m[row * COLS + column] = value;
}
}