51 lignes
770 o
Go
51 lignes
770 o
Go
|
package dht
|
||
|
|
||
|
import "encoding/hex"
|
||
|
|
||
|
type nodeID struct {
|
||
|
_int int160
|
||
|
set bool
|
||
|
}
|
||
|
|
||
|
func (me *nodeID) SetFromBytes(b []byte) {
|
||
|
me._int.SetBytes(b)
|
||
|
me.set = true
|
||
|
}
|
||
|
|
||
|
func (me nodeID) String() string {
|
||
|
b := me._int.bits[:]
|
||
|
if len(b) != 20 {
|
||
|
panic(len(b))
|
||
|
}
|
||
|
return hex.EncodeToString(b)
|
||
|
}
|
||
|
|
||
|
func (nid *nodeID) IsSet() bool {
|
||
|
return nid.set
|
||
|
}
|
||
|
|
||
|
func (me *nodeID) Int160() *int160 {
|
||
|
if !me.set {
|
||
|
panic("not set")
|
||
|
}
|
||
|
return &me._int
|
||
|
}
|
||
|
|
||
|
func nodeIDFromString(s string) (ret nodeID) {
|
||
|
ret.SetFromBytes([]byte(s))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (nid0 *nodeID) Distance(nid1 *nodeID) (ret int160) {
|
||
|
if nid0.IsSet() != nid1.IsSet() {
|
||
|
ret.SetMax()
|
||
|
return
|
||
|
}
|
||
|
ret.Xor(&nid0._int, &nid1._int)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (nid nodeID) ByteString() string {
|
||
|
return string(nid.Int160().Bytes())
|
||
|
}
|