Changes in / [68cf1d4:36e120a]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r68cf1d4 r36e120a 111 111 }; 112 112 113 // -----------------------------------------------------------------------------114 // O(1) polymorphic integer ilog2, using clz, which returns the number of leading 0-bits, starting at the most115 // significant bit (single instruction on x86)116 117 template<typename T>118 inline119 #if defined(__GNUC__) && __GNUC__ > 4120 constexpr121 #endif122 T ilog2(const T & t) {123 if(std::is_integral<T>::value) {124 const constexpr int r = sizeof(t) * __CHAR_BIT__ - 1;125 if( sizeof(T) == sizeof(unsigned int) ) return r - __builtin_clz ( t );126 if( sizeof(T) == sizeof(unsigned long) ) return r - __builtin_clzl ( t );127 if( sizeof(T) == sizeof(unsigned long long) ) return r - __builtin_clzll( t );128 }129 assert(false);130 return -1;131 } // ilog2132 133 113 // Local Variables: // 134 114 // tab-width: 4 //
Note: See TracChangeset
for help on using the changeset viewer.