aboutsummaryrefslogtreecommitdiff
path: root/lib/util.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2012-10-31 17:13:27 -0700
committerBen Pfaff <blp@nicira.com>2012-11-03 21:13:08 -0700
commit35bedb6171b62dd528e01dbeb8943bb841365bf5 (patch)
tree8458a53079e17c20ca7aef2ca571e6cdfc134ffa /lib/util.h
parentfe9d0898828728fc6ce4667527c21beb8fa25ac2 (diff)
util: New functions for the index of the leftmost or rightmost 1-bit.
These will acquire a user in an upcoming commit. Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/util.h')
-rw-r--r--lib/util.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/util.h b/lib/util.h
index c087b53f..70f36919 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -271,6 +271,27 @@ zero_rightmost_1bit(uintmax_t x)
{
return x & (x - 1);
}
+
+/* Returns the index of the rightmost 1-bit in 'x' (e.g. 01011000 => 3), or 32
+ * if 'x' is 0.
+ *
+ * Unlike the other functions for rightmost 1-bits, this function only works
+ * with 32-bit integers. */
+static inline uint32_t
+rightmost_1bit_idx(uint32_t x)
+{
+ return x ? ctz(x) : 32;
+}
+
+/* Returns the index of the rightmost 1-bit in 'x' (e.g. 01011000 => 6), or 32
+ * if 'x' is 0.
+ *
+ * This function only works with 32-bit integers. */
+static inline uint32_t
+leftmost_1bit_idx(uint32_t x)
+{
+ return x ? log_2_floor(x) : 32;
+}
bool is_all_zeros(const uint8_t *, size_t);
bool is_all_ones(const uint8_t *, size_t);