Explorar o código

#99 support uintptr

Tao Wen %!s(int64=8) %!d(string=hai) anos
pai
achega
54ab168362
Modificáronse 2 ficheiros con 29 adicións e 0 borrados
  1. 10 0
      feature_reflect.go
  2. 19 0
      feature_reflect_native.go

+ 10 - 0
feature_reflect.go

@@ -365,6 +365,11 @@ func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error
 			return decoderOfType(cfg, reflect.TypeOf((*uint32)(nil)).Elem())
 		}
 		return &uint32Codec{}, nil
+	case reflect.Uintptr:
+		if typeName != "uintptr" {
+			return decoderOfType(cfg, reflect.TypeOf((*uintptr)(nil)).Elem())
+		}
+		return &uintptrCodec{}, nil
 	case reflect.Uint64:
 		if typeName != "uint64" {
 			return decoderOfType(cfg, reflect.TypeOf((*uint64)(nil)).Elem())
@@ -530,6 +535,11 @@ func createEncoderOfSimpleType(cfg *frozenConfig, typ reflect.Type) (ValEncoder,
 			return encoderOfType(cfg, reflect.TypeOf((*uint32)(nil)).Elem())
 		}
 		return &uint32Codec{}, nil
+	case reflect.Uintptr:
+		if typeName != "uintptr" {
+			return encoderOfType(cfg, reflect.TypeOf((*uintptr)(nil)).Elem())
+		}
+		return &uintptrCodec{}, nil
 	case reflect.Uint64:
 		if typeName != "uint64" {
 			return encoderOfType(cfg, reflect.TypeOf((*uint64)(nil)).Elem())

+ 19 - 0
feature_reflect_native.go

@@ -47,6 +47,25 @@ func (codec *intCodec) IsEmpty(ptr unsafe.Pointer) bool {
 	return *((*int)(ptr)) == 0
 }
 
+type uintptrCodec struct {
+}
+
+func (codec *uintptrCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+	*((*uintptr)(ptr)) = uintptr(iter.ReadUint64())
+}
+
+func (codec *uintptrCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+	stream.WriteUint64(uint64(*((*uintptr)(ptr))))
+}
+
+func (encoder *uintptrCodec) EncodeInterface(val interface{}, stream *Stream) {
+	WriteToStream(val, stream, encoder)
+}
+
+func (codec *uintptrCodec) IsEmpty(ptr unsafe.Pointer) bool {
+	return *((*uintptr)(ptr)) == 0
+}
+
 type int8Codec struct {
 }