From abe64f757607e5e43b597cbdc482a97b5cb83822 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 13 May 2025 15:56:20 +0200 Subject: [PATCH] Base: Use nested std::array for Matrix4D class --- src/Base/Matrix.cpp | 39 ++++++++++++++++++--------------------- src/Base/Matrix.h | 11 ++++++----- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/Base/Matrix.cpp b/src/Base/Matrix.cpp index 8bd35ec1ab..8a9f5019c0 100644 --- a/src/Base/Matrix.cpp +++ b/src/Base/Matrix.cpp @@ -35,30 +35,30 @@ using namespace Base; // clang-format off Matrix4D::Matrix4D() - : dMtrx4D {{1., 0., 0., 0.}, - {0., 1., 0., 0.}, - {0., 0., 1., 0.}, - {0., 0., 0., 1.}} + : dMtrx4D {{{1., 0., 0., 0.}, + {0., 1., 0., 0.}, + {0., 0., 1., 0.}, + {0., 0., 0., 1.}}} {} Matrix4D::Matrix4D(float a11, float a12, float a13, float a14, float a21, float a22, float a23, float a24, float a31, float a32, float a33, float a34, float a41, float a42, float a43, float a44) - : dMtrx4D {{a11, a12, a13, a14}, - {a21, a22, a23, a24}, - {a31, a32, a33, a34}, - {a41, a42, a43, a44}} + : dMtrx4D {{{a11, a12, a13, a14}, + {a21, a22, a23, a24}, + {a31, a32, a33, a34}, + {a41, a42, a43, a44}}} {} Matrix4D::Matrix4D(double a11, double a12, double a13, double a14, double a21, double a22, double a23, double a24, double a31, double a32, double a33, double a34, double a41, double a42, double a43, double a44) - : dMtrx4D {{a11, a12, a13, a14}, - {a21, a22, a23, a24}, - {a31, a32, a33, a34}, - {a41, a42, a43, a44}} + : dMtrx4D {{{a11, a12, a13, a14}, + {a21, a22, a23, a24}, + {a31, a32, a33, a34}, + {a41, a42, a43, a44}}} {} // clang-format on @@ -700,15 +700,12 @@ void Matrix4D::Print() const void Matrix4D::transpose() { - double dNew[4][4]; - - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - dNew[j][i] = dMtrx4D[i][j]; - } - } - - memcpy(dMtrx4D, dNew, sizeof(dMtrx4D)); + std::swap(dMtrx4D[0][1], dMtrx4D[1][0]); + std::swap(dMtrx4D[0][2], dMtrx4D[2][0]); + std::swap(dMtrx4D[0][3], dMtrx4D[3][0]); + std::swap(dMtrx4D[1][2], dMtrx4D[2][1]); + std::swap(dMtrx4D[1][3], dMtrx4D[3][1]); + std::swap(dMtrx4D[2][3], dMtrx4D[3][2]); } diff --git a/src/Base/Matrix.h b/src/Base/Matrix.h index 665c69376a..3e0ba98794 100644 --- a/src/Base/Matrix.h +++ b/src/Base/Matrix.h @@ -106,9 +106,9 @@ public: /// Comparison inline bool operator==(const Matrix4D& mat) const; /// Index operator - inline double* operator[](unsigned int usNdx); + inline std::array& operator[](unsigned int usNdx); /// Index operator - inline const double* operator[](unsigned int usNdx) const; + inline const std::array& operator[](unsigned int usNdx) const; /// Get vector of row inline Vector3d getRow(unsigned int usNdx) const; /// Get vector of column @@ -234,7 +234,8 @@ public: void fromString(const std::string& str); private: - double dMtrx4D[4][4]; + using Array2d = std::array, 4>; + Array2d dMtrx4D; }; inline Matrix4D Matrix4D::operator+(const Matrix4D& mat) const @@ -386,12 +387,12 @@ inline Vector3f& operator*=(Vector3f& vec, const Matrix4D& mat) return vec; } -inline double* Matrix4D::operator[](unsigned int usNdx) +inline std::array& Matrix4D::operator[](unsigned int usNdx) { return dMtrx4D[usNdx]; } -inline const double* Matrix4D::operator[](unsigned int usNdx) const +inline const std::array& Matrix4D::operator[](unsigned int usNdx) const { return dMtrx4D[usNdx]; }