1
0
mirror of https://github.com/json-iterator/go.git synced 2025-07-15 23:54:21 +02:00

remove sliceHeader

This commit is contained in:
Tao Wen
2018-02-19 14:39:57 +08:00
parent b53aa13eb0
commit d6f02cbd48
2 changed files with 4 additions and 18 deletions

View File

@ -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) codec.sliceType.UnsafeSetNil(ptr)
ptrSlice.Len = 0
ptrSlice.Cap = 0
ptrSlice.Data = nil
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)) codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst))
ptrSlice := (*sliceHeader)(ptr)
ptrSlice.Data = dstSlice.Data
ptrSlice.Cap = dstSlice.Cap
ptrSlice.Len = dstSlice.Len
} }
case ArrayValue: case ArrayValue:
codec.sliceDecoder.Decode(ptr, iter) codec.sliceDecoder.Decode(ptr, iter)

View File

@ -49,8 +49,7 @@ func (encoder *sliceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
} }
func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool { func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool {
slice := (*sliceHeader)(ptr) return encoder.sliceType.UnsafeLengthOf(ptr) == 0
return slice.Len == 0
} }
type sliceDecoder struct { type sliceDecoder struct {
@ -58,13 +57,6 @@ type sliceDecoder struct {
elemDecoder ValDecoder elemDecoder ValDecoder
} }
// sliceHeader is a safe version of SliceHeader used within this package.
type sliceHeader struct {
Data unsafe.Pointer
Len int
Cap int
}
func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
decoder.doDecode(ptr, iter) decoder.doDecode(ptr, iter)
if iter.Error != nil && iter.Error != io.EOF { if iter.Error != nil && iter.Error != io.EOF {