]> gitweb.michael.orlitzky.com - hath.git/commitdiff
Added the most_sig_bit_different function to IPv4Address.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 9 May 2010 17:01:32 +0000 (13:01 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 9 May 2010 17:01:32 +0000 (13:01 -0400)
src/IPv4Address.hs

index 5296b24716de40985259ba253ced4bf769097d98..31ad7bd43965a56f7d243ab932ddbb4dc79dac33 100644 (file)
@@ -9,6 +9,7 @@ module IPv4Address
   min_octet2,
   min_octet3,
   min_octet4,
+  most_sig_bit_different,
   octet1,
   octet2,
   octet3,
@@ -224,3 +225,117 @@ max_octet3 addr mask = octet3 (max_address addr mask)
 
 max_octet4 :: IPv4Address -> Maskbits -> Octet
 max_octet4 addr mask = octet4 (max_address addr mask)
+
+
+-- Given two addresses, find the number of the most significant bit
+-- where they differ. If the addresses are the same, return
+-- Maskbits.Zero.
+most_sig_bit_different :: IPv4Address -> IPv4Address -> Maskbits
+most_sig_bit_different addr1 addr2
+  | addr1 == addr2 = Maskbits.Zero
+  | m1  /= n1  = Maskbits.One
+  | m2  /= n2  = Two
+  | m3  /= n3  = Three
+  | m4  /= n4  = Four
+  | m5  /= n5  = Five
+  | m6  /= n6  = Six
+  | m7  /= n7  = Seven
+  | m8  /= n8  = Eight
+  | m9  /= n9  = Nine
+  | m10 /= n10 = Ten
+  | m11 /= n11 = Eleven
+  | m12 /= n12 = Twelve
+  | m13 /= n13 = Thirteen
+  | m14 /= n14 = Fourteen
+  | m15 /= n15 = Fifteen
+  | m16 /= n16 = Sixteen
+  | m17 /= n17 = Seventeen
+  | m18 /= n18 = Eighteen
+  | m19 /= n19 = Nineteen
+  | m20 /= n20 = Twenty
+  | m21 /= n21 = TwentyOne
+  | m22 /= n22 = TwentyTwo
+  | m23 /= n23 = TwentyThree
+  | m24 /= n24 = TwentyFour
+  | m25 /= n25 = TwentyFive
+  | m26 /= n26 = TwentySix
+  | m27 /= n27 = TwentySeven
+  | m28 /= n28 = TwentyEight
+  | m29 /= n29 = TwentyNine
+  | m30 /= n30 = Thirty
+  | m31 /= n31 = ThirtyOne
+  | m32 /= n32 = ThirtyTwo
+  | otherwise  = Maskbits.Zero
+  where
+    m1  = (b1 oct1a)
+    m2  = (b2 oct1a)
+    m3  = (b3 oct1a)
+    m4  = (b4 oct1a)
+    m5  = (b5 oct1a)
+    m6  = (b6 oct1a)
+    m7  = (b7 oct1a)
+    m8  = (b8 oct1a)
+    m9  = (b1 oct2a)
+    m10 = (b2 oct2a)
+    m11 = (b3 oct2a)
+    m12 = (b4 oct2a)
+    m13 = (b5 oct2a)
+    m14 = (b6 oct2a)
+    m15 = (b7 oct2a)
+    m16 = (b8 oct2a)
+    m17 = (b1 oct3a)
+    m18 = (b2 oct3a)
+    m19 = (b3 oct3a)
+    m20 = (b4 oct3a)
+    m21 = (b5 oct3a)
+    m22 = (b6 oct3a)
+    m23 = (b7 oct3a)
+    m24 = (b8 oct3a)
+    m25 = (b1 oct4a)
+    m26 = (b2 oct4a)
+    m27 = (b3 oct4a)
+    m28 = (b4 oct4a)
+    m29 = (b5 oct4a)
+    m30 = (b6 oct4a)
+    m31 = (b7 oct4a)
+    m32 = (b8 oct4a)
+    oct1a = (octet1 addr1)
+    oct2a = (octet2 addr1)
+    oct3a = (octet3 addr1)
+    oct4a = (octet4 addr1)
+    n1  = (b1 oct1b)
+    n2  = (b2 oct1b)
+    n3  = (b3 oct1b)
+    n4  = (b4 oct1b)
+    n5  = (b5 oct1b)
+    n6  = (b6 oct1b)
+    n7  = (b7 oct1b)
+    n8  = (b8 oct1b)
+    n9  = (b1 oct2b)
+    n10 = (b2 oct2b)
+    n11 = (b3 oct2b)
+    n12 = (b4 oct2b)
+    n13 = (b5 oct2b)
+    n14 = (b6 oct2b)
+    n15 = (b7 oct2b)
+    n16 = (b8 oct2b)
+    n17 = (b1 oct3b)
+    n18 = (b2 oct3b)
+    n19 = (b3 oct3b)
+    n20 = (b4 oct3b)
+    n21 = (b5 oct3b)
+    n22 = (b6 oct3b)
+    n23 = (b7 oct3b)
+    n24 = (b8 oct3b)
+    n25 = (b1 oct4b)
+    n26 = (b2 oct4b)
+    n27 = (b3 oct4b)
+    n28 = (b4 oct4b)
+    n29 = (b5 oct4b)
+    n30 = (b6 oct4b)
+    n31 = (b7 oct4b)
+    n32 = (b8 oct4b)
+    oct1b = (octet1 addr2)
+    oct2b = (octet2 addr2)
+    oct3b = (octet3 addr2)
+    oct4b = (octet4 addr2)