#![allow(missing_docs, clippy::return_self_not_must_use)]
use crate::scalar::FloatScalar;
use super::*;
#[allow(missing_docs)]
pub trait Matrix:
PodValue
+ Add<Self, Output = Self>
+ AddAssign<Self>
+ Sub<Self, Output = Self>
+ SubAssign<Self>
+ Mul<Self, Output = Self>
+ MulAssign<Self>
+ Mul<Self::Scalar, Output = Self>
+ MulAssign<Self::Scalar>
+ Div<Self::Scalar, Output = Self>
+ DivAssign<Self::Scalar>
+ Neg<Output = Self>
+ AbsDiffEq<Epsilon = Self::Scalar>
+ approx::RelativeEq<Epsilon = Self::Scalar>
+ approx::UlpsEq<Epsilon = Self::Scalar>
{
type Scalar: FloatScalar;
crate::interfaces::matrix_base_interface!(trait_decl);
}
#[allow(missing_docs)]
pub trait Matrix2: Matrix<Scalar: FloatScalar<Mat2 = Self>> {
crate::interfaces::matrix2_base_interface!(trait_decl);
}
#[allow(missing_docs)]
pub trait Matrix3: Matrix<Scalar: FloatScalar<Mat3 = Self>> {
crate::interfaces::matrix3_base_interface!(trait_decl);
}
#[allow(missing_docs)]
pub trait Matrix4: Matrix<Scalar: FloatScalar<Mat4 = Self>> {
crate::interfaces::matrix4_base_interface!(trait_decl);
}
macro_rules! impl_matrix {
($scalar:ty, $glam_ty:ty) => {
impl Matrix for $glam_ty {
type Scalar = $scalar;
crate::interfaces::matrix_base_interface!(trait_impl);
}
};
}
impl_matrix!(f32, glam::Mat2);
impl_matrix!(f32, glam::Mat3);
impl_matrix!(f32, glam::Mat4);
impl_matrix!(f64, glam::DMat2);
impl_matrix!(f64, glam::DMat3);
impl_matrix!(f64, glam::DMat4);
impl Matrix2 for glam::Mat2 {
crate::interfaces::matrix2_base_interface!(trait_impl);
}
impl Matrix2 for glam::DMat2 {
crate::interfaces::matrix2_base_interface!(trait_impl);
}
impl Matrix3 for glam::Mat3 {
crate::interfaces::matrix3_base_interface!(trait_impl);
}
impl Matrix3 for glam::DMat3 {
crate::interfaces::matrix3_base_interface!(trait_impl);
}
impl Matrix4 for glam::Mat4 {
crate::interfaces::matrix4_base_interface!(trait_impl);
}
impl Matrix4 for glam::DMat4 {
crate::interfaces::matrix4_base_interface!(trait_impl);
}