add Zero for constmatrix
This commit is contained in:
parent
7ec426b5a8
commit
cf4d8f1e9b
|
@ -1,4 +1,7 @@
|
||||||
#![allow(unused)]
|
#![allow(unused)]
|
||||||
|
|
||||||
|
use num_traits::identities::Zero;
|
||||||
|
|
||||||
/// A row-major matrix
|
/// A row-major matrix
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
@ -16,6 +19,17 @@ impl<T: Copy + Default, const M: usize, const N: usize> Default for Matrix<T, M,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Copy + Zero + PartialEq, const M: usize, const N: usize> Zero for Matrix<T, M, N> {
|
||||||
|
fn zero() -> Self {
|
||||||
|
Self {
|
||||||
|
data: [[T::zero(); N]; M],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn is_zero(&self) -> bool {
|
||||||
|
self == &Self::zero()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T, const M: usize, const N: usize> core::ops::Index<(usize, usize)> for Matrix<T, M, N> {
|
impl<T, const M: usize, const N: usize> core::ops::Index<(usize, usize)> for Matrix<T, M, N> {
|
||||||
type Output = T;
|
type Output = T;
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -123,9 +137,9 @@ macro_rules! impl_op_mul_mul {
|
||||||
T: Copy + Default + core::ops::Add<Output = T> + core::ops::Mul<Output = T>,
|
T: Copy + Default + core::ops::Add<Output = T> + core::ops::Mul<Output = T>,
|
||||||
{
|
{
|
||||||
type Output = Matrix<T, M, P>;
|
type Output = Matrix<T, M, P>;
|
||||||
fn mul(self, rhs: $rhs) -> Self::Output {
|
fn mul(self, lhs: $rhs) -> Self::Output {
|
||||||
let mut out = Matrix::default();
|
let mut out = Matrix::default();
|
||||||
out.matmul_into(&self, &rhs);
|
out.matmul_into(&self, &lhs);
|
||||||
out
|
out
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,6 +161,22 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T, const N: usize, const M: usize> core::ops::Add<Matrix<T, M, N>> for Matrix<T, M, N>
|
||||||
|
where
|
||||||
|
T: Copy + Zero + core::ops::Add<Output = T> + PartialEq,
|
||||||
|
{
|
||||||
|
type Output = Self;
|
||||||
|
fn add(self, lhs: Self) -> Self::Output {
|
||||||
|
let mut out = Matrix::zero();
|
||||||
|
for i in 0..M {
|
||||||
|
for j in 0..N {
|
||||||
|
out[(i, j)] = self[(i, j)] + lhs[(i, j)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{super::*, *};
|
use super::{super::*, *};
|
||||||
|
|
Loading…
Reference in New Issue