@@ -25,9 +25,8 @@ class Matrix
static_assert(std::is_arithmetic_v<T>, "Matrix type must be arithmetic");
public:
- Matrix()
+ constexpr Matrix()
{
- data_.fill(static_cast<T>(0));
}
Matrix(const std::array<T, Rows * Cols> &data)
@@ -35,7 +34,7 @@ public:
std::copy(data.begin(), data.end(), data_.begin());
}
- static Matrix identity()
+ static constexpr Matrix identity()
{
Matrix ret;
for (size_t i = 0; i < std::min(Rows, Cols); i++)
@@ -63,14 +62,14 @@ public:
return out.str();
}
- Span<const T, Rows * Cols> data() const { return data_; }
+ constexpr Span<const T, Rows * Cols> data() const { return data_; }
- Span<const T, Cols> operator[](size_t i) const
+ constexpr Span<const T, Cols> operator[](size_t i) const
{
return Span<const T, Cols>{ &data_.data()[i * Cols], Cols };
}
- Span<T, Cols> operator[](size_t i)
+ constexpr Span<T, Cols> operator[](size_t i)
{
return Span<T, Cols>{ &data_.data()[i * Cols], Cols };
}
@@ -85,7 +84,7 @@ public:
}
private:
- std::array<T, Rows * Cols> data_;
+ std::array<T, Rows * Cols> data_{};
};
template<typename T, typename U, unsigned int Rows, unsigned int Cols>
@@ -130,7 +129,7 @@ constexpr Matrix<T, R1, C2> operator*(const Matrix<T, R1, C1> &m1, const Matrix<
}
template<typename T, unsigned int Rows, unsigned int Cols>
-Matrix<T, Rows, Cols> operator+(const Matrix<T, Rows, Cols> &m1, const Matrix<T, Rows, Cols> &m2)
+constexpr Matrix<T, Rows, Cols> operator+(const Matrix<T, Rows, Cols> &m1, const Matrix<T, Rows, Cols> &m2)
{
Matrix<T, Rows, Cols> result;
By zero-initializing the data_ member we can make most functions constexpr which will come in handy in upcoming patches. Note that this is due to C++17. In C++20 we will be able to leave data_ unintialized for constexpr. The Matrix(std::array) version of the constructor can not be constexpr because std::copy only became constexpr in C++20. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- Changes in v2: - Added this patch --- include/libcamera/internal/matrix.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)