diff options
author | Andreas Kling <kling@serenityos.org> | 2022-05-05 21:44:31 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-05-05 21:46:42 +0200 |
commit | 3a2118cc7d3ddcebd55e66ca04a3f9c73ab431e7 (patch) | |
tree | c7c333cc56d2f0aaf9952149d626b6556680af8c | |
parent | caf652799f04d6008eae4ab793f393748f8ccd18 (diff) | |
download | serenity-3a2118cc7d3ddcebd55e66ca04a3f9c73ab431e7.zip |
LibGfx: Fix Clang build failulres in VectorN
Clang didn't accept the friend declaration here, as the class has a
requires clause attached to it, and I couldn't immediately figure
out what it wants instead.
Add accessors for VectorN::m_data and use those where needed instead
for now.
-rw-r--r-- | Userland/Libraries/LibGfx/VectorN.h | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/Userland/Libraries/LibGfx/VectorN.h b/Userland/Libraries/LibGfx/VectorN.h index abbe3372bb..56f5aafa02 100644 --- a/Userland/Libraries/LibGfx/VectorN.h +++ b/Userland/Libraries/LibGfx/VectorN.h @@ -31,9 +31,6 @@ namespace Gfx { template<size_t N, typename T> requires(N >= 2 && N <= 4) class VectorN final { - template<size_t U, typename V> - friend class VectorN; - static_assert(LOOP_UNROLL_N >= N, "Unroll the entire loop for performance."); public: @@ -71,7 +68,7 @@ public: { UNROLL_LOOP for (auto i = 0u; i < N; ++i) - m_data[i] += other.m_data[i]; + m_data[i] += other.data()[i]; return *this; } @@ -79,7 +76,7 @@ public: { UNROLL_LOOP for (auto i = 0u; i < N; ++i) - m_data[i] -= other.m_data[i]; + m_data[i] -= other.data()[i]; return *this; } @@ -96,7 +93,7 @@ public: VectorN result; UNROLL_LOOP for (auto i = 0u; i < N; ++i) - result.m_data[i] = m_data[i] + other.m_data[i]; + result.m_data[i] = m_data[i] + other.data()[i]; return result; } @@ -105,7 +102,7 @@ public: VectorN result; UNROLL_LOOP for (auto i = 0u; i < N; ++i) - result.m_data[i] = m_data[i] - other.m_data[i]; + result.m_data[i] = m_data[i] - other.data()[i]; return result; } @@ -114,7 +111,7 @@ public: VectorN result; UNROLL_LOOP for (auto i = 0u; i < N; ++i) - result.m_data[i] = m_data[i] * other.m_data[i]; + result.m_data[i] = m_data[i] * other.data()[i]; return result; } @@ -132,7 +129,7 @@ public: VectorN result; UNROLL_LOOP for (auto i = 0u; i < N; ++i) - result.m_data[i] = m_data[i] / other.m_data[i]; + result.m_data[i] = m_data[i] / other.data()[i]; return result; } @@ -161,7 +158,7 @@ public: T result {}; UNROLL_LOOP for (auto i = 0u; i < N; ++i) - result += m_data[i] * other.m_data[i]; + result += m_data[i] * other.data()[i]; return result; } @@ -238,13 +235,16 @@ public: UNROLL_LOOP for (auto i = 0u; i < N; ++i) { if constexpr (IsSame<T, float>) - result.m_data[i] = static_cast<U>(lrintf(m_data[i])); + result.data()[i] = static_cast<U>(lrintf(m_data[i])); else - result.m_data[i] = static_cast<U>(lrint(m_data[i])); + result.data()[i] = static_cast<U>(lrint(m_data[i])); } return result; } + auto& data() { return m_data; } + auto const& data() const { return m_data; } + private: AK::Array<T, N> m_data; }; |