]> gitweb.michael.orlitzky.com - hath.git/blob - src/Maskbits.hs
Enumerated all possible values (Zero through ThirtyTwo) for Maskbits.
[hath.git] / src / Maskbits.hs
1 module Maskbits
2 ( Maskbits(..),
3 maskbits_from_string
4 ) where
5
6 -- A type representing the number of bits in a CIDR netmask.
7 data Maskbits = None
8 | Zero
9 | One
10 | Two
11 | Three
12 | Four
13 | Five
14 | Six
15 | Seven
16 | Eight
17 | Nine
18 | Ten
19 | Eleven
20 | Twelve
21 | Thirteen
22 | Fourteen
23 | Fifteen
24 | Sixteen
25 | Seventeen
26 | Eighteen
27 | Nineteen
28 | Twenty
29 | TwentyOne
30 | TwentyTwo
31 | TwentyThree
32 | TwentyFour
33 | TwentyFive
34 | TwentySix
35 | TwentySeven
36 | TwentyEight
37 | TwentyNine
38 | Thirty
39 | ThirtyOne
40 | ThirtyTwo
41 deriving (Eq, Ord, Show)
42
43
44 -- There are only 32 bits in an IPv4 address, so there
45 -- can't be more bits than that in the mask.
46 maskbits_from_int :: Int -> Maskbits
47 maskbits_from_int 0 = Zero
48 maskbits_from_int 1 = One
49 maskbits_from_int 2 = Two
50 maskbits_from_int 3 = Three
51 maskbits_from_int 4 = Four
52 maskbits_from_int 5 = Five
53 maskbits_from_int 6 = Six
54 maskbits_from_int 7 = Seven
55 maskbits_from_int 8 = Eight
56 maskbits_from_int 9 = Nine
57 maskbits_from_int 10 = Ten
58 maskbits_from_int 11 = Eleven
59 maskbits_from_int 12 = Twelve
60 maskbits_from_int 13 = Thirteen
61 maskbits_from_int 14 = Fourteen
62 maskbits_from_int 15 = Fifteen
63 maskbits_from_int 16 = Sixteen
64 maskbits_from_int 17 = Seventeen
65 maskbits_from_int 18 = Eighteen
66 maskbits_from_int 19 = Nineteen
67 maskbits_from_int 20 = Twenty
68 maskbits_from_int 21 = TwentyOne
69 maskbits_from_int 22 = TwentyTwo
70 maskbits_from_int 23 = TwentyThree
71 maskbits_from_int 24 = TwentyFour
72 maskbits_from_int 25 = TwentyFive
73 maskbits_from_int 26 = TwentySix
74 maskbits_from_int 27 = TwentySeven
75 maskbits_from_int 28 = TwentyEight
76 maskbits_from_int 29 = TwentyNine
77 maskbits_from_int 30 = Thirty
78 maskbits_from_int 31 = ThirtyOne
79 maskbits_from_int 32 = ThirtyTwo
80 maskbits_from_int _ = None
81
82
83 maskbits_from_string :: String -> Maskbits
84 maskbits_from_string s =
85 case (reads s :: [(Int, String)]) of
86 [] -> None
87 x:_ -> maskbits_from_int (fst x)