@@ -8,7 +8,8 @@ range, wrap = do
88local Net , Net4 , Net6
99
1010Net4 = do
11- __tostring = => concat( range( 4 ) \ map(( i) -> @[ i] ) \ toarray!, " ." ) .. " /#{@mask}"
11+ ip4 = => concat range( 4 ) \ map(( i) -> @[ i] ) \ toarray!, " ."
12+ __tostring = => ip4( @) .. " /#{@mask}"
1213 mt =
1314 __index : ( k) => @bits >> 8 * ( 4 - k) & ( 1 << 8 ) - 1
1415 __le : ( o) =>
@@ -21,19 +22,20 @@ Net4 = do
2122 mask = tonumber ( mask) or 32
2223 bits = wrap( @gmatch " [^%.]+" ) \ imap(( i) => tonumber ( @) << 8 * ( 4 - i)) \ reduce ( a, b) -> a + b
2324 bits = bits >> ( 32 - mask) << ( 32 - mask)
24- setmetatable { : bits, : mask, v : 4 } , mt
25+ setmetatable { : bits, : mask, v : 4 , ip : ip4 } , mt
2526
2627
2728Net6 = do -- 128 bits and IPv6 representation make it a bit more complex
28- __repr = =>
29+ ip6 = =>
2930 s = concat range( 8 ) \ map(( i) -> " %x" \ format( @[ i] )) \ toarray!, " :"
3031 for n = 8 , 1 , - 1
3132 zeros = " :" .. concat range( n) \ map( -> " 0" ) \ toarray!, " :"
3233 s, r = s\ gsub zeros, " ::" , 1
3334 if r > 0
3435 s = s\ gsub( " :::*" , " ::" ) \ gsub( " ^0::" , " ::" ) \ gsub " ^::0$" , " ::"
3536 break
36- " #{s}/#{@mask}"
37+ s
38+ __repr = => ip6( @) .. " /#{@mask}"
3739 mt =
3840 __index : ( k) =>
3941 @bits [ ( k- 1 ) // 4 + 1 ] >> 16 * (( 8 - k) % 4 ) & ( 1 << 16 ) - 1
@@ -44,8 +46,8 @@ Net6 = do -- 128 bits and IPv6 representation make it a bit more complex
4446 return false if o. mask >= 64 and @bits [ 1 ] ~= o. bits[ 1 ]
4547 return false if o. mask < 64 and ( @bits [ 1 ] >> ( 64 - o. mask) << ( 64 - o. mask)) ~= o. bits[ 1 ]
4648 ( @bits [ 2 ] >> ( 128 - o. mask) << ( 128 - o. mask)) == o. bits[ 2 ]
47- __tostring : __repr, : __repr
48- Net6 = =>
49+ __tostring : __repr, : __repr, ip : ip6
50+ =>
4951 @, mask = @match " ([^/]*)/?([^/]*)$"
5052 mask = tonumber ( mask) or 128
5153 address = wrap( @gmatch " ([^:]*):?" ) \ toarray!
@@ -68,7 +70,7 @@ Net6 = do -- 128 bits and IPv6 representation make it a bit more complex
6870 if mask < 64
6971 bits[ 1 ] = bits[ 1 ] >> ( 64 - mask) << ( 64 - mask)
7072 bits[ 2 ] = bits[ 2 ] >> ( 128 - mask) << ( 128 - mask)
71- setmetatable { : bits, : mask, v : 6 } , mt
73+ setmetatable { : bits, : mask, v : 6 , ip : ip6 } , mt
7274
7375
7476Net = => @match " :" and Net6 ( @) or Net4 ( @)
0 commit comments