#pragma once #include "Core/public/Math/Boilerplate.h" #include "Core/public/Math/Detail/Matrix3Decl.inl" #include "Core/public/Math/SIMD/SIMDIntrinsics.h" #include "Core/public/Math/SIMD/PhanesSIMDTypes.h" namespace Phanes::Core::Math { template TMatrix3& TransposeV(TMatrix3& m) { Detail::compute_mat3_transpose::map(m, m); return m; } template TMatrix3 Transpose(const TMatrix3& m) { TMatrix3 r; Detail::compute_mat3_transpose::map(r, m); return r; } template TMatrix3& operator*= (TMatrix3& m1, const TMatrix3& m2) { TMatrix3 r; Detail::compute_mat3_mul::map(r, m1, m2); return (m1 = r); } template TMatrix3 operator* (const TMatrix3& m1, const TMatrix3& m2) { TMatrix3 r; Detail::compute_mat3_mul::map(r, m1, m2); return r; } template TVector3 operator* (const TMatrix3& m1, const TVector3& v) { TVector3 r; Detail::compute_mat3_mul::map(r, m1, v); return r; } }