#include "scalar_integer.hpp" namespace glm { template GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); vec const Result(abs(Value)); return equal(Result & (Result - vec(1)), vec(0)); } template GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); return detail::compute_ceilPowerOfTwo::is_signed>::call(v); } template GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); return detail::functor1::call(prevPowerOfTwo, v); } template GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); return (Value % Multiple) == vec(0); } template GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); return (Value % Multiple) == vec(0); } template GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); return detail::functor2::call(nextMultiple, Source, vec(Multiple)); } template GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); return detail::functor2::call(nextMultiple, Source, Multiple); } template GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); return detail::functor2::call(prevMultiple, Source, vec(Multiple)); } template GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); return detail::functor2::call(prevMultiple, Source, Multiple); } template GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); } }//namespace glm