Robert P. J. Day wrote: > once upon a time, the kernel source code was replete with > conditional constructs of the form: > > if ((n & (n-1)) == 0) > > as a way of testing whether something was a power of two. mercifully, > include/linux/log2.h was created which introduced, among other things: > > static inline __attribute__((const)) > bool is_power_of_2(unsigned long n) > { > return (n != 0 && ((n & (n - 1)) == 0)); > } > > so we could simply ask whether "is_power_of_2(n)", which is convenient > when we're testing things like, oh, blocksize. > > similarly, there are bunches of places which need to test whether an > integer value has only a single set bit (for instance, to make sure > only one flag bit out of a number of mutually exclusive bits are set). > > mathematically, that would be the same test, of course, but > semantically, it would be ugly and inappropriate. is there, > somewhere, a corresponding macro/function that asks: > > single_bit_set(n) > > if not, that would be handy, could be plopped into > include/linux/bitops.h and could be defined exactly the same way, and > would allow piles of code to be simplified. > > thoughts? single_bit_set(n) is equivalent to hamming weight(n) == 1 lib/hweight.c implements hamming weights for 8/16/32/64-bit args. -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html