diff options
author | Henrik Rydberg <rydberg@euromail.se> | 2010-05-14 01:09:42 +0200 |
---|---|---|
committer | Henrik Rydberg <rydberg@euromail.se> | 2010-05-14 01:41:39 +0200 |
commit | f02210172efc6bfc05c4598c14e1268d2828097e (patch) | |
tree | 00457552d4fe048b17b4a73d58d17c9db63552f8 /src/common.h | |
parent | 1e37ed517ef0906767a230ab384b8e66869cf4b2 (diff) | |
download | xorg-input-kobomultitouch-f02210172efc6bfc05c4598c14e1268d2828097e.tar.gz xorg-input-kobomultitouch-f02210172efc6bfc05c4598c14e1268d2828097e.tar.bz2 xorg-input-kobomultitouch-f02210172efc6bfc05c4598c14e1268d2828097e.zip |
Simplify bit bookkeeping
In preparation of adding several additional finger bit registers,
remove the redundant bit-counting variables and introduce fast
bit-traversal functions instead.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/common.h')
-rw-r--r-- | src/common.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/common.h b/src/common.h index 27082b7..1b4d007 100644 --- a/src/common.h +++ b/src/common.h @@ -61,4 +61,19 @@ #define SETBIT(m, x) (m |= BITMASK(x)) #define CLEARBIT(m, x) (m &= ~BITMASK(x)) +/* Count number of bits (Sean Eron Andersson's Bit Hacks) */ +static inline int bitcount(unsigned v) +{ + v -= ((v>>1) & 0x55555555); + v = (v&0x33333333) + ((v>>2) & 0x33333333); + return (((v + (v>>4)) & 0xF0F0F0F) * 0x1010101) >> 24; +} + +/* Return index of first bit [0-31], -1 on zero */ +#define firstbit(v) (__builtin_ffs(v) - 1) + +/* boost-style foreach bit */ +#define foreach_bit(i, m) \ + for (i = firstbit(m); i >= 0; i = firstbit((m) & (~0U << i + 1))) + #endif |