diff options
Diffstat (limited to 'gr-blocks/lib/count_bits.cc')
-rw-r--r-- | gr-blocks/lib/count_bits.cc | 67 |
1 files changed, 31 insertions, 36 deletions
diff --git a/gr-blocks/lib/count_bits.cc b/gr-blocks/lib/count_bits.cc index c65dc94894..aaab97b66a 100644 --- a/gr-blocks/lib/count_bits.cc +++ b/gr-blocks/lib/count_bits.cc @@ -29,50 +29,45 @@ */ namespace gr { - namespace blocks { +namespace blocks { - unsigned int - count_bits8(unsigned int x) - { - int count = 0; +unsigned int count_bits8(unsigned int x) +{ + int count = 0; - for(int i = 0; i < 8; i++) { - if(x & (1 << i)) - count++; - } - - return count; + for (int i = 0; i < 8; i++) { + if (x & (1 << i)) + count++; } - unsigned int - count_bits16(unsigned int x) - { - int count = 0; + return count; +} - for(int i = 0; i < 16; i++) { - if(x & (1 << i)) - count++; - } +unsigned int count_bits16(unsigned int x) +{ + int count = 0; - return count; + for (int i = 0; i < 16; i++) { + if (x & (1 << i)) + count++; } - unsigned int - count_bits32(unsigned int x) - { - unsigned res = (x & 0x55555555) + ((x >> 1) & 0x55555555); - res = (res & 0x33333333) + ((res >> 2) & 0x33333333); - res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F); - res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF); - return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF); - } + return count; +} - unsigned int - count_bits64(unsigned long long x) - { - return count_bits32((x >> 32) & 0xffffffff) + \ - count_bits32(x & 0xffffffff); - } +unsigned int count_bits32(unsigned int x) +{ + unsigned res = (x & 0x55555555) + ((x >> 1) & 0x55555555); + res = (res & 0x33333333) + ((res >> 2) & 0x33333333); + res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F); + res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF); + return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF); +} + +unsigned int count_bits64(unsigned long long x) +{ + return count_bits32((x >> 32) & 0xffffffff) + count_bits32(x & 0xffffffff); +} - } /* namespace blocks */ +} /* namespace blocks */ } /* namespace gr */ |