summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-05-05 21:44:31 +0200
committerAndreas Kling <kling@serenityos.org>2022-05-05 21:46:42 +0200
commit3a2118cc7d3ddcebd55e66ca04a3f9c73ab431e7 (patch)
treec7c333cc56d2f0aaf9952149d626b6556680af8c
parentcaf652799f04d6008eae4ab793f393748f8ccd18 (diff)
downloadserenity-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.h24
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;
};