diff --git a/glm/gtx/multiple.inl b/glm/gtx/multiple.inl index c5f134dd..f5d59f27 100644 --- a/glm/gtx/multiple.inl +++ b/glm/gtx/multiple.inl @@ -10,8 +10,45 @@ // - GLM core /////////////////////////////////////////////////////////////////////////////////////////////////// -namespace glm +namespace glm{ +namespace detail { + template + struct higherMultiple + { + template + GLM_FUNC_QUALIFIER genType operator() + ( + genType const & Source, + genType const & Multiple + ) + { + if (Source > genType(0)) + { + genType Tmp = Source - genType(1); + return Tmp + (Multiple - (Tmp % Multiple)); + } + else + return Source + (-Source % Multiple); + } + }; + + template <> + struct higherMultiple + { + template + GLM_FUNC_QUALIFIER genType operator() + ( + genType const & Source, + genType const & Multiple + ) + { + genType Tmp = Source - genType(1); + return Tmp + (Multiple - (Tmp % Multiple)); + } + }; +}//namespace detail + ////////////////////// // higherMultiple @@ -22,13 +59,8 @@ namespace glm genType const & Multiple ) { - if (Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); + detail::higherMultiple::is_signed> Compute; + return Compute(Source, Multiple); } template <>