Changes in src/Common/utility.h [8ca60e4:5bf685f]
- File:
-
- 1 edited
-
src/Common/utility.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r8ca60e4 r5bf685f 111 111 }; 112 112 113 // ----------------------------------------------------------------------------- 114 // O(1) polymorphic integer ilog2, using clz, which returns the number of leading 0-bits, starting at the most 115 // significant bit (single instruction on x86) 116 117 template<typename T> 118 inline 119 #if defined(__GNUC__) && __GNUC__ > 4 120 constexpr 121 #endif 122 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 } // ilog2 132 113 133 // Local Variables: // 114 134 // tab-width: 4 //
Note:
See TracChangeset
for help on using the changeset viewer.