util: Collapse toCidr functions

This collapses the v4/v6 Cidr conversion function into a single routine.
It also removes multi-instruction instrinsics like popcnt, and instead
only uses ctz / clz when needed.

Change-Id: I3fecec9b050617d2556488a5d0c007df860a080b
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/test_util.cpp b/test/test_util.cpp
index 4673e51..9b61c64 100644
--- a/test/test_util.cpp
+++ b/test/test_util.cpp
@@ -132,6 +132,10 @@
     uint8_t prefix = toCidr(AF_INET, mask);
     EXPECT_EQ(prefix, 24);
 
+    mask = "255.255.255.255";
+    prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 32);
+
     mask = "255.255.0.0";
     prefix = toCidr(AF_INET, mask);
     EXPECT_EQ(prefix, 16);
@@ -156,6 +160,10 @@
     uint8_t prefix = toCidr(AF_INET6, mask);
     EXPECT_EQ(prefix, 32);
 
+    mask = "::";
+    prefix = toCidr(AF_INET6, mask);
+    EXPECT_EQ(prefix, 0);
+
     mask = "ffff:ffff:ffff::";
     prefix = toCidr(AF_INET6, mask);
     EXPECT_EQ(prefix, 48);
@@ -193,10 +201,6 @@
     prefix = toCidr(AF_INET6, mask);
     EXPECT_EQ(prefix, 0);
 
-    mask = "::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
     mask = ":";
     prefix = toCidr(AF_INET6, mask);
     EXPECT_EQ(prefix, 0);