@@ -36,22 +36,6 @@ type checkIsEmpty interface {
3636 IsEmpty (ptr unsafe.Pointer ) bool
3737}
3838
39- var jsonRawMessageType reflect.Type
40- var jsoniterRawMessageType reflect.Type
41- var marshalerType reflect.Type
42- var unmarshalerType reflect.Type
43- var textMarshalerType reflect.Type
44- var textUnmarshalerType reflect.Type
45-
46- func init () {
47- jsonRawMessageType = reflect .TypeOf ((* json .RawMessage )(nil )).Elem ()
48- jsoniterRawMessageType = reflect .TypeOf ((* RawMessage )(nil )).Elem ()
49- marshalerType = reflect .TypeOf ((* json .Marshaler )(nil )).Elem ()
50- unmarshalerType = reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ()
51- textMarshalerType = reflect .TypeOf ((* encoding .TextMarshaler )(nil )).Elem ()
52- textUnmarshalerType = reflect .TypeOf ((* encoding .TextUnmarshaler )(nil )).Elem ()
53- }
54-
5539// ReadVal copy the underlying JSON into go interface, same as json.Unmarshal
5640func (iter * Iterator ) ReadVal (obj interface {}) {
5741 typ := reflect .TypeOf (obj )
@@ -171,30 +155,7 @@ func (encoder *onePtrEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
171155}
172156
173157func shouldFixOnePtr (typ reflect.Type ) bool {
174- if isPtrKind (typ .Kind ()) {
175- return true
176- }
177- if typ .Kind () == reflect .Struct {
178- if typ .NumField () != 1 {
179- return false
180- }
181- return shouldFixOnePtr (typ .Field (0 ).Type )
182- }
183- if typ .Kind () == reflect .Array {
184- if typ .Len () != 1 {
185- return false
186- }
187- return shouldFixOnePtr (typ .Elem ())
188- }
189- return false
190- }
191-
192- func isPtrKind (kind reflect.Kind ) bool {
193- switch kind {
194- case reflect .Ptr , reflect .Map , reflect .Chan , reflect .Func :
195- return true
196- }
197- return false
158+ return reflect2 .Type2 (typ ).LikePtr ()
198159}
199160
200161func encoderOfType (cfg * frozenConfig , prefix string , typ reflect.Type ) ValEncoder {
@@ -252,76 +213,6 @@ func createEncoderOfType(cfg *frozenConfig, prefix string, typ reflect.Type) Val
252213 }
253214}
254215
255- func createCheckIsEmpty (cfg * frozenConfig , typ reflect.Type ) checkIsEmpty {
256- kind := typ .Kind ()
257- switch kind {
258- case reflect .String :
259- return & stringCodec {}
260- case reflect .Int :
261- return & intCodec {}
262- case reflect .Int8 :
263- return & int8Codec {}
264- case reflect .Int16 :
265- return & int16Codec {}
266- case reflect .Int32 :
267- return & int32Codec {}
268- case reflect .Int64 :
269- return & int64Codec {}
270- case reflect .Uint :
271- return & uintCodec {}
272- case reflect .Uint8 :
273- return & uint8Codec {}
274- case reflect .Uint16 :
275- return & uint16Codec {}
276- case reflect .Uint32 :
277- return & uint32Codec {}
278- case reflect .Uintptr :
279- return & uintptrCodec {}
280- case reflect .Uint64 :
281- return & uint64Codec {}
282- case reflect .Float32 :
283- return & float32Codec {}
284- case reflect .Float64 :
285- return & float64Codec {}
286- case reflect .Bool :
287- return & boolCodec {}
288- case reflect .Interface :
289- return & dynamicEncoder {reflect2 .Type2 (typ )}
290- case reflect .Struct :
291- return & structEncoder {typ : typ }
292- case reflect .Array :
293- return & arrayEncoder {}
294- case reflect .Slice :
295- return & sliceEncoder {}
296- case reflect .Map :
297- return encoderOfMap (cfg , "" , typ )
298- case reflect .Ptr :
299- return & OptionalEncoder {}
300- default :
301- return & lazyErrorEncoder {err : fmt .Errorf ("unsupported type: %v" , typ )}
302- }
303- }
304-
305-
306- type placeholderDecoder struct {
307- cfg * frozenConfig
308- cacheKey reflect.Type
309- }
310-
311- func (decoder * placeholderDecoder ) Decode (ptr unsafe.Pointer , iter * Iterator ) {
312- for i := 0 ; i < 500 ; i ++ {
313- realDecoder := decoder .cfg .getDecoderFromCache (decoder .cacheKey )
314- _ , isPlaceholder := realDecoder .(* placeholderDecoder )
315- if isPlaceholder {
316- time .Sleep (10 * time .Millisecond )
317- } else {
318- realDecoder .Decode (ptr , iter )
319- return
320- }
321- }
322- panic (fmt .Sprintf ("real decoder not found for cache key: %v" , decoder .cacheKey ))
323- }
324-
325216type lazyErrorDecoder struct {
326217 err error
327218}
0 commit comments