mirror of
https://github.com/json-iterator/go.git
synced 2025-04-20 11:28:49 +02:00
use specific type
This commit is contained in:
parent
c37cf3ea36
commit
871e545b48
@ -148,12 +148,12 @@ func (decoder *optionalDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type structDecoder struct {
|
type generalStructDecoder struct {
|
||||||
type_ reflect.Type
|
type_ reflect.Type
|
||||||
fields map[string]Decoder
|
fields map[string]*structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (decoder *structDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (decoder *generalStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
|
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
|
||||||
fieldDecoder := decoder.fields[field]
|
fieldDecoder := decoder.fields[field]
|
||||||
if fieldDecoder == nil {
|
if fieldDecoder == nil {
|
||||||
@ -181,7 +181,7 @@ func (decoder *skipDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
|||||||
type oneFieldStructDecoder struct {
|
type oneFieldStructDecoder struct {
|
||||||
type_ reflect.Type
|
type_ reflect.Type
|
||||||
fieldName string
|
fieldName string
|
||||||
fieldDecoder Decoder
|
fieldDecoder *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (decoder *oneFieldStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (decoder *oneFieldStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
@ -200,9 +200,9 @@ func (decoder *oneFieldStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator)
|
|||||||
type twoFieldsStructDecoder struct {
|
type twoFieldsStructDecoder struct {
|
||||||
type_ reflect.Type
|
type_ reflect.Type
|
||||||
fieldName1 string
|
fieldName1 string
|
||||||
fieldDecoder1 Decoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldName2 string
|
fieldName2 string
|
||||||
fieldDecoder2 Decoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (decoder *twoFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (decoder *twoFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
@ -224,11 +224,11 @@ func (decoder *twoFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
type threeFieldsStructDecoder struct {
|
type threeFieldsStructDecoder struct {
|
||||||
type_ reflect.Type
|
type_ reflect.Type
|
||||||
fieldName1 string
|
fieldName1 string
|
||||||
fieldDecoder1 Decoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldName2 string
|
fieldName2 string
|
||||||
fieldDecoder2 Decoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldName3 string
|
fieldName3 string
|
||||||
fieldDecoder3 Decoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (decoder *threeFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (decoder *threeFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
@ -252,13 +252,13 @@ func (decoder *threeFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
type fourFieldsStructDecoder struct {
|
type fourFieldsStructDecoder struct {
|
||||||
type_ reflect.Type
|
type_ reflect.Type
|
||||||
fieldName1 string
|
fieldName1 string
|
||||||
fieldDecoder1 Decoder
|
fieldDecoder1 *structFieldDecoder
|
||||||
fieldName2 string
|
fieldName2 string
|
||||||
fieldDecoder2 Decoder
|
fieldDecoder2 *structFieldDecoder
|
||||||
fieldName3 string
|
fieldName3 string
|
||||||
fieldDecoder3 Decoder
|
fieldDecoder3 *structFieldDecoder
|
||||||
fieldName4 string
|
fieldName4 string
|
||||||
fieldDecoder4 Decoder
|
fieldDecoder4 *structFieldDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (decoder *fourFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (decoder *fourFieldsStructDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
@ -538,7 +538,7 @@ func decoderOfOptional(type_ reflect.Type) (Decoder, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
||||||
fields := map[string]Decoder{}
|
fields := map[string]*structFieldDecoder{}
|
||||||
for i := 0; i < type_.NumField(); i++ {
|
for i := 0; i < type_.NumField(); i++ {
|
||||||
field := type_.Field(i)
|
field := type_.Field(i)
|
||||||
fieldDecoderKey := fmt.Sprintf("%s/%s", type_.String(), field.Name)
|
fieldDecoderKey := fmt.Sprintf("%s/%s", type_.String(), field.Name)
|
||||||
@ -572,8 +572,8 @@ func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
|||||||
case 2:
|
case 2:
|
||||||
var fieldName1 string
|
var fieldName1 string
|
||||||
var fieldName2 string
|
var fieldName2 string
|
||||||
var fieldDecoder1 Decoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 Decoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
for fieldName, fieldDecoder := range fields {
|
for fieldName, fieldDecoder := range fields {
|
||||||
if fieldName1 == "" {
|
if fieldName1 == "" {
|
||||||
fieldName1 = fieldName
|
fieldName1 = fieldName
|
||||||
@ -588,9 +588,9 @@ func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
|||||||
var fieldName1 string
|
var fieldName1 string
|
||||||
var fieldName2 string
|
var fieldName2 string
|
||||||
var fieldName3 string
|
var fieldName3 string
|
||||||
var fieldDecoder1 Decoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 Decoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 Decoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
for fieldName, fieldDecoder := range fields {
|
for fieldName, fieldDecoder := range fields {
|
||||||
if fieldName1 == "" {
|
if fieldName1 == "" {
|
||||||
fieldName1 = fieldName
|
fieldName1 = fieldName
|
||||||
@ -610,10 +610,10 @@ func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
|||||||
var fieldName2 string
|
var fieldName2 string
|
||||||
var fieldName3 string
|
var fieldName3 string
|
||||||
var fieldName4 string
|
var fieldName4 string
|
||||||
var fieldDecoder1 Decoder
|
var fieldDecoder1 *structFieldDecoder
|
||||||
var fieldDecoder2 Decoder
|
var fieldDecoder2 *structFieldDecoder
|
||||||
var fieldDecoder3 Decoder
|
var fieldDecoder3 *structFieldDecoder
|
||||||
var fieldDecoder4 Decoder
|
var fieldDecoder4 *structFieldDecoder
|
||||||
for fieldName, fieldDecoder := range fields {
|
for fieldName, fieldDecoder := range fields {
|
||||||
if fieldName1 == "" {
|
if fieldName1 == "" {
|
||||||
fieldName1 = fieldName
|
fieldName1 = fieldName
|
||||||
@ -633,7 +633,7 @@ func decoderOfStruct(type_ reflect.Type) (Decoder, error) {
|
|||||||
fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
|
fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
|
||||||
fieldName4, fieldDecoder4}, nil
|
fieldName4, fieldDecoder4}, nil
|
||||||
}
|
}
|
||||||
return &structDecoder{type_, fields}, nil
|
return &generalStructDecoder{type_, fields}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func decoderOfSlice(type_ reflect.Type) (Decoder, error) {
|
func decoderOfSlice(type_ reflect.Type) (Decoder, error) {
|
||||||
|
@ -285,12 +285,12 @@ type StructOfTagOne struct {
|
|||||||
func Benchmark_jsoniter_reflect(b *testing.B) {
|
func Benchmark_jsoniter_reflect(b *testing.B) {
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
for n := 0; n < b.N; n++ {
|
for n := 0; n < b.N; n++ {
|
||||||
//iter := ParseString(`{"field3": "100"}`)
|
iter := ParseString(`{"field3": "100"}`)
|
||||||
//struct_ := StructOfTagOne{}
|
struct_ := StructOfTagOne{}
|
||||||
//iter.Read(&struct_)
|
iter.Read(&struct_)
|
||||||
iter := ParseString(`[1,2,3]`)
|
//iter := ParseString(`[1,2,3]`)
|
||||||
var array []int
|
//var array []int
|
||||||
iter.Read(&array)
|
//iter.Read(&array)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user