X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMaskbits.hs;h=06314e395f2043c12da778f81405203692e5ded2;hb=9200fe5fcab505e5a331514a6ee687c6f78011b1;hp=fcf57bdb379760ba2349bf2815e13aa62425085b;hpb=c6dd49a7894d1e05aa17d77c5377c8164ab6eedc;p=hath.git diff --git a/src/Maskbits.hs b/src/Maskbits.hs index fcf57bd..06314e3 100644 --- a/src/Maskbits.hs +++ b/src/Maskbits.hs @@ -1,8 +1,11 @@ module Maskbits ( Maskbits(..), + decrement, maskbits_from_string ) where +import Test.QuickCheck + -- A type representing the number of bits in a CIDR netmask. data Maskbits = None | Zero @@ -78,6 +81,42 @@ instance Show Maskbits where show ThirtyTwo = "32" +instance Arbitrary Maskbits where + arbitrary = elements [ 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 ] + + -- There are only 32 bits in an IPv4 address, so there -- can't be more bits than that in the mask. @@ -123,3 +162,41 @@ maskbits_from_string s = case (reads s :: [(Int, String)]) of [] -> None x:_ -> maskbits_from_int (fst x) + + + +decrement :: Maskbits -> Maskbits +decrement None = None +decrement Zero = None +decrement One = Zero +decrement Two = One +decrement Three = Two +decrement Four = Three +decrement Five = Four +decrement Six = Five +decrement Seven = Six +decrement Eight = Seven +decrement Nine = Eight +decrement Ten = Nine +decrement Eleven = Ten +decrement Twelve = Eleven +decrement Thirteen = Twelve +decrement Fourteen = Thirteen +decrement Fifteen = Fourteen +decrement Sixteen = Fifteen +decrement Seventeen = Sixteen +decrement Eighteen = Seventeen +decrement Nineteen = Eighteen +decrement Twenty = Nineteen +decrement TwentyOne = Twenty +decrement TwentyTwo = TwentyOne +decrement TwentyThree = TwentyTwo +decrement TwentyFour = TwentyThree +decrement TwentyFive = TwentyFour +decrement TwentySix = TwentyFive +decrement TwentySeven = TwentySix +decrement TwentyEight = TwentySeven +decrement TwentyNine = TwentyEight +decrement Thirty = TwentyNine +decrement ThirtyOne = Thirty +decrement ThirtyTwo = ThirtyOne