X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCidr.hs;h=b5b3f744fd56651848387d7e010766bd328adb19;hb=18a81546e7c4ad10574918efb08b2e104e911d73;hp=002ec0b849fc08d555a2e6ab221212143c51d160;hpb=e1d16438b44ecd962565756a828c9ed8014cf894;p=hath.git diff --git a/src/Cidr.hs b/src/Cidr.hs index 002ec0b..b5b3f74 100644 --- a/src/Cidr.hs +++ b/src/Cidr.hs @@ -8,6 +8,7 @@ module Cidr combine_all, contains, contains_proper, + enumerate, max_octet1, max_octet2, max_octet3, @@ -22,13 +23,14 @@ module Cidr import Data.List (nubBy) import Data.List.Split (splitOneOf) -import Data.Maybe (catMaybes, fromJust) +import Data.Maybe (catMaybes, fromJust, mapMaybe) import Test.HUnit (assertEqual) import Test.Framework (Test, testGroup) import Test.Framework.Providers.HUnit (testCase) import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.QuickCheck (Arbitrary(..), Gen, Property, (==>)) +import Text.Read (readMaybe) import qualified Bit as B import IPv4Address @@ -77,7 +79,7 @@ maskbits_from_cidr_string s -- of its octets (as Ints). octets_from_cidr_string :: String -> [Octet] octets_from_cidr_string s = - catMaybes $ map octet_from_string (take 4 (splitOneOf "./" s)) + mapMaybe readMaybe (take 4 (splitOneOf "./" s)) -- | Return Nothing if we can't parse both maskbits and octets from @@ -165,7 +167,7 @@ max_octet4 cidr = octet4 (max_host cidr) -- cidr1, then at least mbits1 of an address in cidr2 will match -- cidr1. For example, -- --- cidr1 = 192.168.1.0/23, cidr2 = 192.168.1.100/24 +-- cidr1 = 192.168.1.0\/23, cidr2 = 192.168.1.100\/24 -- -- Here, cidr2 contains all of 192.168.1.0 through -- 192.168.1.255. However, cidr1 contains BOTH 192.168.0.0 through @@ -254,7 +256,8 @@ adjacent cidr1 cidr2 mbits2 = maskbits cidr2 - +enumerate :: Cidr -> [IPv4Address] +enumerate cidr = [(min_host cidr)..(max_host cidr)] -- HUnit Tests