00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_func_integer
00011 #define glm_core_func_integer
00012
00013 namespace glm
00014 {
00015 namespace core{
00016 namespace function{
00018 namespace integer{
00019
00022
00029 template <typename genUType>
00030 genUType uaddCarry(
00031 genUType const & x,
00032 genUType const & y,
00033 genUType & carry);
00034
00041 template <typename genUType>
00042 genUType usubBorrow(
00043 genUType const & x,
00044 genUType const & y,
00045 genUType & borrow);
00046
00053 template <typename genUType>
00054 void umulExtended(
00055 genUType const & x,
00056 genUType const & y,
00057 genUType & msb,
00058 genUType & lsb);
00059
00066 template <typename genIType>
00067 void imulExtended(
00068 genIType const & x,
00069 genIType const & y,
00070 genIType & msb,
00071 genIType & lsb);
00072
00086 template <typename genIUType>
00087 genIUType bitfieldExtract(
00088 genIUType const & Value,
00089 int const & Offset,
00090 int const & Bits);
00091
00104 template <typename genIUType>
00105 genIUType bitfieldInsert(
00106 genIUType const & Base,
00107 genIUType const & Insert,
00108 int const & Offset,
00109 int const & Bits);
00110
00117 template <typename genIUType>
00118 genIUType bitfieldReverse(genIUType const & value);
00119
00124 template <typename T, template <typename> class C>
00125 typename C<T>::signed_type bitCount(C<T> const & Value);
00126
00133 template <typename T, template <typename> class C>
00134 typename C<T>::signed_type findLSB(C<T> const & Value);
00135
00143 template <typename T, template <typename> class C>
00144 typename C<T>::signed_type findMSB(C<T> const & Value);
00145
00147
00148 }
00149 }
00150 }
00151
00152 using namespace core::function::integer;
00153 }
00154
00155 #include "func_integer.inl"
00156
00157 #endif//glm_core_func_integer
00158