From aa99fa9dea5d738c25c3585ac9653819bcda5bae Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sat, 8 May 2010 11:26:18 -0400 Subject: [PATCH] Enumerated all possible values (Zero through ThirtyTwo) for Maskbits. Updated the Cidr module to use the new Maskbits values. --- src/Cidr.hs | 6 ++-- src/Maskbits.hs | 73 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/Cidr.hs b/src/Cidr.hs index ab1ef51..12d9689 100644 --- a/src/Cidr.hs +++ b/src/Cidr.hs @@ -85,9 +85,9 @@ contains _ (Cidr IPv4Address.None _) = False -- address and see if the result is the same as cidr1's mask applied -- to cidr1's address. -- -contains (Cidr addr1 (Maskbits mbits1)) (Cidr addr2 (Maskbits mbits2)) +contains (Cidr addr1 mbits1) (Cidr addr2 mbits2) | mbits1 > mbits2 = False | otherwise = addr1masked == addr2masked where - addr1masked = apply_mask addr1 (Maskbits mbits1) - addr2masked = apply_mask addr2 (Maskbits mbits1) + addr1masked = apply_mask addr1 mbits1 + addr2masked = apply_mask addr2 mbits1 diff --git a/src/Maskbits.hs b/src/Maskbits.hs index cb4ab89..cbd4dbe 100644 --- a/src/Maskbits.hs +++ b/src/Maskbits.hs @@ -4,15 +4,80 @@ module Maskbits ) where -- A type representing the number of bits in a CIDR netmask. -data Maskbits = None | Maskbits Int - deriving (Eq, Show) +data Maskbits = None + | Zero + | One + | Two + | Three + | Four + | Five + | Six + | Seven + | Eight + | Nine + | Ten + | Eleven + | Twelve + | Thirteen + | Fourteen + | Fifteen + | Sixteen + | Seventeen + | Eighteen + | Nineteen + | Twenty + | TwentyOne + | TwentyTwo + | TwentyThree + | TwentyFour + | TwentyFive + | TwentySix + | TwentySeven + | TwentyEight + | TwentyNine + | Thirty + | ThirtyOne + | ThirtyTwo + deriving (Eq, Ord, Show) -- There are only 32 bits in an IPv4 address, so there -- can't be more bits than that in the mask. maskbits_from_int :: Int -> Maskbits -maskbits_from_int x | (x < 0) || (x > 32) = None - | otherwise = Maskbits x +maskbits_from_int 0 = Zero +maskbits_from_int 1 = One +maskbits_from_int 2 = Two +maskbits_from_int 3 = Three +maskbits_from_int 4 = Four +maskbits_from_int 5 = Five +maskbits_from_int 6 = Six +maskbits_from_int 7 = Seven +maskbits_from_int 8 = Eight +maskbits_from_int 9 = Nine +maskbits_from_int 10 = Ten +maskbits_from_int 11 = Eleven +maskbits_from_int 12 = Twelve +maskbits_from_int 13 = Thirteen +maskbits_from_int 14 = Fourteen +maskbits_from_int 15 = Fifteen +maskbits_from_int 16 = Sixteen +maskbits_from_int 17 = Seventeen +maskbits_from_int 18 = Eighteen +maskbits_from_int 19 = Nineteen +maskbits_from_int 20 = Twenty +maskbits_from_int 21 = TwentyOne +maskbits_from_int 22 = TwentyTwo +maskbits_from_int 23 = TwentyThree +maskbits_from_int 24 = TwentyFour +maskbits_from_int 25 = TwentyFive +maskbits_from_int 26 = TwentySix +maskbits_from_int 27 = TwentySeven +maskbits_from_int 28 = TwentyEight +maskbits_from_int 29 = TwentyNine +maskbits_from_int 30 = Thirty +maskbits_from_int 31 = ThirtyOne +maskbits_from_int 32 = ThirtyTwo +maskbits_from_int _ = None maskbits_from_string :: String -> Maskbits -- 2.43.2