diff options
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(); |
