Fix lint errors
This commit is contained in:
parent
a9f4123ba2
commit
46aa536b37
41 changed files with 498 additions and 406 deletions
|
|
@ -245,6 +245,53 @@ func (a Address) Len() int {
|
|||
return a.length
|
||||
}
|
||||
|
||||
// String implements the fmt.Stringer interface.
|
||||
func (a Address) String() string {
|
||||
switch l := a.Len(); l {
|
||||
case 4:
|
||||
return fmt.Sprintf("%d.%d.%d.%d", int(a.addr[0]), int(a.addr[1]), int(a.addr[2]), int(a.addr[3]))
|
||||
case 16:
|
||||
// Find the longest subsequence of hexadecimal zeros.
|
||||
start, end := -1, -1
|
||||
for i := 0; i < a.Len(); i += 2 {
|
||||
j := i
|
||||
for j < a.Len() && a.addr[j] == 0 && a.addr[j+1] == 0 {
|
||||
j += 2
|
||||
}
|
||||
if j > i+2 && j-i > end-start {
|
||||
start, end = i, j
|
||||
}
|
||||
}
|
||||
|
||||
var b strings.Builder
|
||||
for i := 0; i < a.Len(); i += 2 {
|
||||
if i == start {
|
||||
b.WriteString("::")
|
||||
i = end
|
||||
if end >= a.Len() {
|
||||
break
|
||||
}
|
||||
} else if i > 0 {
|
||||
b.WriteByte(':')
|
||||
}
|
||||
v := uint16(a.addr[i+0])<<8 | uint16(a.addr[i+1])
|
||||
if v == 0 {
|
||||
b.WriteByte('0')
|
||||
} else {
|
||||
const digits = "0123456789abcdef"
|
||||
for i := uint(3); i < 4; i-- {
|
||||
if v := v >> (i * 4); v != 0 {
|
||||
b.WriteByte(digits[v&0xf])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return b.String()
|
||||
default:
|
||||
return fmt.Sprintf("%x", a.addr[:l])
|
||||
}
|
||||
}
|
||||
|
||||
// WithPrefix returns the address with a prefix that represents a point subnet.
|
||||
func (a Address) WithPrefix() AddressWithPrefix {
|
||||
return AddressWithPrefix{
|
||||
|
|
@ -541,7 +588,7 @@ func (a AddressWithPrefix) Subnet() Subnet {
|
|||
address: a.Address,
|
||||
mask: AddressMask{length: addrLen},
|
||||
}
|
||||
for i := 0; i < addrLen; i++ {
|
||||
for i := range addrLen {
|
||||
sub.mask.mask[i] = 0xff
|
||||
}
|
||||
return sub
|
||||
|
|
@ -550,7 +597,7 @@ func (a AddressWithPrefix) Subnet() Subnet {
|
|||
sa := Address{length: addrLen}
|
||||
sm := AddressMask{length: addrLen}
|
||||
n := uint(a.PrefixLen)
|
||||
for i := 0; i < addrLen; i++ {
|
||||
for i := range addrLen {
|
||||
if n >= 8 {
|
||||
sa.addr[i] = a.Address.addr[i]
|
||||
sm.mask[i] = 0xff
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue