
I did that way because GCC do not have those __builtin functions for 16-bit and 8-bit integral types. So, that way I implemented it works for 64, 32, 16 an 8-bit *unsigned* integral values. 2010/7/14 Tim Blechmann <tim@klingt.org>
hi,
- *Count Leading Zeros*
as for:
template <typename T> inline int count_leading_zeros(T value) { #ifndef BOOST_HAS_NO_INT64_T return __builtin_clzll(value) - (64 - (sizeof(T) << 3)); #else return __builtin_clz(value) - (32 - (sizeof(T) << 3)); #endif }
__builtin_clz comes in different versions for unsigned int, unsigned long and unsigned long long. i think the safest way to make use of the correct version is by using template specialization ... maybe similar to [1] ... i am also not sure, how it will behave for signed types ...
but it is great to see an ilog2 implementation ...
=)
cheers, tim
[1]
http://tim.klingt.org/git?p=boost_heap.git;a=blob;f=boost/heap/detail/ilog2....
-- tim@klingt.org http://tim.klingt.org
Cheat your landlord if you can and must, but do not try to shortchange the Muse. It cannot be done. You can't fake quality any more than you can fake a good meal. William S. Burroughs
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Best, -- Murilo Adriano Vasconcelos http://murilo.wordpress.com