$ for TIpAddress now prints in the recommended format

This commit is contained in:
Matthias Einwag 2014-03-04 23:02:23 +01:00
commit 74d51a7700

View file

@ -104,7 +104,7 @@ proc `$`*(address: TIpAddress): string =
var word:uint16 = (cast[uint16](address.address_v6[i*2])) shl 8 var word:uint16 = (cast[uint16](address.address_v6[i*2])) shl 8
word = word or cast[uint16](address.address_v6[i*2+1]) word = word or cast[uint16](address.address_v6[i*2+1])
if biggestZeroCount != 0 and # Check if in skip group if biggestZeroCount != 0 and # Check if group is in skip group
(i >= biggestZeroStart and i < (biggestZeroStart + biggestZeroCount)): (i >= biggestZeroStart and i < (biggestZeroStart + biggestZeroCount)):
if i == biggestZeroStart: # skip start if i == biggestZeroStart: # skip start
result.add("::") result.add("::")
@ -112,7 +112,18 @@ proc `$`*(address: TIpAddress): string =
else: else:
if printedLastGroup: if printedLastGroup:
result.add(':') result.add(':')
result.add(toHex(BiggestInt(word),4)) # this has too many digits var
afterLeadingZeros = false
mask = 0xF000'u16
for j in 0'u16..3'u16:
var val = (mask and word) shr (4'u16*(3'u16-j))
if val != 0 or afterLeadingZeros:
if val < 0xA:
result.add(chr(uint16(ord('0'))+val))
else: # val >= 0xA
result.add(chr(uint16(ord('a'))+val-0xA))
afterLeadingZeros = true
mask = mask shr 4
printedLastGroup = true printedLastGroup = true
proc parseIPv4Address(address_str: string): TIpAddress = proc parseIPv4Address(address_str: string): TIpAddress =