From fdf92ba3401fec81fc20a9439c84799aeb35f98e Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 17 Aug 2017 15:20:23 +0200 Subject: [PATCH] Avoid duplicated code --- glm/detail/func_common.inl | 85 ++++++-------------------------------- 1 file changed, 12 insertions(+), 73 deletions(-) diff --git a/glm/detail/func_common.inl b/glm/detail/func_common.inl index f4167d4b..e31ad3ae 100644 --- a/glm/detail/func_common.inl +++ b/glm/detail/func_common.inl @@ -790,45 +790,15 @@ namespace detail return std::frexp(x, &exp); } - template - GLM_FUNC_QUALIFIER vec<1, T, Q> frexp(vec<1, T, Q> const& x, vec<1, int, Q>& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return vec<1, T, Q>(std::frexp(x.x, &exp.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> frexp(vec<2, T, Q> const& x, vec<2, int, Q>& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return vec<2, T, Q>( - frexp(x.x, exp.x), - frexp(x.y, exp.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> frexp(vec<3, T, Q> const& x, vec<3, int, Q>& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - - return vec<3, T, Q>( - frexp(x.x, exp.x), - frexp(x.y, exp.y), - frexp(x.z, exp.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> frexp(vec<4, T, Q> const& x, vec<4, int, Q>& exp) + template + GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs"); - return vec<4, T, Q>( - frexp(x.x, exp.x), - frexp(x.y, exp.y), - frexp(x.z, exp.z), - frexp(x.w, exp.w)); + vec Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = std::frexp(v[l], &exp[l]); + return Result; } template @@ -839,46 +809,15 @@ namespace detail return std::ldexp(x, exp); } - template - GLM_FUNC_QUALIFIER vec<1, T, Q> ldexp(vec<1, T, Q> const& x, vec<1, int, Q> const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - - return vec<1, T, Q>( - ldexp(x.x, exp.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> ldexp(vec<2, T, Q> const& x, vec<2, int, Q> const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - - return vec<2, T, Q>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> ldexp(vec<3, T, Q> const& x, vec<3, int, Q> const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - - return vec<3, T, Q>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y), - ldexp(x.z, exp.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> ldexp(vec<4, T, Q> const& x, vec<4, int, Q> const& exp) + template + GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs"); - return vec<4, T, Q>( - ldexp(x.x, exp.x), - ldexp(x.y, exp.y), - ldexp(x.z, exp.z), - ldexp(x.w, exp.w)); + vec Result; + for (length_t l = 0; l < v.length(); ++l) + Result[l] = std::ldexp(v[l], exp[l]); + return Result; } }//namespace glm