#pragma once #ifdef P_BUILD_LIB # include "PhanesEnginePCH.h" #else # include #endif #ifndef MATH_FWD_H # define MATH_FWD_H # include "Core/Math/Boilerplate.h" # include "Core/Math/SIMD/PhanesSIMDTypes.h" /** * Includes forward declarations, as well as certain useful usings. * * @ref OSAL/PlatformTypes.h */ namespace Phanes::Core::Math { /** * Template forward declarations. */ template struct TColor; template struct TLinearColor; template struct TLine; template struct TTransform; template struct TPoint2; template struct TPoint3; template struct TPoint4; template struct TIntPoint2; template struct TIntPoint3; template struct TIntPoint4; template struct TMatrix2; template struct TQuaternion; template struct TMatrix3; template struct TMatrix4; template struct TVector2; template struct TVector3; template struct TVector4; template struct TIntVector2; template struct TIntVector3; template struct TIntVector4; template struct TPlane; template struct TRay; /** * Specific instantiation of forward declarations. */ // TPoint2 using Point2 = TPoint2; using Point2f = TPoint2; using Point2d = TPoint2; // TPoint3 using Point3 = TPoint3; using Point3f = TPoint3; using Point3d = TPoint3; // TPoint4 using Point4 = TPoint4; using Point4f = TPoint4; using Point4d = TPoint4; // TIntPoint2 using IntPoint2 = TIntPoint2; using IntPoint2i = TIntPoint2; using IntPoint2l = TIntPoint2; // TIntPoint3 using IntPoint3 = TIntPoint3; using IntPoint3i = TIntPoint3; using IntPoint3l = TIntPoint3; // TIntPoint4 using IntPoint4 = TIntPoint4; using IntPoint4i = TIntPoint4; using IntPoint4l = TIntPoint4; // IntVetor2 using IntVector2 = TIntVector2; using Vector2i = TIntVector2; using LongVector2 = TIntVector2; using Vector2l = TIntVector2; // IntVetor3 using IntVector3 = TIntVector3; using Vector3i = TIntVector3; using LongVector3 = TIntVector3; using Vector3l = TIntVector3; // IntVetor4 using IntVector4 = TIntVector4; using Vector4i = TIntVector4; using LongVector4 = TIntVector4; using Vector4l = TIntVector4; // Vector2 using Vector2 = TVector2; using Vector2f = TVector2; using Vector2d = TVector2; using Vector2Regf64 = TVector2::value>; using Vector2Reg = TVector2::value>; using Vector2Regd = TVector2::value>; // Vector3 using Vector3 = TVector3; using Vector3f = TVector3; using Vector3d = TVector3; using Vector3Reg = TVector3::value>; using Vector3Regf32 = TVector3::value>; using Vector3Regd = TVector3::value>; using Vector3Regf64 = TVector3::value>; // Vector4 using Vector4 = TVector4; using Vector4f = TVector4; using Vector4d = TVector4; using Vector4Reg = TVector4::value>; using Vector4Regf32 = TVector4::value>; using Vector4Regd = TVector4::value>; using Vector4Regf64 = TVector4::value>; // Matrix2 using Matrix2 = TMatrix2; using Matrix2f = TMatrix2; using Matrix2d = TMatrix2; // Matrix3 using Matrix3 = TMatrix3; using Matrix3f = TMatrix3; using Matrix3d = TMatrix3; using Matrix3Reg = TMatrix3::value>; using Matrix3Regf = TMatrix3::value>; using Matrix3Regd = TMatrix3::value>; using Matrix3Regf64 = TMatrix3::value>; // Matrix4 using Matrix4 = TMatrix4; using Matrix4f = TMatrix4; using Matrix4d = TMatrix4; using Matrix4Reg = TMatrix3::value>; using Matrix4Regf = TMatrix3::value>; using Matrix4Regd = TMatrix3::value>; using Matrix4Regf64 = TMatrix3::value>; // TPlane using Plane = TPlane; using Planef = TPlane; using Planed = TPlane; using PlaneReg = TPlane::value>; using PlaneRegd = TPlane::value>; } // namespace Phanes::Core::Math namespace Phanes::Core::Math::Internal { // Internal types template struct AVector; template struct AMatrix; } // namespace Phanes::Core::Math::Internal #endif // !MATH_FWD_H