diff --git a/feature_reflect.go b/feature_reflect.go index 44b86d8..c821b6b 100644 --- a/feature_reflect.go +++ b/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()) diff --git a/feature_reflect_native.go b/feature_reflect_native.go index 424b567..61fc2fd 100644 --- a/feature_reflect_native.go +++ b/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 { }