aboutsummaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/bitscan.h12
-rw-r--r--src/util/u_vector.c4
2 files changed, 14 insertions, 2 deletions
diff --git a/src/util/bitscan.h b/src/util/bitscan.h
index 611e8120596..2d4e46ec0f1 100644
--- a/src/util/bitscan.h
+++ b/src/util/bitscan.h
@@ -31,6 +31,7 @@
#include <assert.h>
#include <stdint.h>
+#include <stdbool.h>
#include <string.h>
#if defined(_MSC_VER)
@@ -107,6 +108,17 @@ u_bit_scan64(uint64_t *mask)
return i;
}
+/* Determine if an unsigned value is a power of two.
+ *
+ * \note
+ * Zero is treated as a power of two.
+ */
+static inline bool
+util_is_power_of_two_or_zero(unsigned v)
+{
+ return (v & (v - 1)) == 0;
+}
+
/* For looping over a bitmask when you want to loop over consecutive bits
* manually, for example:
*
diff --git a/src/util/u_vector.c b/src/util/u_vector.c
index 0de492ccf9a..bec6e5bbc30 100644
--- a/src/util/u_vector.c
+++ b/src/util/u_vector.c
@@ -37,8 +37,8 @@
int
u_vector_init(struct u_vector *vector, uint32_t element_size, uint32_t size)
{
- assert(util_is_power_of_two(size));
- assert(element_size < size && util_is_power_of_two(element_size));
+ assert(util_is_power_of_two_or_zero(size));
+ assert(element_size < size && util_is_power_of_two_or_zero(element_size));
vector->head = 0;
vector->tail = 0;