+func (p peerId) GobEncode() (b []byte, _ error) {
+ *(*reflect.SliceHeader)(unsafe.Pointer(&b)) = reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(&p.ptr)),
+ Len: int(unsafe.Sizeof(p.ptr)),
+ Cap: int(unsafe.Sizeof(p.ptr)),
+ }
+ return
+}
+
+func (p *peerId) GobDecode(b []byte) error {
+ if uintptr(len(b)) != unsafe.Sizeof(p.ptr) {
+ panic(len(b))
+ }
+ ptr := unsafe.Pointer(&b[0])
+ p.ptr = *(*uintptr)(ptr)
+ log.Printf("%p", ptr)
+ dst := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(&p.Peer)),
+ Len: int(unsafe.Sizeof(p.Peer)),
+ Cap: int(unsafe.Sizeof(p.Peer)),
+ }
+ copy(*(*[]byte)(unsafe.Pointer(&dst)), b)
+ return nil
+}
+