21 template<
typename TYPE = DVALUEDEF_t,
int _ROWS = 4,
int _COLS = 4 >
32 static const int k_nRows = _ROWS;
33 static const int k_nCols = _COLS;
48 ::memcpy(this->m_a, &v,
sizeof(this->m_a));
52 ::memcpy(this->m_a, pVals,
sizeof(this->m_a));
58 for (UINT i = 0; i <
_countof(this->m_a); i++)
68 return(::memcmp(this->m_a, v2.
m_a,
sizeof(this->m_a)));
72 return(Compare(v2) == 0);
76 return(Compare(v2) != 0);
89 for (
int nRow = 0; nRow < k_nRows; nRow++)
91 for (
int nCol = 0; nCol < k_nCols; nCol++)
94 for (
int k = 0; k < _IDN; k++)
96 sum += m1.
m[nRow][k] * m2.
m[k][nCol];
98 this->m[nRow][nCol] = sum;
108 return &(this->m[nRow][0]);
115 return &(this->m[nRow][0]);
119 return GetRow((
int)eAxis);
125 memcpy(&(this->m[nRow][0]), p,
sizeof(
TYPE) * _COLS);
144 for (
int nRow = 0; nRow < k_nRows; nRow++, pV++)
146 *pV = this->m[nRow][nCol];
151 CopyColTo(nCol, (
TYPE*)&v);
162 for (
int nRow = 0; nRow < k_nRows; nRow++, pV++)
164 this->m[nRow][nCol] = *pV;
169 SetCol(nCol, (
const TYPE*)&v);
191 #pragma pack(push,16)
200 static const int k_nDim = 4;
213 inline const THIS_t& operator += (
const THIS_t& m2)
218 inline THIS_t operator - (
const THIS_t& m2)
const
223 inline const THIS_t& operator -= (
const THIS_t& m2)
228 inline THIS_t operator / (
const THIS_t& m2)
const
233 inline const THIS_t& operator /= (
const THIS_t& m2)
257 m[0][0] = n11; m[0][1] = n12; m[0][2] = n13; m[0][3] = n14;
258 m[1][0] = n21; m[1][1] = n22; m[1][2] = n23; m[1][3] = n24;
259 m[2][0] = n31; m[2][1] = n32; m[2][2] = n33; m[2][3] = n34;
260 m[3][0] = n41; m[3][1] = n42; m[3][2] = n43; m[3][3] = n44;
266 :
cMatrixT<DVALUE_t, 4, 4>(*(const SUPER_t*)&v)
284 return *((
const cVector3f*)SUPER_t::GetRow(eAxis));
291 return *((
const cVector4f*)SUPER_t::GetRow(nRow));
332 return cVector3f(get_XAxis().get_Magnitude(), get_YAxis().get_Magnitude(), get_ZAxis().get_Magnitude());
340 return !::memcmp(k_Identity.
m, m,
sizeof(m));
361 return ::XMMatrixDeterminant(*((
XMMATRIX*)
this));
390 return GetInverse(
nullptr);
412 vTrans = get_Translation();
413 vScale = get_ScalingU();
441 ::D3DXMatrixTranslation((
XMFLOAT4X4*)
this, x, y, z);
444 SetTranslation(x, y, z);
450 InitTranslation(pt.
x, pt.
y, pt.
z);
457 ::D3DXMatrixScaling((
XMFLOAT4X4*)
this, _x, _y, _z);
468 InitScaling(pt.
x, pt.
y, pt.
z);
474 InitScaling(fScale, fScale, fScale);
481 ::D3DXMatrixRotationQuaternion((
XMFLOAT4X4*)
this, (
const D3DXQUATERNION*)&q);
484 this->m[0][0] = 1.0f - 2.0f * (q.
y * q.
y + q.
z * q.
z);
485 this->m[0][1] = 2.0f * (q.
x *q.
y + q.
z * q.
w);
486 this->m[0][2] = 2.0f * (q.
x * q.
z - q.
y * q.
w);
487 this->m[1][0] = 2.0f * (q.
x * q.
y - q.
z * q.
w);
488 this->m[1][1] = 1.0f - 2.0f * (q.
x * q.
x + q.
z * q.
z);
489 this->m[1][2] = 2.0f * (q.
y *q.
z + q.
x *q.
w);
490 this->m[2][0] = 2.0f * (q.
x * q.
z + q.
y * q.
w);
491 this->m[2][1] = 2.0f * (q.
y *q.
z - q.
x *q.
w);
492 this->m[2][2] = 1.0f - 2.0f * (q.
x * q.
x + q.
y * q.
y);
502 ::D3DXMatrixRotationX((
XMFLOAT4X4*)
this, fAngleX);
506 m[0][0] = 1; m[0][1] = 0; m[0][2] = 0; m[0][3] = 0;
507 m[1][0] = 0; m[1][1] = c; m[1][2] = s; m[1][3] = 0;
508 m[2][0] = 0; m[2][1] = -s; m[2][2] = c; m[2][3] = 0;
509 m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;
517 ::D3DXMatrixRotationY((
XMFLOAT4X4*)
this, fAngleY);
521 m[0][0] = c; m[0][1] = 0; m[0][2] = -s; m[0][3] = 0;
522 m[1][0] = 0; m[1][1] = 1; m[1][2] = 0; m[1][3] = 0;
523 m[2][0] = s; m[2][1] = 0; m[2][2] = c; m[2][3] = 0;
524 m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;
532 ::D3DXMatrixRotationZ((
XMFLOAT4X4*)
this, fAngleZ);
536 m[0][0] = c; m[0][1] = s; m[0][2] = 0; m[0][3] = 0;
537 m[1][0] = -s; m[1][1] = c; m[1][2] = 0; m[1][3] = 0;
538 m[2][0] = 0; m[2][1] = 0; m[2][2] = 1; m[2][3] = 0;
539 m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;
557 this->m[0][0] = c2 * v.
x * v.
x + c;
558 this->m[1][0] = c2 * v.
x * v.
y - s * v.
z;
559 this->m[2][0] = c2 * v.
x * v.
z + s * v.
y;
560 this->m[0][1] = c2 * v.
y * v.
x + s * v.
z;
561 this->m[1][1] = c2 * v.
y * v.
y + c;
562 this->m[2][1] = c2 * v.
y * v.
z - s * v.
x;
563 this->m[0][2] = c2 * v.
z * v.
x - s * v.
y;
564 this->m[1][2] = c2 * v.
z * v.
y + s * v.
x;
565 this->m[2][2] = c2 * v.
z * v.
z + c;
584 if (pfDeterminant !=
nullptr)
586 *pfDeterminant = fDeterm;
588 for (
int i = 0; i < k_nDim; i++)
591 for (
int nRow = 0; nRow < k_nDim; nRow++)
598 vec[a].
x = m1.
m[nRow][0];
599 vec[a].
y = m1.
m[nRow][1];
600 vec[a].
z = m1.
m[nRow][2];
601 vec[a].
w = m1.
m[nRow][3];
607 this->m[0][i] = fPow * v.
x / fDeterm;
608 this->m[1][i] = fPow * v.
y / fDeterm;
609 this->m[2][i] = fPow * v.
z / fDeterm;
610 this->m[3][i] = fPow * v.
w / fDeterm;
622 for (
int nRow = 0; nRow < k_nDim; nRow++)
624 for (
int nCol = 0; nCol < k_nDim; nCol++)
626 this->m[nCol][nRow] = m1.
m[nRow][nCol];
642 #elif defined(USE_SIMD)
643 this->m[0][0] = m1.
m[0][0] * m2.
m[0][0] + m1.
m[0][1] * m2.
m[1][0] + m1.
m[0][2] * m2.
m[2][0] + m1.
m[0][3] * m2.
m[3][0];
644 this->m[0][1] = m1.
m[0][0] * m2.
m[0][1] + m1.
m[0][1] * m2.
m[1][1] + m1.
m[0][2] * m2.
m[2][1] + m1.
m[0][3] * m2.
m[3][1];
645 this->m[0][2] = m1.
m[0][0] * m2.
m[0][2] + m1.
m[0][1] * m2.
m[1][2] + m1.
m[0][2] * m2.
m[2][2] + m1.
m[0][3] * m2.
m[3][2];
646 this->m[0][3] = m1.
m[0][0] * m2.
m[0][3] + m1.
m[0][1] * m2.
m[1][3] + m1.
m[0][2] * m2.
m[2][3] + m1.
m[0][3] * m2.
m[3][3];
648 this->m[1][0] = m1.
m[1][0] * m2.
m[0][0] + m1.
m[1][1] * m2.
m[1][0] + m1.
m[1][2] * m2.
m[2][0] + m1.
m[1][3] * m2.
m[3][0];
649 this->m[1][1] = m1.
m[1][0] * m2.
m[0][1] + m1.
m[1][1] * m2.
m[1][1] + m1.
m[1][2] * m2.
m[2][1] + m1.
m[1][3] * m2.
m[3][1];
650 this->m[1][2] = m1.
m[1][0] * m2.
m[0][2] + m1.
m[1][1] * m2.
m[1][2] + m1.
m[1][2] * m2.
m[2][2] + m1.
m[1][3] * m2.
m[3][2];
651 this->m[1][3] = m1.
m[1][0] * m2.
m[0][3] + m1.
m[1][1] * m2.
m[1][3] + m1.
m[1][2] * m2.
m[2][3] + m1.
m[1][3] * m2.
m[3][3];
653 this->m[2][0] = m1.
m[2][0] * m2.
m[0][0] + m1.
m[2][1] * m2.
m[1][0] + m1.
m[2][2] * m2.
m[2][0] + m1.
m[2][3] * m2.
m[3][0];
654 this->m[2][1] = m1.
m[2][0] * m2.
m[0][1] + m1.
m[2][1] * m2.
m[1][1] + m1.
m[2][2] * m2.
m[2][1] + m1.
m[2][3] * m2.
m[3][1];
655 this->m[2][2] = m1.
m[2][0] * m2.
m[0][2] + m1.
m[2][1] * m2.
m[1][2] + m1.
m[2][2] * m2.
m[2][2] + m1.
m[2][3] * m2.
m[3][2];
656 this->m[2][3] = m1.
m[2][0] * m2.
m[0][3] + m1.
m[2][1] * m2.
m[1][3] + m1.
m[2][2] * m2.
m[2][3] + m1.
m[2][3] * m2.
m[3][3];
658 this->m[3][0] = m1.
m[3][0] * m2.
m[0][0] + m1.
m[3][1] * m2.
m[1][0] + m1.
m[3][2] * m2.
m[2][0] + m1.
m[3][3] * m2.
m[3][0];
659 this->m[3][1] = m1.
m[3][0] * m2.
m[0][1] + m1.
m[3][1] * m2.
m[1][1] + m1.
m[3][2] * m2.
m[2][1] + m1.
m[3][3] * m2.
m[3][1];
660 this->m[3][2] = m1.
m[3][0] * m2.
m[0][2] + m1.
m[3][1] * m2.
m[1][2] + m1.
m[3][2] * m2.
m[2][2] + m1.
m[3][3] * m2.
m[3][2];
661 this->m[3][3] = m1.
m[3][0] * m2.
m[0][3] + m1.
m[3][1] * m2.
m[1][3] + m1.
m[3][2] * m2.
m[2][3] + m1.
m[3][3] * m2.
m[3][3];
663 SUPER_t::InitMul<4>(m1, m2);
679 this->m[0][0] = 1.0f / (aspect * ft);
680 this->m[1][1] = 1.0f / ft;
681 this->m[2][2] = zf / (zf - zn);
682 this->m[2][3] = 1.0f;
683 this->m[3][2] = (zf * zn) / (zn - zf);
684 this->m[3][3] = 0.0f;
694 this->InitIdentity();
695 m[0][0] = 2.0f / (r - l);
696 m[1][1] = 2.0f / (t - b);
697 m[2][2] = 1.0f / (zf - zn);
698 m[3][0] = -1.0f - 2.0f *l / (r - l);
699 m[3][1] = 1.0f + 2.0f * t / (b - t);
700 m[3][2] = zn / (zn - zf);
709 void InitTransformation2D(
const cVector2f* pvScalingCenter =
nullptr,
float fScalingRotation = 0,
const cVector2f* pvScaling =
nullptr,
const cVector2f* pvRotationCenter =
nullptr,
RADIANf_t fRotation = 0,
const cVector2f* pvTranslation =
nullptr);
731 return *((
cVector3f*)SUPER_t::RefRow(eAxis));
737 return *((
cVector4f*)SUPER_t::RefRow(nRow));
756 ref_XAxis().put_Magnitude(_x);
757 ref_YAxis().put_Magnitude(_y);
758 ref_ZAxis().put_Magnitude(_z);
763 SetScaling(fScale, fScale, fScale);
768 m[0][0] *= _x; m[1][0] *= _x; m[2][0] *= _x;
769 m[0][1] *= _y; m[1][1] *= _y; m[2][1] *= _y;
770 m[0][2] *= _z; m[1][2] *= _z; m[2][2] *= _z;
778 RefAxis3((
AXIS_TYPE)nRow).SetNormalized();
785 *
this = GetInverse(pfDeterminant);
790 *
this = GetTranspose();
850 m_vScale.
m_x = m_vScale.
m_y = m_vScale.
m_z = fScale;
855 StrLen_t GetStr(
char* pszStr,
int iSizeMax)
const;
856 void put_Str(
const char* pszStr);
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define IS_INDEX_GOOD(i, q)
cast the (likely) int to unsigned to check for negatives.
Definition: Index.h:35
#define TYPE
Definition: StrT.cpp:38
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
#define UNREFERENCED_REFERENCE(x)
Definition: SysTypes.h:318
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define _countof(a)
Definition: cKernel.h:35
Definition: cMatrix.h:174
cMatrix3x3f()
Definition: cMatrix.h:183
cMatrix3x3f THIS_t
Definition: cMatrix.h:181
cMatrix3x3f(const SUPER_t &src)
Definition: cMatrix.h:187
cMatrixT< DVALUEDEF_t, 3, 3 > SUPER_t
Definition: cMatrix.h:180
Definition: cMatrix.h:194
void SetMul(const THIS_t &m2)
Definition: cMatrix.h:792
void SetScaling(DVALUE_t _x, DVALUE_t _y, DVALUE_t _z)
Definition: cMatrix.h:751
cVector3f & ref_XAxis()
Definition: cMatrix.h:712
cMatrix4x4f(DVALUE_t n11, DVALUE_t n12=0, DVALUE_t n13=0, DVALUE_t n14=0, DVALUE_t n21=0, DVALUE_t n22=0, DVALUE_t n23=0, DVALUE_t n24=0, DVALUE_t n31=0, DVALUE_t n32=0, DVALUE_t n33=0, DVALUE_t n34=0, DVALUE_t n41=0, DVALUE_t n42=0, DVALUE_t n43=0, DVALUE_t n44=0)
Definition: cMatrix.h:252
cMatrix4x4f THIS_t
Definition: cMatrix.h:202
cVector3f & RefAxis3(AXIS_TYPE eAxis)
Definition: cMatrix.h:728
void SetTranspose()
Definition: cMatrix.h:787
void InitTranspose(const THIS_t &m1)
Definition: cMatrix.h:614
const cVector3f & get_XAxis() const
Definition: cMatrix.h:294
void SetScalingT(DVALUE_t _x, DVALUE_t _y, DVALUE_t _z)
Definition: cMatrix.h:765
void InitScaling(DVALUE_t fScale)
Definition: cMatrix.h:470
void InitInverse(const THIS_t &m1, DVALUE_t *pfDeterminant=nullptr)
Definition: cMatrix.h:568
cVector4f & RefAxis4(int nRow)
Definition: cMatrix.h:733
THIS_t GetMul(const THIS_t &m2) const
Definition: cMatrix.h:392
const cVector4f & GetAxis4(int nRow) const
Definition: cMatrix.h:286
THIS_t get_Normalized() const
Definition: cMatrix.h:343
cVector3f & ref_ZAxis()
Definition: cMatrix.h:720
void InitRotationAxis(const cVector3f &vAxis, RADIANf_t fAngle)
Definition: cMatrix.h:543
void InitTranslation(const cVector3f &pt)
Definition: cMatrix.h:447
void InitTranslation(DVALUE_t x, DVALUE_t y, DVALUE_t z)
Definition: cMatrix.h:436
const cVector3f & get_ZAxis() const
Definition: cMatrix.h:305
static const THIS_t k_Identity
Definition: cMatrix.h:204
const cVector3f & get_YAxis() const
Definition: cMatrix.h:300
void InitRotationX(RADIANf_t fAngleX)
Definition: cMatrix.h:495
const cVector3f & get_Translation() const
Definition: cMatrix.h:310
void InitScaling(DVALUE_t _x, DVALUE_t _y, DVALUE_t _z)
Definition: cMatrix.h:452
void InitScaling(const cVector3f &pt)
Definition: cMatrix.h:466
void InitPerspectiveFovLH(DVALUE_t fovy, DVALUE_t aspect, DVALUE_t zn, DVALUE_t zf)
Definition: cMatrix.h:667
bool isIdentity() const
Definition: cMatrix.h:336
cMatrix4x4f(const DVALUE_t *pSrc)
Definition: cMatrix.h:248
cVector3f get_ScalingU() const
Definition: cMatrix.h:329
void InitRotationY(RADIANf_t fAngleY)
Definition: cMatrix.h:512
DVALUE_t GetDeterminant() const
Definition: cMatrix.h:357
void SetInvert(DVALUE_t *pfDeterminant=nullptr)
Definition: cMatrix.h:782
void InitTransformation(const cVector3f *pvScalingCenter=nullptr, const cQuaternionf *pqScalingRotation=nullptr, const cVector3f *pvScaling=nullptr, const cVector3f *pvRotationcenter=nullptr, const cQuaternionf *pqRotation=nullptr, const cVector3f *pvTranslation=nullptr)
Definition: cMatrix.cpp:103
void Decompose(cVector3f &vScale, cQuaternionf &qRot, cVector3f &vTrans) const
Definition: cMatrix.h:405
THIS_t GetInverse(DVALUE_t *pfDeterminant=nullptr) const
Definition: cMatrix.h:380
void InitRotationZ(RADIANf_t fAngleZ)
Definition: cMatrix.h:527
const cVector3f & GetAxis3(AXIS_TYPE eAxis) const
Definition: cMatrix.h:280
void InitReflect(const cPlanef &plane)
cVector3f & ref_YAxis()
Definition: cMatrix.h:716
cQuaternionf get_RotationQ() const
Definition: cMatrix.h:351
void InitRotationQ(const cQuaternionf &q)
Definition: cMatrix.h:476
void InitIdentity()
Definition: cMatrix.h:426
cVector3f & ref_Translation()
Definition: cMatrix.h:724
THIS_t GetTranspose() const
Definition: cMatrix.h:373
cVector3f get_ScalingN() const
Definition: cMatrix.h:323
void InitMul(const THIS_t &m1, const THIS_t &m2)
Definition: cMatrix.h:631
void SetNormalized()
Definition: cMatrix.h:773
cMatrix4x4f()
Definition: cMatrix.h:240
void SetTranslation(DVALUE_t _x=0, DVALUE_t _y=0, DVALUE_t _z=0)
Definition: cMatrix.h:742
cMatrixT< DVALUEDEF_t, k_nDim, k_nDim > SUPER_t
Definition: cMatrix.h:201
void InitOrthoOffCenterLH(DVALUE_t l, DVALUE_t r, DVALUE_t b, DVALUE_t t, DVALUE_t zn, DVALUE_t zf)
Definition: cMatrix.h:687
cMatrix4x4f(const SUPER_t &src)
Definition: cMatrix.h:244
void put_Scaling1(DVALUE_t fScale=0)
Definition: cMatrix.h:760
THIS_t operator-() const
Definition: cMatrix.h:387
DVALUE_t get_Scaling1N() const
Definition: cMatrix.h:316
Definition: cMatrix.h:811
void put_Matrix(const cMatrix4x4f &m)
Definition: cMatrix.h:834
float get_Scale1() const
Definition: cMatrix.h:840
cQuaternionf m_qRot
rotation as a quaternion
Definition: cMatrix.h:818
void put_Scale1(float fScale)
Definition: cMatrix.h:847
cMatrix4x4f get_Matrix() const
Definition: cMatrix.h:827
cVector3f m_vTrans
usually the x,y,z translation from some parent object space.
Definition: cMatrix.h:817
cMatrixDecomp4()
Definition: cMatrix.h:823
TYPE * RefRow(int nRow)
Definition: cMatrix.h:103
cMatrixT(const THIS_t &v) noexcept
Definition: cMatrix.h:46
bool IsNear(const THIS_t &v2, TYPE fDist=(TYPE) k_FLT_MIN2) const
Definition: cMatrix.h:55
TYPE DVALUE_t
Definition: cMatrix.h:31
TYPE m[_ROWS][_COLS]
Definition: cMatrix.h:38
TYPE m_a[_ROWS *_COLS]
Definition: cMatrix.h:37
cVecT< TYPE, _COLS > & RefRowV(int nRow)
Definition: cMatrix.h:128
void CopyColTo(int nCol, TYPE *pV) const
Definition: cMatrix.h:141
void SetColV(int nCol, const cVecT< TYPE, _ROWS > &v)
Definition: cMatrix.h:167
const TYPE * GetRow(int nRow) const
Definition: cMatrix.h:110
const cVecT< TYPE, _COLS > & GetRowV(int nRow) const
Definition: cMatrix.h:132
cMatrixT() noexcept
Definition: cMatrix.h:42
const TYPE * GetRow(AXIS_TYPE eAxis) const
Definition: cMatrix.h:117
cVecT< TYPE, _ROWS > GetColV(int nCol) const
Definition: cMatrix.h:153
void SetRow(int nRow, const TYPE *p)
Definition: cMatrix.h:122
void SetCol(int nCol, const TYPE *pV)
Definition: cMatrix.h:159
void CopyColToV(int nCol, cVecT< TYPE, _ROWS > &v) const
Definition: cMatrix.h:149
void InitMul(const cMatrixT< TYPE, _ROWS, _IDN > &m1, const cMatrixT< TYPE, _IDN, _COLS > &m2)
Definition: cMatrix.h:80
cMatrixT(const TYPE *pVals) noexcept
Definition: cMatrix.h:50
COMPARE_t Compare(const THIS_t &v2) const
Definition: cMatrix.h:66
void SetRowV(int nRow, const cVecT< TYPE, _COLS > &v)
Definition: cMatrix.h:136
Definition: cQuaternion.h:76
void InitRotationMatrix(const cMatrix4x4f &rm)
Definition: cQuaternion.cpp:119
TYPE m_z
Definition: cVecT.h:544
TYPE y
Definition: cVecT.h:545
TYPE z
Definition: cVecT.h:545
TYPE m_x
Definition: cVecT.h:544
TYPE m_y
Definition: cVecT.h:544
TYPE x
Definition: cVecT.h:545
TYPE z
Definition: cVecT.h:676
TYPE x
Definition: cVecT.h:676
TYPE w
Definition: cVecT.h:676
TYPE y
Definition: cVecT.h:676
_TYPE_C get_Normalized() const
Definition: cVecT.h:283
TYPE GetDot(const THIS_t &v2) const
Definition: cVecT.h:255
Definition: cVector.h:261
void InitCross4(const cVector4f &v1, const cVector4f &v2, const cVector4f &v3)
Definition: cVector.h:323
cVecT2< TYPE > operator*(const TYPE nVal, const cVecT2< TYPE > &v2)
Definition: cVecT.h:522
float DVALUEDEF_t
similar to D3DVALUE in DX. the basic default dimension type. DVALUEDEF_t
Definition: cVecT.h:34
class __DECL_IMPORT cMatrix4x4f
Definition: cVector.h:22
UNITTEST2_PREDEF(cQuadtree)
float RADIANf_t
type is float radians
Definition: Calc.h:27
AXIS_TYPE
Definition: cVector.h:25
@ AXIS_Trans
position offset.
Definition: cVector.h:31
@ AXIS_Y
Definition: cVector.h:29
@ AXIS_X
Definition: cVector.h:28
@ AXIS_Z
Definition: cVector.h:30
@ AXIS_QTY
Definition: cVector.h:32
int COMPARE_t
result of compare. 0=same, 1=a>b, -1=a<b
Definition: cValT.h:17
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
cStringA operator+(const char *pStr1, const cStringA &s2)
Definition: cString.h:642
bool operator!=(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:254
bool operator==(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:250
static bool IsNear(TYPE n1, TYPE n2, TYPE nDiff=(TYPE) k_FLT_MIN2) noexcept
Definition: Calc.h:135
static void SinCos(TYPE a, TYPE &s, TYPE &c)
get both sin and cos at one time. a = Euler angle in radians
static TYPE Pow(TYPE nBase, TYPE nExp)
pow(nBase,nExp) = exp( log(nBase) * nExp );
Definition: cDebugAssert.h:29
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100