/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2005-12-24 // Updated : 2006-12-06 // Licence : This source is under MIT License // File : glm/gtx/integer.inl /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ namespace gtx{ namespace integer { // pow GLM_FUNC_QUALIFIER int pow(int x, int y) { if(y == 0) return 1; int result = x; for(int i = 1; i < y; ++i) result *= x; return result; } // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 GLM_FUNC_QUALIFIER int sqrt(int x) { if(x <= 1) return x; int NextTrial = x >> 1; int CurrentAnswer; do { CurrentAnswer = NextTrial; NextTrial = (NextTrial + x / NextTrial) >> 1; } while(NextTrial < CurrentAnswer); return CurrentAnswer; } // mod GLM_FUNC_QUALIFIER int mod(int x, int y) { return x - y * (x / y); } // factorial (!12 max, integer only) template GLM_FUNC_QUALIFIER genType factorial(genType const & x) { genType Result; for(Result = 1; x > 1; --x) Result *= x; return Result; } template GLM_FUNC_QUALIFIER detail::tvec2 factorial( detail::tvec2 const & x) { return detail::tvec2( factorial(x.x), factorial(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 factorial( detail::tvec3 const & x) { return detail::tvec3( factorial(x.x), factorial(x.y), factorial(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 factorial( detail::tvec4 const & x) { return detail::tvec4( factorial(x.x), factorial(x.y), factorial(x.z), factorial(x.w)); } }//namespace integer }//namespace gtx }//namespace glm