summaryrefslogtreecommitdiff
path: root/src/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common.h')
-rw-r--r--src/common.h15
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 @@
61#define SETBIT(m, x) (m |= BITMASK(x)) 61#define SETBIT(m, x) (m |= BITMASK(x))
62#define CLEARBIT(m, x) (m &= ~BITMASK(x)) 62#define CLEARBIT(m, x) (m &= ~BITMASK(x))
63 63
64/* Count number of bits (Sean Eron Andersson's Bit Hacks) */
65static inline int bitcount(unsigned v)
66{
67 v -= ((v>>1) & 0x55555555);
68 v = (v&0x33333333) + ((v>>2) & 0x33333333);
69 return (((v + (v>>4)) & 0xF0F0F0F) * 0x1010101) >> 24;
70}
71
72/* Return index of first bit [0-31], -1 on zero */
73#define firstbit(v) (__builtin_ffs(v) - 1)
74
75/* boost-style foreach bit */
76#define foreach_bit(i, m) \
77 for (i = firstbit(m); i >= 0; i = firstbit((m) & (~0U << i + 1)))
78
64#endif 79#endif