
But maybe it can be a good point to use enable_if<> to for 8 and 16-bit integrals specializations and use the correct __builtin for the others like: 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 } template<> inline int count_leading_zeros(unsigned int value) { return __builtin_clz(value); } template<> inline int count_leading_zeros(unsigned long int value) { return __builtin_clzl(value); } template<> inline int count_leading_zeros(unsigned long long int value) { return __builtin_clzll(value); } What do you think? 2010/7/14 Murilo Adriano Vasconcelos <muriloufg@gmail.com>
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
-- Murilo Adriano Vasconcelos http://murilo.wordpress.com