From 62ffe67a9f5b963682dcc32bb3249da3004a9447 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Sun, 6 Mar 2022 19:29:43 +0100 Subject: [PATCH] LibGfx: Reimplement `Vector::length()` as a loop This more generic loop supports arbitrary values of `N` and also gets rid of that strange single argument `AK::hypot` invocation. --- Userland/Libraries/LibGfx/VectorN.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibGfx/VectorN.h b/Userland/Libraries/LibGfx/VectorN.h index 7913427d937..64b13f374f5 100644 --- a/Userland/Libraries/LibGfx/VectorN.h +++ b/Userland/Libraries/LibGfx/VectorN.h @@ -193,12 +193,11 @@ public: [[nodiscard]] constexpr T length() const { - if constexpr (N == 2) - return AK::hypot(m_data[0] * m_data[0] + m_data[1] * m_data[1]); - else if constexpr (N == 3) - return AK::sqrt(m_data[0] * m_data[0] + m_data[1] * m_data[1] + m_data[2] * m_data[2]); - else - return AK::sqrt(m_data[0] * m_data[0] + m_data[1] * m_data[1] + m_data[2] * m_data[2] + m_data[3] * m_data[3]); + T squared_sum {}; + UNROLL_LOOP + for (auto i = 0u; i < N; ++i) + squared_sum += m_data[i] * m_data[i]; + return AK::sqrt(squared_sum); } [[nodiscard]] constexpr VectorN<2, T> xy() const requires(N >= 3)