|
@@ -493,15 +493,13 @@ func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type base64Codec struct {
|
|
type base64Codec struct {
|
|
|
|
|
+ sliceType *reflect2.UnsafeSliceType
|
|
|
sliceDecoder ValDecoder
|
|
sliceDecoder ValDecoder
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
|
func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
|
|
if iter.ReadNil() {
|
|
if iter.ReadNil() {
|
|
|
- ptrSlice := (*sliceHeader)(ptr)
|
|
|
|
|
- ptrSlice.Len = 0
|
|
|
|
|
- ptrSlice.Cap = 0
|
|
|
|
|
- ptrSlice.Data = nil
|
|
|
|
|
|
|
+ codec.sliceType.UnsafeSetNil(ptr)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
switch iter.WhatIsNext() {
|
|
switch iter.WhatIsNext() {
|
|
@@ -516,11 +514,7 @@ func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
|
|
iter.ReportError("decode base64", err.Error())
|
|
iter.ReportError("decode base64", err.Error())
|
|
|
} else {
|
|
} else {
|
|
|
dst = dst[:len]
|
|
dst = dst[:len]
|
|
|
- dstSlice := (*sliceHeader)(unsafe.Pointer(&dst))
|
|
|
|
|
- ptrSlice := (*sliceHeader)(ptr)
|
|
|
|
|
- ptrSlice.Data = dstSlice.Data
|
|
|
|
|
- ptrSlice.Cap = dstSlice.Cap
|
|
|
|
|
- ptrSlice.Len = dstSlice.Len
|
|
|
|
|
|
|
+ codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst))
|
|
|
}
|
|
}
|
|
|
case ArrayValue:
|
|
case ArrayValue:
|
|
|
codec.sliceDecoder.Decode(ptr, iter)
|
|
codec.sliceDecoder.Decode(ptr, iter)
|