X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMaskable.hs;h=1441c07a6757b8ae3d80f781c52d8fb6fb5ea01d;hb=4520812e6f264cdeba984d180f20a8f8c6b6d645;hp=40cd9ccddf7ac8f6952bc34c97fca964aa8486d4;hpb=a34db6dec4124cb42473d61d92a59df66b2609da;p=hath.git diff --git a/src/Maskable.hs b/src/Maskable.hs index 40cd9cc..1441c07 100644 --- a/src/Maskable.hs +++ b/src/Maskable.hs @@ -1,9 +1,6 @@ module Maskable where -import qualified Bit as B -import IPv4Address import Maskbits -import Octet -- Any string of bits should be maskable by some number of netmask -- bits. The convention of the Maskable typeclass follows CIDR @@ -18,63 +15,3 @@ import Octet class Maskable a where apply_mask :: a -> Maskbits -> a - -instance Maskable Octet where - apply_mask _ Maskbits.None = Octet.None - apply_mask Octet.None _ = Octet.None - apply_mask oct mask - | mask == Eight = oct - | mask == Seven = oct { b8 = B.Zero } - | mask == Six = oct { b8 = B.Zero, b7 = B.Zero } - | mask == Five = oct { b8 = B.Zero, b7 = B.Zero, b6 = B.Zero } - | mask == Four = oct { b8 = B.Zero, b7 = B.Zero, b6 = B.Zero, b5 = B.Zero } - | mask == Three = oct { b8 = B.Zero, b7 = B.Zero, b6 = B.Zero, b5 = B.Zero, b4 = B.Zero } - | mask == Two = oct { b8 = B.Zero, b7 = B.Zero, b6 = B.Zero, b5 = B.Zero, b4 = B.Zero, b3 = B.Zero } - | mask == One = oct { b8 = B.Zero, b7 = B.Zero, b6 = B.Zero, b5 = B.Zero, b4 = B.Zero, b3 = B.Zero, b2 = B.Zero } - | mask == Zero = min_octet - | otherwise = Octet.None - - - -instance Maskable IPv4Address where - apply_mask _ Maskbits.None = IPv4Address.None - apply_mask addr mask - | mask == ThirtyTwo = ipv4address_from_octets oct1 oct2 oct3 oct4 - | mask == ThirtyOne = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 One) - | mask == Thirty = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Two) - | mask == TwentyNine = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Three) - | mask == TwentyEight = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Four) - | mask == TwentySeven = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Five) - | mask == TwentySix = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Six) - | mask == TwentyFive = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Seven) - | mask == TwentyFour = ipv4address_from_octets oct1 oct2 oct3 (min_octet) - | mask == TwentyThree = ipv4address_from_octets oct1 oct2 (apply_mask oct3 One) (min_octet) - | mask == TwentyTwo = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Two) (min_octet) - | mask == TwentyOne = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Three) (min_octet) - | mask == Twenty = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Four) (min_octet) - | mask == Nineteen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Five) (min_octet) - | mask == Eighteen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Six) (min_octet) - | mask == Seventeen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Seven) (min_octet) - | mask == Sixteen = ipv4address_from_octets oct1 oct2 (min_octet) (min_octet) - | mask == Fifteen = ipv4address_from_octets oct1 (apply_mask oct2 One) (min_octet) (min_octet) - | mask == Fourteen = ipv4address_from_octets oct1 (apply_mask oct2 Two) (min_octet) (min_octet) - | mask == Thirteen = ipv4address_from_octets oct1 (apply_mask oct2 Three) (min_octet) (min_octet) - | mask == Twelve = ipv4address_from_octets oct1 (apply_mask oct2 Four) (min_octet) (min_octet) - | mask == Eleven = ipv4address_from_octets oct1 (apply_mask oct2 Five) (min_octet) (min_octet) - | mask == Ten = ipv4address_from_octets oct1 (apply_mask oct2 Six) (min_octet) (min_octet) - | mask == Nine = ipv4address_from_octets oct1 (apply_mask oct2 Seven) (min_octet) (min_octet) - | mask == Eight = ipv4address_from_octets oct1 (min_octet) (min_octet) (min_octet) - | mask == Seven = ipv4address_from_octets (apply_mask oct1 One) (min_octet) (min_octet) (min_octet) - | mask == Six = ipv4address_from_octets (apply_mask oct1 Two) (min_octet) (min_octet) (min_octet) - | mask == Five = ipv4address_from_octets (apply_mask oct1 Three) (min_octet) (min_octet) (min_octet) - | mask == Four = ipv4address_from_octets (apply_mask oct1 Four) (min_octet) (min_octet) (min_octet) - | mask == Three = ipv4address_from_octets (apply_mask oct1 Five) (min_octet) (min_octet) (min_octet) - | mask == Two = ipv4address_from_octets (apply_mask oct1 Six) (min_octet) (min_octet) (min_octet) - | mask == One = ipv4address_from_octets (apply_mask oct1 Seven) (min_octet) (min_octet) (min_octet) - | mask == Zero = ipv4address_from_octets (min_octet) (min_octet) (min_octet) (min_octet) - | otherwise = IPv4Address.None - where - oct1 = (octet1 addr) - oct2 = (octet2 addr) - oct3 = (octet3 addr) - oct4 = (octet4 addr)