Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/utility.h

    r9dc31c10 rbabeeda  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr 19 16:21:44 2018
    13 // Update Count     : 37
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Thr Aug 17 11:38:00 2017
     13// Update Count     : 34
    1414//
    1515
     
    436436}
    437437
    438 // -----------------------------------------------------------------------------
    439 // O(1) polymorphic integer log2, using clz, which returns the number of leading 0-bits, starting at the most
    440 // significant bit (single instruction on x86)
    441 
    442 template<typename T>
    443 inline constexpr T log2(const T & t) {
    444         if ( std::is_integral<T>::value ) {
    445                 const constexpr int r = sizeof(t) * __CHAR_BIT__ - 1;
    446                 if ( sizeof(T) == sizeof(unsigned int ) ) return r - __builtin_clz( t );
    447                 if ( sizeof(T) == sizeof(unsigned long) ) return r - __builtin_clzl( t );
    448                 if ( sizeof(T) == sizeof(unsigned long long) ) return r - __builtin_clzll( t );
    449         } // if
    450         return -1;
    451 }
    452438
    453439
Note: See TracChangeset for help on using the changeset viewer.