]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - common/util.c
Refine ACT_LAYER and ACT_LAYER_TAP
[max/tmk_keyboard.git] / common / util.c
index 9d8fb93219d97d725ec19410033b5cd86647c348..6d4d6bfda1801550c68e3d04c8a37d214a45f8c5 100644 (file)
@@ -38,7 +38,16 @@ uint8_t bitpop16(uint16_t bits)
     return c;
 }
 
+uint8_t bitpop32(uint32_t bits)
+{
+    uint8_t c;
+    for (c = 0; bits; c++)
+        bits &= bits - 1;
+    return c;
+}
+
 // most significant on-bit - return highest location of on-bit
+// NOTE: return 0 when bit0 is on or all bits are off
 uint8_t biton(uint8_t bits)
 {
     uint8_t n = 0;
@@ -47,3 +56,24 @@ uint8_t biton(uint8_t bits)
     if (bits >> 1) { bits >>= 1; n += 1;}
     return n;
 }
+
+uint8_t biton16(uint16_t bits)
+{
+    uint8_t n = 0;
+    if (bits >> 8) { bits >>= 8; n += 8;}
+    if (bits >> 4) { bits >>= 4; n += 4;}
+    if (bits >> 2) { bits >>= 2; n += 2;}
+    if (bits >> 1) { bits >>= 1; n += 1;}
+    return n;
+}
+
+uint8_t biton32(uint32_t bits)
+{
+    uint8_t n = 0;
+    if (bits >>16) { bits >>=16; n +=16;}
+    if (bits >> 8) { bits >>= 8; n += 8;}
+    if (bits >> 4) { bits >>= 4; n += 4;}
+    if (bits >> 2) { bits >>= 2; n += 2;}
+    if (bits >> 1) { bits >>= 1; n += 1;}
+    return n;
+}