chiark / gitweb /
util: add log2u(), log2u_round_up()
authorMichal Schmidt <mschmidt@redhat.com>
Tue, 14 Oct 2014 23:28:54 +0000 (01:28 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Thu, 30 Oct 2014 18:50:50 +0000 (19:50 +0100)
Two's logarithms for unsigned.

src/shared/util.h

index aad9eb7..e405b02 100644 (file)
@@ -830,6 +830,21 @@ static inline int log2i(int x) {
         return __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1;
 }
 
+static inline unsigned log2u(unsigned x) {
+        assert(x > 0);
+
+        return sizeof(unsigned) * 8 - __builtin_clz(x) - 1;
+}
+
+static inline unsigned log2u_round_up(unsigned x) {
+        assert(x > 0);
+
+        if (x == 1)
+                return 0;
+
+        return log2u(x - 1) + 1;
+}
+
 static inline bool logind_running(void) {
         return access("/run/systemd/seats/", F_OK) >= 0;
 }