diff options
| author | HampusM <hampus@hampusmat.com> | 2026-09-13 17:10:52 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-09-13 17:10:52 +0200 |
| commit | c0922efdf70ce2e830178e41b39d7424ed727d84 (patch) | |
| tree | e9692a1c3ea644277c81d2ea4f8fa45a852ff411 /engine/src | |
| parent | c851029901866c23469643b3fee7f8c97051f011 (diff) | |
feat(engine): add naive matrix multiplication by ref fns
Diffstat (limited to 'engine/src')
| -rw-r--r-- | engine/src/data_types/matrix.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/engine/src/data_types/matrix.rs b/engine/src/data_types/matrix.rs index e28c73f..a1e9bb6 100644 --- a/engine/src/data_types/matrix.rs +++ b/engine/src/data_types/matrix.rs @@ -293,6 +293,45 @@ where fn mul(self, rhs: Matrix<Value, ROWS, RHS_COLUMNS>) -> Self::Output { + &self * &rhs + } +} + +impl<Value, const ROWS: usize, const COLUMNS: usize, const RHS_COLUMNS: usize> + Mul<&Matrix<Value, ROWS, RHS_COLUMNS>> for Matrix<Value, ROWS, COLUMNS> +where + Value: Mul<Output = Value> + Add<Output = Value> + Default + Copy, +{ + type Output = Matrix<Value, ROWS, RHS_COLUMNS>; + + fn mul(self, rhs: &Matrix<Value, ROWS, RHS_COLUMNS>) -> Self::Output + { + &self * rhs + } +} + +impl<Value, const ROWS: usize, const COLUMNS: usize, const RHS_COLUMNS: usize> + Mul<Matrix<Value, ROWS, RHS_COLUMNS>> for &Matrix<Value, ROWS, COLUMNS> +where + Value: Mul<Output = Value> + Add<Output = Value> + Default + Copy, +{ + type Output = Matrix<Value, ROWS, RHS_COLUMNS>; + + fn mul(self, rhs: Matrix<Value, ROWS, RHS_COLUMNS>) -> Self::Output + { + self * &rhs + } +} + +impl<Value, const ROWS: usize, const COLUMNS: usize, const RHS_COLUMNS: usize> + Mul<&Matrix<Value, ROWS, RHS_COLUMNS>> for &Matrix<Value, ROWS, COLUMNS> +where + Value: Mul<Output = Value> + Add<Output = Value> + Default + Copy, +{ + type Output = Matrix<Value, ROWS, RHS_COLUMNS>; + + fn mul(self, rhs: &Matrix<Value, ROWS, RHS_COLUMNS>) -> Self::Output + { // https://en.wikipedia.org/wiki/Matrix_multiplication let mut out = Self::Output::new(); |
