summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-09-13 17:10:52 +0200
committerHampusM <hampus@hampusmat.com>2026-09-13 17:10:52 +0200
commitc0922efdf70ce2e830178e41b39d7424ed727d84 (patch)
treee9692a1c3ea644277c81d2ea4f8fa45a852ff411
parentc851029901866c23469643b3fee7f8c97051f011 (diff)
feat(engine): add naive matrix multiplication by ref fns
-rw-r--r--engine/src/data_types/matrix.rs39
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();