mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-22 17:31:58 -05:00
LibGfx: Make Matrix and VectorN more constexpr-friendly
This allows the copy constructor of Matrix to be called constexpr, which should allow more values to be compile-time calculated. Likewise, VectorN.data() is now constexpr so that it can be compile-time evaluated.
This commit is contained in:
parent
0994e6964b
commit
ba79de0439
2 changed files with 15 additions and 5 deletions
|
@ -36,13 +36,23 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
Matrix(Matrix const& other)
|
||||
constexpr Matrix(Matrix const& other)
|
||||
{
|
||||
__builtin_memcpy(m_elements, other.elements(), sizeof(T) * N * N);
|
||||
*this = other;
|
||||
}
|
||||
|
||||
Matrix& operator=(Matrix const& other)
|
||||
constexpr Matrix& operator=(Matrix const& other)
|
||||
{
|
||||
#ifndef __clang__
|
||||
if (is_constant_evaluated()) {
|
||||
for (size_t i = 0; i < N; i++) {
|
||||
for (size_t j = 0; j < N; j++) {
|
||||
m_elements[i][j] = other.elements()[i][j];
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
__builtin_memcpy(m_elements, other.elements(), sizeof(T) * N * N);
|
||||
return *this;
|
||||
}
|
||||
|
|
|
@ -251,8 +251,8 @@ public:
|
|||
return result;
|
||||
}
|
||||
|
||||
auto& data() { return m_data; }
|
||||
auto const& data() const { return m_data; }
|
||||
constexpr auto& data() { return m_data; }
|
||||
constexpr auto const& data() const { return m_data; }
|
||||
|
||||
private:
|
||||
AK::Array<T, N> m_data;
|
||||
|
|
Loading…
Reference in a new issue