/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2010-03-17 // Updated : 2010-03-31 // Licence : This source is under MIT License // File : glm/core/func_integer.hpp /////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_func_integer #define glm_core_func_integer namespace glm { /// @addtogroup core_funcs /// @{ //! Adds 32-bit unsigned integer x and y, returning the sum //! modulo pow(2, 32). The value carry is set to 0 if the sum was //! less than pow(2, 32), or to 1 otherwise. //! //! \li GLSL uaddCarry man page //! \li GLSL 4.00.08 specification, section 8.8 template genUType uaddCarry( genUType const & x, genUType const & y, genUType & carry); //! Subtracts the 32-bit unsigned integer y from x, returning //! the difference if non-negative, or pow(2, 32) plus the difference //! otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. //! //! \li GLSL usubBorrow man page //! \li GLSL 4.00.08 specification, section 8.8 template genUType usubBorrow( genUType const & x, genUType const & y, genUType & borrow); //! Multiplies 32-bit integers x and y, producing a 64-bit //! result. The 32 least-significant bits are returned in lsb. //! The 32 most-significant bits are returned in msb. //! //! \li GLSL umulExtended man page //! \li GLSL 4.00.08 specification, section 8.8 template void umulExtended( genUType const & x, genUType const & y, genUType & msb, genUType & lsb); //! Multiplies 32-bit integers x and y, producing a 64-bit //! result. The 32 least-significant bits are returned in lsb. //! The 32 most-significant bits are returned in msb. //! //! \li GLSL imulExtended man page //! \li GLSL 4.00.08 specification, section 8.8 template void imulExtended( genIType const & x, genIType const & y, genIType & msb, genIType & lsb); //! Extracts bits [offset, offset + bits - 1] from value, //! returning them in the least significant bits of the result. //! For unsigned data types, the most significant bits of the //! result will be set to zero. For signed data types, the //! most significant bits will be set to the value of bit offset + base – 1. //! //! If bits is zero, the result will be zero. The result will be //! undefined if offset or bits is negative, or if the sum of //! offset and bits is greater than the number of bits used //! to store the operand. //! //! \li GLSL bitfieldExtract man page //! \li GLSL 4.00.08 specification, section 8.8 template genIUType bitfieldExtract( genIUType const & Value, int const & Offset, int const & Bits); //! Returns the insertion the bits least-significant bits of insert into base. //! //! The result will have bits [offset, offset + bits - 1] taken //! from bits [0, bits – 1] of insert, and all other bits taken //! directly from the corresponding bits of base. If bits is //! zero, the result will simply be base. The result will be //! undefined if offset or bits is negative, or if the sum of //! offset and bits is greater than the number of bits used to //! store the operand. //! //! \li GLSL bitfieldInsert man page //! \li GLSL 4.00.08 specification, section 8.8 template genIUType bitfieldInsert( genIUType const & Base, genIUType const & Insert, int const & Offset, int const & Bits); //! Returns the reversal of the bits of value. //! The bit numbered n of the result will be taken from bit (bits - 1) - n of value, //! where bits is the total number of bits used to represent value. //! //! \li GLSL bitfieldReverse man page //! \li GLSL 4.00.08 specification, section 8.8 template genIUType bitfieldReverse(genIUType const & value); //! Returns the number of bits set to 1 in the binary representation of value. //! //! \li GLSL bitCount man page //! \li GLSL 4.00.08 specification, section 8.8 template class C> typename C::signed_type bitCount(C const & Value); //! Returns the bit number of the least significant bit set to //! 1 in the binary representation of value. //! If value is zero, -1 will be returned. //! //! \li GLSL findLSB man page //! \li GLSL 4.00.08 specification, section 8.8 template class C> typename C::signed_type findLSB(C const & Value); //! Returns the bit number of the most significant bit in the binary representation of value. //! For positive integers, the result will be the bit number of the most significant bit set to 1. //! For negative integers, the result will be the bit number of the most significant //! bit set to 0. For a value of zero or negative one, -1 will be returned. //! //! \li GLSL findMSB man page //! \li GLSL 4.00.08 specification, section 8.8 template class C> typename C::signed_type findMSB(C const & Value); /// @} }//namespace glm #include "func_integer.inl" #endif//glm_core_func_integer